<?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>117162</bug_id>
          
          <creation_ts>2013-06-03 12:55:07 -0700</creation_ts>
          <short_desc>[CSS Shapes][CSS Exclusions] Split CSS Exclusions and CSS Shapes code</short_desc>
          <delta_ts>2013-06-10 14:24:00 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89256</blocked>
    
    <blocked>117173</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Bear Travis">betravis</reporter>
          <assigned_to name="Bear Travis">betravis</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>giles_joplin</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>896580</commentid>
    <comment_count>0</comment_count>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-03 12:55:07 -0700</bug_when>
    <thetext>With CSS Exclusions &amp; Shapes splitting into two separate features, some code cleanup is required.
http://dev.w3.org/csswg/css-exclusions/
http://dev.w3.org/csswg/css-shapes/

This work will clean up the implementation side.
A subsequent patch will clean up the test side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896648</commentid>
    <comment_count>1</comment_count>
      <attachid>203633</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-03 15:38:04 -0700</bug_when>
    <thetext>Created attachment 203633
Initial Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897605</commentid>
    <comment_count>2</comment_count>
      <attachid>203894</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-05 17:34:44 -0700</bug_when>
    <thetext>Created attachment 203894
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897608</commentid>
    <comment_count>3</comment_count>
      <attachid>203894</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-06-05 17:47:52 -0700</bug_when>
    <thetext>Comment on attachment 203894
Updated patch

Attachment 203894 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/756256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897609</commentid>
    <comment_count>4</comment_count>
      <attachid>203894</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-06-05 17:49:48 -0700</bug_when>
    <thetext>Comment on attachment 203894
Updated patch

Attachment 203894 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/786051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897610</commentid>
    <comment_count>5</comment_count>
      <attachid>203894</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-05 17:54:13 -0700</bug_when>
    <thetext>Comment on attachment 203894
Updated patch

Attachment 203894 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/709903</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897615</commentid>
    <comment_count>6</comment_count>
      <attachid>203894</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-05 18:24:02 -0700</bug_when>
    <thetext>Comment on attachment 203894
Updated patch

Attachment 203894 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/786052</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897618</commentid>
    <comment_count>7</comment_count>
      <attachid>203894</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-06-05 18:35:30 -0700</bug_when>
    <thetext>Comment on attachment 203894
Updated patch

Attachment 203894 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/758687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897859</commentid>
    <comment_count>8</comment_count>
      <attachid>203953</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-06 11:19:04 -0700</bug_when>
    <thetext>Created attachment 203953
Adding directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897861</commentid>
    <comment_count>9</comment_count>
      <attachid>203953</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-06-06 11:26:57 -0700</bug_when>
    <thetext>Comment on attachment 203953
Adding directory

Attachment 203953 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/697563</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897862</commentid>
    <comment_count>10</comment_count>
      <attachid>203953</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-06-06 11:27:06 -0700</bug_when>
    <thetext>Comment on attachment 203953
Adding directory

Attachment 203953 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/790018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897864</commentid>
    <comment_count>11</comment_count>
      <attachid>203953</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-06 11:36:59 -0700</bug_when>
    <thetext>Comment on attachment 203953
Adding directory

Attachment 203953 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/695650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897865</commentid>
    <comment_count>12</comment_count>
      <attachid>203953</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-06 11:38:27 -0700</bug_when>
    <thetext>Comment on attachment 203953
Adding directory

Attachment 203953 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/658714</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897874</commentid>
    <comment_count>13</comment_count>
      <attachid>203953</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-06-06 12:23:10 -0700</bug_when>
    <thetext>Comment on attachment 203953
Adding directory

Attachment 203953 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/777228</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897920</commentid>
    <comment_count>14</comment_count>
      <attachid>203967</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-06 14:20:10 -0700</bug_when>
    <thetext>Created attachment 203967
Adding ShapeOutsideInfo.h to sources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897924</commentid>
    <comment_count>15</comment_count>
      <attachid>203967</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-06-06 14:27:36 -0700</bug_when>
    <thetext>Comment on attachment 203967
Adding ShapeOutsideInfo.h to sources

Attachment 203967 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/790055</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897925</commentid>
    <comment_count>16</comment_count>
      <attachid>203967</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-06-06 14:28:29 -0700</bug_when>
    <thetext>Comment on attachment 203967
Adding ShapeOutsideInfo.h to sources

Attachment 203967 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/792010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897926</commentid>
    <comment_count>17</comment_count>
      <attachid>203967</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-06 14:31:13 -0700</bug_when>
    <thetext>Comment on attachment 203967
Adding ShapeOutsideInfo.h to sources

Attachment 203967 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/772478</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897927</commentid>
    <comment_count>18</comment_count>
      <attachid>203967</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-06 14:31:56 -0700</bug_when>
    <thetext>Comment on attachment 203967
Adding ShapeOutsideInfo.h to sources

Attachment 203967 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/772479</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897957</commentid>
    <comment_count>19</comment_count>
      <attachid>203967</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-06-06 15:44:18 -0700</bug_when>
    <thetext>Comment on attachment 203967
Adding ShapeOutsideInfo.h to sources

Attachment 203967 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/792025</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897959</commentid>
    <comment_count>20</comment_count>
      <attachid>203976</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-06 15:48:14 -0700</bug_when>
    <thetext>Created attachment 203976
Adding folders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897965</commentid>
    <comment_count>21</comment_count>
      <attachid>203977</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-06 16:10:19 -0700</bug_when>
    <thetext>Created attachment 203977
Updating patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897968</commentid>
    <comment_count>22</comment_count>
      <attachid>203977</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-06 16:29:04 -0700</bug_when>
    <thetext>Comment on attachment 203977
Updating patch

Attachment 203977 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/774331</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897969</commentid>
    <comment_count>23</comment_count>
      <attachid>203977</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-06-06 16:33:16 -0700</bug_when>
    <thetext>Comment on attachment 203977
Updating patch

Attachment 203977 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/790080</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898240</commentid>
    <comment_count>24</comment_count>
      <attachid>204056</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-07 11:13:10 -0700</bug_when>
    <thetext>Created attachment 204056
cmakelists additions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898298</commentid>
    <comment_count>25</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-06-07 14:47:13 -0700</bug_when>
    <thetext>It would be helpful if there were a summary of the before/after classnames at the top of the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898300</commentid>
    <comment_count>26</comment_count>
      <attachid>204056</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2013-06-07 14:53:54 -0700</bug_when>
    <thetext>Comment on attachment 204056
cmakelists additions

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

It looks okay to me. 1 comment:

&gt; Source/WebCore/rendering/RenderBlock.cpp:1447
&gt; +    ShapeInsideInfo* shapeInsideInfo;

nit: you can leave this in the block below as it was before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898692</commentid>
    <comment_count>27</comment_count>
      <attachid>204176</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-10 11:51:28 -0700</bug_when>
    <thetext>Created attachment 204176
Updated, incorporating feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898706</commentid>
    <comment_count>28</comment_count>
      <attachid>204176</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-06-10 13:20:55 -0700</bug_when>
    <thetext>Comment on attachment 204176
Updated, incorporating feedback

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

r=me

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:118
&gt; +        ShapeInsideInfo* shapeInsideInfo = m_block-&gt;layoutShapeInsideInfo();
&gt; +        if (shapeInsideInfo)

nit: The variable could live inside the condition statement. That&apos;s more like the WebKit style.

&gt; Tools/ChangeLog:8
&gt; +        Adding the rendering/shapes directory

nit: It looks like you forgot to finish the sentence in the WebKit project Changelogs. &quot;Adding the webcore/rendering/shapes directory to the include list.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898713</commentid>
    <comment_count>29</comment_count>
      <attachid>204184</attachid>
    <who name="Bear Travis">betravis</who>
    <bug_when>2013-06-10 13:38:11 -0700</bug_when>
    <thetext>Created attachment 204184
Incorporating feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898722</commentid>
    <comment_count>30</comment_count>
      <attachid>204184</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-10 14:23:55 -0700</bug_when>
    <thetext>Comment on attachment 204184
Incorporating feedback

Clearing flags on attachment: 204184

Committed r151402: &lt;http://trac.webkit.org/changeset/151402&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898723</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-10 14:24:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203633</attachid>
            <date>2013-06-03 15:38:04 -0700</date>
            <delta_ts>2013-06-05 17:34:42 -0700</delta_ts>
            <desc>Initial Patch</desc>
            <filename>bug-117162-20130603153636.patch</filename>
            <type>text/plain</type>
            <size>329245</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGRjOTgyZWMyNGQyNzIx
NWRjNzAyYjE4ZGRlYzFhMGRlYjgzNjc2MS4uMjFjYzQxOTkxZDU0OTZiNTA4NTZlYjA5OGI3MDll
YWIwYWJlYmIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzOCBAQAorMjAxMy0wNi0wMyAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDU1MgRXhjbHVz
aW9ucyBhbmQgQ1NTIFNoYXBlcyBhcmUgbm93IHR3byBzZXBhcmF0ZSBmZWF0dXJlcyBkZWZpbmVk
IGJ5IHR3byBzZXBhcmF0ZQorICAgICAgICBzcGVjaWZpY2F0aW9ucy4gVGhpcyBwYXRjaCBjbGVh
bnMgdXAgYW55IHNoYXBlcyBjb2RlIHRoYXQgbWF5IGhhdmUgdXNlZCB0aGUgZXhjbHVzaW9ucwor
ICAgICAgICBuYW1lLiBUaGUgbWFpbiBjaGFuZ2VzIGFyZSByZW5hbWluZyB0aGUgQ1NTX0VYQ0xV
U0lPTlMgY29tcGlsZSBmbGFnIHRvIENTU19TSEFQRVMsIGFuZAorICAgICAgICByZW5hbWluZyB0
aGUgdmFyaW91cyBFeGNsdXNpb25TaGFwZSBjbGFzc2VzIHRvIHNob3J0ZXIgU2hhcGUgbmFtZXMu
CisKKyAgICAgICAgQ29kZSByZWZhY3RvcmluZywgbm8gYWRkaXRpb25hbCB0ZXN0cy4KKworICAg
ICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q1NTU2hhcGVzRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjc3NTaGFwZXNFbmFi
bGVkKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUpOgor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTaW1wbGVM
ZW5ndGhQcm9wZXJ0eUlEKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRLZXl3b3JkUHJvcGVy
dHlBbmRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0tleXdvcmRQcm9wZXJ0eUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgICogY3NzL0NT
U1Byb3BlcnR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5Ojppc0luaGVyaXRl
ZFByb3BlcnR5KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U2hhcGU6OnNldFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlTaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5U2hhcGU6OmNyZWF0ZUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcik6CisgICAg
ICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjps
b2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlB
bmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5V3JhcHBlclNoYXBlOjpQcm9wZXJ0eVdyYXBwZXJTaGFwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6ZW5zdXJlUHJvcGVydHlNYXApOgor
ICAgICAgICAqIHJlbmRlcmluZy9CaWRpUnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVu
OjpCaWRpUnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvTGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2hhcGVJbnNpZGVJbmZvKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0JlZm9yZUNoaWxkTGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlU2hhcGVTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0Fm
dGVyQ2hpbGRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZs
b2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlTG9n
aWNhbExvY2F0aW9uRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBv
c2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29sbGVjdElmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmVuc3VyZVNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6c2hhcGVJbnNpZGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpzZXRTaGFwZUluc2lkZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjp5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRJbnRlcnZhbFNlYXJjaEFkYXB0ZXI6
OkZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlv
dXRTaGFwZUluc2lkZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpMaW5lV2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjp1cGRhdGVBdmFpbGFibGVXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3
RmxvYXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29uc3RydWN0
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlRXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlv
blBvc2l0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1
dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnN0cnVjdEJpZGlSdW5zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMb2dp
Y2FsTGluZVRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJv
dW5kYXJpZXNGb3JTaGFwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVz
dExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVTaGFw
ZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzaGFwZU91dHNpZGVJbmZvKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50T2Zmc2V0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNob3VsZEJlTm9ybWFsRmxvd09ubHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aGFzUGFpbnRPZmZzZXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUG9s
eWdvblNoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25Qb2x5Z29uLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmxlZnRTaWRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzUmVmbGV4VmVydGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVYSW50
ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Omlud2FyZEVkZ2VOb3JtYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6b3V0d2FyZEVkZ2VOb3JtYWwpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5k
QXJjKToKKyAgICAgICAgKFdlYkNvcmU6OnNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UG9s
eWdvblNoYXBlOjpzaGFwZVBhZGRpbmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdv
blNoYXBlOjpzaGFwZU1hcmdpbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0ZXhJ
bnRlcnNlY3Rpb25WZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRJbnRlcnZhbFgp
OgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHln
b25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdv
blNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZp
dFJlY3RJblBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6YWJvdmVPclRvVGhlTGVmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2lj
YWxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oLgorICAg
ICAgICAoV2ViQ29yZTo6T2Zmc2V0UG9seWdvbkVkZ2U6Ok9mZnNldFBvbHlnb25FZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjplZGdlSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2V0UG9seWdvbkVkZ2U6OmJhc2lzKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
bHlnb25TaGFwZTo6UG9seWdvblNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1Jl
Y3RhbmdsZVNoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25SZWN0YW5nbGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6ZWxsaXBzZVhJbnRlcmNl
cHQpOgorICAgICAgICAoV2ViQ29yZTo6ZWxsaXBzZVlJbnRlcmNlcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cGFkZGluZ0JvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0OjptYXJnaW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdDo6Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBlUGFkZGluZ0JvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWN0YW5nbGVTaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVjdGFuZ2xlU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlY3RhbmdsZVNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWN0YW5nbGVTaGFwZTo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oLgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6RmxvYXRSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0OjpyeCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJvdW5k
ZWRSZWN0OjpyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6UmVjdGFuZ2xl
U2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVJlY3RhbmdsZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNoYXBlQ2lyY2xlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNoYXBlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVQb2x5Z29uU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
cGh5c2ljYWxSZWN0VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUG9pbnRU
b0xvZ2ljYWwpOgorICAgICAgICAoV2ViQ29yZTo6cGh5c2ljYWxTaXplVG9Mb2dpY2FsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlLmguCisgICAgICAgIChXZWJDb3JlOjpMaW5lU2VnbWVudDo6TGluZVNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6On5TaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZTo6c2hhcGVNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlUGFk
ZGluZyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjo6OmNvbXB1dGVkU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Ojpj
b21wdXRlU2VnbWVudHNGb3JMaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBl
SW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6ZW5zdXJlSW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjpyZW1vdmVJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hcHBlZEluZm86OmluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6aW5m
b01hcCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86On5TaGFwZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpzZXRTaGFwZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGVJbmZvOjpjbGVhclNlZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6
c2hhcGVMb2dpY2FsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dp
Y2FsQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsTGVm
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbFJpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVJbmZvOjpzaGFwZUxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGluZVRvcCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUlu
Zm86OmxvZ2ljYWxMaW5lQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hh
cGVDb250YWluaW5nQmxvY2tIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjps
aW5lT3ZlcmxhcHNTaGFwZUJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86Omxp
bmVXaXRoaW5TaGFwZUJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmRpcnR5
U2hhcGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVTaXplRGlydHkp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpvd25lcik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OlNoYXBlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86Omxv
Z2ljYWxUb3BPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGVm
dE9mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMaW5lU2VnbWVudFJhbmdlOjpMaW5lU2Vn
bWVudFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVk
Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6YWRqdXN0TG9naWNhbExp
bmVUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmguCisgICAgICAgIChXZWJDb3JlOjpMaW5lU2VnbWVudEl0ZXJhdG9yOjpMaW5lU2VnbWVu
dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6Y3JlYXRlSW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86Omhhc1NlZ21lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2VnbWVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcGVJbnNpZGVJbmZvOjpzZWdtZW50UmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlSW5zaWRlSW5mbzo6Y3VycmVudFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVJbnNpZGVJbmZvOjpzZXROZWVkc0xheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUlu
c2lkZUluZm86Om5lZWRzTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5m
bzo6c2V0TmVlZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6
bmVlZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6U2hhcGVJ
bnNpZGVJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFs
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVydmFsWDFDb21wYXJhdG9yOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW50ZXJ2YWw6OmludGVyc2VjdCk6CisgICAgICAg
IChXZWJDb3JlOjpzb3J0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VT
aGFwZUludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnNlY3RTaGFwZUludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oLgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGVJbnRlcnZhbDo6U2hhcGVJbnRlcnZhbCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZU91dHNpZGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNo
YXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91
dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmguCisgICAgICAgIChXZWJDb3JlOjpT
aGFwZU91dHNpZGVJbmZvOjpzaGFwZUxvZ2ljYWxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGVPdXRzaWRlSW5mbzo6bGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6cmlnaHRTZWdtZW50U2hhcGVCb3VuZGlu
Z0JveERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OmNyZWF0ZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6U2hhcGVPdXRzaWRlSW5m
byk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hh
cGVWYWx1ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4
Y2x1c2lvblNoYXBlVmFsdWUuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0
ZVNoYXBlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lk
ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZVZhbHVlOjpzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpzZXRJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZVZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
VmFsdWU6OlNoYXBlVmFsdWUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6QmFja3VwKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6cmVzdG9yZVRvKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OnNldENTU0V4Y2x1c2lvbnNFbmFi
bGVkKToKKwogMjAxMy0wNi0wMyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgogCiAgICAgICAgIEFYOiBNYXRoTUwgbXVsdGlzY3JpcHRzIG5vdCBleHBvc2VkIGluIEFjY2Vz
c2liaWxpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGM1YTg5ZjkxOTM3ZmJjNmE2ODNhZmE1
OTdhMzE5NzZjYWE3NzExYy4uNzFmMmMxYmQxZjZiMzkzYjJhMTQ2ZjRjOTYzZDc3MDJhMzY1OGRi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwOTYsMTMgKzIwOTYsNiBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiAgICAgcmVuZGVyaW5nL0NvdW50
ZXJOb2RlLmNwcAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKLSAgICByZW5kZXJpbmcv
RXhjbHVzaW9uSW50ZXJ2YWwuY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3Bw
Ci0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAKLSAgICByZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGUuY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAKLSAg
ICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcAotICAgIHJlbmRlcmluZy9F
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcAogICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKICAgICByZW5k
ZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCkBAIC0yMjAzLDYgKzIxOTYsMTMgQEAgc2V0
KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJXb3JkQnJlYWsuY3BwCiAgICAg
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9y
LmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcAorICAgIHJlbmRlcmlu
Zy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAKKyAgICByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW5zaWRlSW5mby5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2
YWwuY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcAogICAgIHJl
bmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAogICAgIHJlbmRlcmluZy9icmVha19saW5lcy5jcHAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZwppbmRleCBmOTU2YTc4NTFhMWJhYTdlYWY5MjU5M2Q3MGFkMDllYjFiYjU1YTZm
Li5kZDU3NWRhNWZiODUzYmFiZWYzNDVmN2E3ODA1YWJiZjU5NmViMzI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpA
QCAtNDYsNyArNDYsNyBAQCBFTkFCTEVfQ1NQX05FWFQgPSA7CiBFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLID0gRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSzsKIEVOQUJMRV9D
U1NfQ09NUE9TSVRJTkcgPSBFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HOwogRU5BQkxFX0NTU19ERVZJ
Q0VfQURBUFRBVElPTiA9IDsKLUVOQUJMRV9DU1NfRVhDTFVTSU9OUyA9IEVOQUJMRV9DU1NfRVhD
TFVTSU9OUzsKK0VOQUJMRV9DU1NfU0hBUEVTID0gRU5BQkxFX0NTU19TSEFQRVM7CiBFTkFCTEVf
Q1NTX0ZJTFRFUlMgPSBFTkFCTEVfQ1NTX0ZJTFRFUlM7CiBFTkFCTEVfQ1NTX0lNQUdFX09SSUVO
VEFUSU9OID0gOwogRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OID0gOwpAQCAtMTgzLDQgKzE4
Myw0IEBAIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVfWEhSX1RJTUVP
VVQgPSBFTkFCTEVfWEhSX1RJTUVPVVQ7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1G
RUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0FDQ0VMRVJB
VEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQkxPQikgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5H
KSAkKEVOQUJMRV9DQU5WQVNfUEFUSCkgJChFTkFCTEVfQ0FOVkFTX1BST1hZKSAkKEVOQUJMRV9D
SEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVD
T1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAkKEVOQUJMRV9D
U1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19JTUFHRV9P
UklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19S
RUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAk
KEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVFJBTlNGT1JNU19BTklN
QVRJT05TX1VOUFJFRklYRUQpICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNf
Q09ORElUSU9OQUxfUlVMRVMpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTM19URVhU
X0xJTkVfQlJFQUspICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DVVNUT01f
U0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRB
TElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRB
SUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9H
X0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0RPTTRfRVZFTlRT
X0NPTlNUUlVDVE9SKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJMRV9FTkNSWVBU
RURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQV9WMikgJChFTkFCTEVfRklMRV9TWVNU
RU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZPTlRfTE9BRF9FVkVOVFMpICQoRU5BQkxF
X0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikg
JChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0hJR0hf
RFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxF
U1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkgJChF
TkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdB
Q1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFC
TEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTUFU
SE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQo
RU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEp
ICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRf
VVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9B
UEkpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BMVUdJTl9QUk9YWV9GT1JfVklE
RU8pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1BST1hJTUlUWV9FVkVOVFMp
ICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAk
KEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NI
QVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TUUxfREFU
QUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1VCUElYRUxfTEFZT1VUKSAk
KEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVNUExBVEVfRUxFTUVO
VCkgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9USFJFQURFRF9IVE1MX1BBUlNF
UikgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkg
JChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9WSUVXX01PREVf
Q1NTX01FRElBKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9X
RUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV09SS0VSUykgJChFTkFC
TEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRkVBVFVSRV9ERUZJTkVTXyQoUExBVEZP
Uk1fTkFNRSkpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVO
QUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NBQ0hF
X1BBUlRJVElPTklORykgJChFTkFCTEVfQ0FOVkFTX1BBVEgpICQoRU5BQkxFX0NBTlZBU19QUk9Y
WSkgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJM
RV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRBVElP
TikgJChFTkFCTEVfQ1NTX1NIQVBFUykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NT
U19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5B
QkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX0NPTVBP
U0lUSU5HKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVFJBTlNG
T1JNU19BTklNQVRJT05TX1VOUFJFRklYRUQpICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5B
QkxFX0NTUzNfQ09ORElUSU9OQUxfUlVMRVMpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVf
Q1NTM19URVhUX0xJTkVfQlJFQUspICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJM
RV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVO
QUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVO
QUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFC
TEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0RP
TTRfRVZFTlRTX0NPTlNUUlVDVE9SKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJM
RV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQV9WMikgJChFTkFCTEVf
RklMRV9TWVNURU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZPTlRfTE9BRF9FVkVOVFMp
ICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9M
T0NBVElPTikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5B
QkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJB
TUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQ
RUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVU
X1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVf
SU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFT
Q1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVO
QUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhF
UykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChF
TkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJ
U1RJQ1MpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9N
SUNST0RBVEEpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9S
X0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklT
SUJJTElUWV9BUEkpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BMVUdJTl9QUk9Y
WV9GT1JfVklERU8pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1BST1hJTUlU
WV9FVkVOVFMpICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQo
RU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElB
X1FVRVJZKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQo
RU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJM
RV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1VCUElYRUxf
TEFZT1VUKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVNUExB
VEVfRUxFTUVOVCkgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9USFJFQURFRF9I
VE1MX1BBUlNFUikgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VU0VSU0VM
RUNUX0FMTCkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9W
SUVXX01PREVfQ1NTX01FRElBKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAk
KEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV09SS0VS
UykgJChFTkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRkVBVFVSRV9ERUZJTkVT
XyQoUExBVEZPUk1fTkFNRSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZWJj
ODQ1YTIzN2U1ODE5NTM1YThhZTFjMDMyMGIwNWIyOGY4NzQ0Yy4uN2I5MjFhMjJkNjMyMWM3Njdm
YmVmYjY1NzlhZWVmZTdhOWM0Y2YyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC00MzkxLDIwICs0MzkxLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmgg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uUmVjdGFuZ2xlLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXApAQCAtNDYxNiw2ICs0NjAyLDIwIEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvUmVjdGFuZ2xlU2hhcGUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXpl
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgg
XApAQCAtNDY1Miw3ICs0NjUyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvQ3Vyc29yRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvQ3Vyc29yTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRGF0YVJlZi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9u
U2hhcGVWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVy
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uLmggXApAQCAtNDY2OSw2
ICs0NjY4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1NoYWRvd0RhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93
RGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJveERhdGEuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCmluZGV4IDc5OWQwYTU1MDVmNjcxMjg3YTJiZGIxN2Q4ZDUxNmJjMDdlMjdiNWEuLmNh
NTFiYjEyMTU0MDNhNzViNmRlMTVlNzM3YWZjMmExYmY1NDU3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAt
MTE0NywxMyArMTE0Nyw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNw
cCBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcCBcCiAgICAgcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCi0gICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9u
UmVjdGFuZ2xlLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBcCi0gICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5jcHAgXAogICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAog
ICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL0Zsb3dU
aHJlYWRDb250cm9sbGVyLmNwcCBcCkBAIC0xMjQ3LDYgKzEyNDAsMTMgQEAgU09VUkNFUyArPSBc
CiAgICAgcmVuZGVyaW5nL1JlbmRlcldvcmRCcmVhay5jcHAgXAogICAgIHJlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcCBcCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCisgICAg
cmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVz
L1JlY3RhbmdsZVNoYXBlLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgXAor
ICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2
YWwuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIFwKICAg
ICByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwIFwKICAgICByZW5kZXJpbmcvc3R5bGUv
Q29udGVudERhdGEuY3BwIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ291bnRlckRpcmVjdGl2ZXMu
Y3BwIFwKQEAgLTI0MDUsMTMgKzI0MDUsNiBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcv
YnJlYWtfbGluZXMuaCBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmggXAogICAgIHJlbmRl
cmluZy9FbGxpcHNpc0JveC5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCBc
Ci0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1
c2lvblJlY3RhbmdsZS5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBcCi0gICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvLmggXAogICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIFwKICAgICByZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKICAgICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlLmggXApAQCAtMjUxNSwxOCArMjUwOCwyNSBAQCBIRUFERVJTICs9IFwKICAgICBy
ZW5kZXJpbmcvUmVuZGVyV29yZEJyZWFrLmggXAogICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94
LmggXAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5oIFwKKyAgICByZW5kZXJpbmcvc2hh
cGVzL1BvbHlnb25TaGFwZS5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBl
LmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluZm8uaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaCBc
CisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmggXAorICAgIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFw
ZXMuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRhLmggXAogICAgIHJlbmRlcmlu
Zy9zdHlsZS9Db3VudGVyRGlyZWN0aXZlcy5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ3Vyc29y
RGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ3Vyc29yTGlzdC5oIFwKLSAgICByZW5kZXJp
bmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvRmls
bExheWVyLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaCBcCiAgICAgcmVu
ZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9RdW90
ZXNEYXRhLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIFwKICAgICByZW5k
ZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oIFwKKyAgICByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1
ZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIFwKICAgICBy
ZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRhLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHls
ZUNhY2hlZEltYWdlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAxNzJjMzdkMTI1MzQxMWE1
OWRiMjc4YWVmZDA1NmMwZDcyY2EyMzNlLi4yYmUzMjU2ZDRlNzA1ZTk4NTM2MzZmZTM5NTY4YWRm
ODcwYThjNzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNzMzLDcgKzczMyw3IEBAIF9fWk43
V2ViQ29yZTIxc2V0R2xvYmFsSWNvbkRhdGFiYXNlRVBOU18xNkljb25EYXRhYmFzZUJhc2VFCiBf
X1pON1dlYkNvcmUyMXNldFBsYXRmb3JtU3RyYXRlZ2llc0VQTlNfMThQbGF0Zm9ybVN0cmF0ZWdp
ZXNFCiBfX1pON1dlYkNvcmUyMkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQyNHJlc3RhcnRTbmFwc2hv
dHRlZFBsdWdJbkV2CiBfX1pON1dlYkNvcmUyMkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQyOXNldElz
UHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luRWIKLV9fWk43V2ViQ29yZTIyUnVudGltZUVuYWJsZWRG
ZWF0dXJlczIyaXNDU1NFeGNsdXNpb25zRW5hYmxlZEUKK19fWk43V2ViQ29yZTIyUnVudGltZUVu
YWJsZWRGZWF0dXJlczE4aXNDU1NTaGFwZXNFbmFibGVkRQogX19aTjdXZWJDb3JlMjJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzNDBpc0xhbmdBdHRyaWJ1dGVBd2FyZUZvcm1Db250cm9sVUlFbmFibGVk
RQogX19aTjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0MjZjYW5TdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0V2CiBfX1pON1dlYkNvcmUyMlN0b3JhZ2VFdmVudERpc3BhdGNoZXIzNGRpc3Bh
dGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXNFUk5TXzlQYWdlR3JvdXBFUktOM1dURjZWZWN0
b3JJTlMzXzZSZWZQdHJJTlNfNUZyYW1lRUVFTG0wRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRVJL
TlMzXzZTdHJpbmdFU0VfU0VfU0VfUE5TXzE0U2VjdXJpdHlPcmlnaW5FCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRl
cgppbmRleCA3ZmEzMTg0MzVlZTk4NGJmYmFiNzdlYTIyZDUwNGY5OTlkODYxNTNmLi4xMWEzNThh
ODIzMTJlYzFhODA4ZjdhN2Q2NDFlZGI5NDIzMGRkNTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLm9yZGVyCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKQEAg
LTM2MDc2LDcgKzM2MDc2LDcgQEAgX19aVFZON1dlYkNvcmUzMlByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yRQogX19aVFZON1dlYkNvcmUyM1Byb3BlcnR5V3JhcHBlclNWR1BhaW50RQog
X19aVFZON1dlYkNvcmUyMVByb3BlcnR5V3JhcHBlclNoYWRvd0UKIF9fWlRWTjdXZWJDb3JlMzVQ
cm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvckUKLV9fWlRWTjdXZWJDb3JlMjlQcm9w
ZXJ0eVdyYXBwZXJFeGNsdXNpb25TaGFwZUUKK19fWlRWTjdXZWJDb3JlMjlQcm9wZXJ0eVdyYXBw
ZXJTaGFwZUUKIF9fWlRWTjdXZWJDb3JlMjNQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aEUKIF9fWlRW
TjdXZWJDb3JlMjJTaGFwZUNsaXBQYXRoT3BlcmF0aW9uRQogX19aVFZON1dlYkNvcmUzMlByb3Bl
cnR5V3JhcHBlckFjY2VsZXJhdGVkRmlsdGVyRQpAQCAtMzgyOTEsNyArMzgyOTEsNyBAQCBfX1pU
Vk4zV1RGMjFNZW1vcnlJbnN0cnVtZW50YXRpb243V3JhcHBlcklON1dlYkNvcmUxMFF1b3Rlc0Rh
dGFFRUUKIF9fWlRWTjNXVEYyMU1lbW9yeUluc3RydW1lbnRhdGlvbjdXcmFwcGVySU43V2ViQ29y
ZTEwQ3Vyc29yTGlzdEVFRQogX19aVFZOM1dURjIxTWVtb3J5SW5zdHJ1bWVudGF0aW9uN1dyYXBw
ZXJJTjdXZWJDb3JlMTBTaGFkb3dEYXRhRUVFCiBfX1pUVk4zV1RGMjFNZW1vcnlJbnN0cnVtZW50
YXRpb243V3JhcHBlcklON1dlYkNvcmUxN0NsaXBQYXRoT3BlcmF0aW9uRUVFCi1fX1pUVk4zV1RG
MjFNZW1vcnlJbnN0cnVtZW50YXRpb243V3JhcHBlcklON1dlYkNvcmUxOUV4Y2x1c2lvblNoYXBl
VmFsdWVFRUUKK19fWlRWTjNXVEYyMU1lbW9yeUluc3RydW1lbnRhdGlvbjdXcmFwcGVySU43V2Vi
Q29yZTE5U2hhcGVWYWx1ZUVFRQogX19aVFZOM1dURjIxTWVtb3J5SW5zdHJ1bWVudGF0aW9uN1dy
YXBwZXJJTjdXZWJDb3JlMTNBbmltYXRpb25MaXN0RUVFCiBfX1pUVk4zV1RGMjFNZW1vcnlJbnN0
cnVtZW50YXRpb243V3JhcHBlcklON1dlYkNvcmUxNVN0eWxlUmVmbGVjdGlvbkVFRQogX19aVFZO
M1dURjIxTWVtb3J5SW5zdHJ1bWVudGF0aW9uN1dyYXBwZXJJTlNfN0hhc2hNYXBJTlNfMTJBdG9t
aWNTdHJpbmdFTjdXZWJDb3JlMTdDb3VudGVyRGlyZWN0aXZlc0VOU18xNkF0b21pY1N0cmluZ0hh
c2hFTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlM3X0lTNV9FRUVFRUUKQEAgLTM5MDc3LDggKzM5MDc3
LDcgQEAgX19aTjdXZWJDb3JlTDMxb3JpZ2luYWxOU1Njcm9sbFZpZXdTY3JvbGxXaGVlbEUKIF9f
Wk43V2ViQ29yZUw0MF9uc1Njcm9sbFZpZXdTY3JvbGxXaGVlbFNob3VsZFJldGFpblNlbGZFCiBf
X1paTjdXZWJDb3JlTDE4Y3VycmVudE5TRXZlbnRTbG90RXZFNWV2ZW50CiBfX1pHVlpON1dlYkNv
cmVMMThjdXJyZW50TlNFdmVudFNsb3RFdkU1ZXZlbnQuYgotX19aWk43V2ViQ29yZUwyN2V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mb01hcEV2RTMzc3RhdGljRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
TWFwCi1fX1pHVlpON1dlYkNvcmVMMjdleGNsdXNpb25TaGFwZUluc2lkZUluZm9NYXBFdkUzM3N0
YXRpY0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb01hcC5iCitfX1pHVlpON1dlYkNvcmVMMjdzaGFw
ZUluc2lkZUluZm9NYXBFdkUzM3N0YXRpY1NoYXBlSW5zaWRlSW5mb01hcC5iCiBfX1paTks3V2Vi
Q29yZTE5VXBsb2FkQnV0dG9uRWxlbWVudDE0c2hhZG93UHNldWRvSWRFdkU4cHNldWRvSWQKIF9f
WkdWWk5LN1dlYkNvcmUxOVVwbG9hZEJ1dHRvbkVsZW1lbnQxNHNoYWRvd1BzZXVkb0lkRXZFOHBz
ZXVkb0lkLmIKIF9fWlpON1dlYkNvcmU0Rm9udDI1ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEVQ
S3RtTlNfMTNUZXh0RGlyZWN0aW9uRVJiRTIyZXhwYW5kQXJvdW5kSWRlb2dyYXBocwpAQCAtNDA4
MTksNyArNDA4MTgsNyBAQCBfX1pON1dlYkNvcmUyMVJlbmRlckxheWVyRmlsdGVySW5mbzExc19m
aWx0ZXJNYXBFCiBfX1pON1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFza2VyMTRzX3Jlc291
cmNlVHlwZUUKIF9fWk43V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MjNzX2h0dHBQaXBlbGluaW5n
RW5hYmxlZEUKIF9fWk43V2ViQ29yZTIyUnVudGltZUVuYWJsZWRGZWF0dXJlczE3aXNXZWJBdWRp
b0VuYWJsZWRFCi1fX1pON1dlYkNvcmUyMlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMyMmlzQ1NTRXhj
bHVzaW9uc0VuYWJsZWRFCitfX1pON1dlYkNvcmUyMlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMyMmNz
c1NoYXBlc0VuYWJsZWRFCiBfX1pON1dlYkNvcmUyMlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM0MGlz
TGFuZ0F0dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xVSUVuYWJsZWRFCiBfX1pON1dlYkNvcmU4U2V0
dGluZ3MzM2dEZWZhdWx0RE9NVGltZXJBbGlnbm1lbnRJbnRlcnZhbEUKIF9fWk43V2ViQ29yZThT
ZXR0aW5nczIyZ1VzZXNPdmVybGF5U2Nyb2xsYmFyc0UKQEAgLTQxNjUwLDggKzQxNjQ5LDggQEAg
X19aR1ZaTks3V2ViQ29yZTIwUmVuZGVyVGhlbWVNYWNTaGFyZWQxMHN5c3RlbUZvbnRFaVJOU18x
NUZvbnREZXNjcmlwdGlvbkVFMTFjb24KIF9fWlpON1dlYkNvcmU5TGF5ZXJQb29sMTBzaGFyZWRQ
b29sRXZFMTBzaGFyZWRQb29sCiBfX1pHVlpON1dlYkNvcmU5TGF5ZXJQb29sMTBzaGFyZWRQb29s
RXZFMTBzaGFyZWRQb29sLmIKIF9fWlpON1dlYkNvcmUxNURhdGFiYXNlTWFuYWdlcjdtYW5hZ2Vy
RXZFOWRiTWFuYWdlcgotX19aWk43V2ViQ29yZUwyOGV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9N
YXBFdkUzNHN0YXRpY0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9NYXAKLV9fWkdWWk43V2ViQ29y
ZUwyOGV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9NYXBFdkUzNHN0YXRpY0V4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm9NYXAuYgorX19aWk43V2ViQ29yZUwyOHNoYXBlT3V0c2lkZUluZm9NYXBFdkUz
NHN0YXRpY3NoYXBlT3V0c2lkZUluZm9NYXAKK19fWkdWWk43V2ViQ29yZUwyOHNoYXBlT3V0c2lk
ZUluZm9NYXBFdkUzNHN0YXRpY3NoYXBlT3V0c2lkZUluZm9NYXAuYgogX19aTjdXZWJDb3JlMjJD
aGlsZE5vZGVzTGF6eVNuYXBzaG90MTRsYXRlc3RTbmFwc2hvdEUKIF9fWk43V2ViQ29yZTI2ZW1w
dHlDU1NQcm9wZXJ0eVNvdXJjZURhdGFFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxOXNfZ2xvYmFs
VHJlZVZlcnNpb25FCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGJmMDkzOGYwYjVhNGZkZGJiMDQ2MzU3ZDlhMjk3YzM1NTJmNTU0ZTAuLjlhMDNk
N2NmZmI0M2U4ZTNjMjhjMmYwZDA5MjllYTc4MWNlMTMzMjAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zOTI1MSw2MiArMzkyNTEsNiBAQAog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4
Y2x1c2lvblBvbHlnb24uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
UmVjdGFuZ2xlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBl
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xFeGNsdXNpb25TaGFwZUluZm8uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbmZvLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNSZWN0YW5nbGUuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXEZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCkBAIC00
MzMxNSw2ICs0MzI1OSw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzaGFw
ZXNcUG9seWdvblNoYXBlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuY3BwIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFJlY3RhbmdsZVNoYXBlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNo
YXBlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbmZvLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluZm8uaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5m
by5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxy
ZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2
YWwuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91dHNpZGVJbmZvLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91
dHNpZGVJbmZvLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KQEAgLTQ2MzQwLDcgKzQ2MzQwLDcgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8
RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdHlsZVxFeGNsdXNpb25TaGFw
ZVZhbHVlLmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN0eWxlXFNoYXBlVmFs
dWUuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggYzBjMmU1MDI1ZDdlNGNjZjEw
Mzg1ZGUxOGM4NTNkZGViNjA2Y2ExNS4uMzYwYWJhMGFlMzAxZWEzNWY2MWE2MmI5M2U3Njc2NTJj
MWU4OTNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qCkBAIC01NDMwLDEyICs1NDMwLDYgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fp
cm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rp
b258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdv
bi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
UmVjdGFuZ2xlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xF
eGNsdXNpb25TaGFwZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAi
PgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CkBAIC02MzE0LDYgKzYzMDgsMTIgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUG9seWdvblNoYXBlLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hh
cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xT
aGFwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVz
XFNoYXBlSW5zaWRlSW5mby5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91dHNpZGVJbmZvLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUGF0aERhdGEuY3BwIj4KICAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMTIx
MjYsMTEgKzEyMTI2LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xi
cmVha19saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXENv
dW50ZXJOb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRWxs
aXBzaXNCb3guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25JbnRlcnZhbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XEV4Y2x1c2lvblBvbHlnb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xFeGNsdXNpb25TaGFwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpeGVkVGFibGVMYXlvdXQu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGbG93VGhyZWFkQ29u
dHJvbGxlci5oIiAvPgpAQCAtMTIyMTQsNiArMTIyMDksMTIgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWxlY3Rpb25JbmZvLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2xpZGVyLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUG9seWdvblNoYXBl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3Rh
bmdsZVNoYXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFNoYXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFNoYXBlSW5zaWRlSW5mby5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXHNoYXBlc1xTaGFwZUludGVydmFsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHQmxvY2suaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHQ29udGFpbmVyLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0dy
YWRpZW50U3RvcC5oIiAvPgpAQCAtMTIyODYsNyArMTIyODcsNiBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEN1cnNvckRhdGEuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxDdXJzb3JMaXN0LmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRGF0YVJlZi5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEV4Y2x1c2lvblNoYXBlVmFsdWUu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxGaWxsTGF5
ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxHcmlk
UG9zaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHls
ZVxHcmlkVHJhY2tTaXplLmgiIC8+CkBAIC0xMjI5Nyw2ICsxMjI5Nyw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcUmVuZGVyU3R5bGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxSZW5kZXJTdHlsZUNvbnN0YW50
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFNoYWRv
d0RhdGEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxT
aGFwZVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5
bGVcU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHN0eWxlXFN0eWxlQm94RGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxlQ2FjaGVkSW1hZ2UuaCIgLz4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwpp
bmRleCAwM2UzZDhhOTg4MDI3ZjFmNTRkMmVlMDI4ZmVhZWRiOTgzNTk0ODA1Li5hY2MxNjRlOGQ1
Mjg5ODRiY2I1ZTVmM2U4NDcwMDE0OWYyYzBkZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0yNDMyLDIz
ICsyNDMyLDIzIEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRWxsaXBzaXNCb3guY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzaGFwZXNcUG9seWdvblNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRl
cmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuY3BwIj4KICAgICAgIDxGaWx0
ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCI+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmNwcCI+CiAgICAgICA8Rmls
dGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmNwcCI+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5jcHAiPgogICAg
ICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3Bw
Ij4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzaGFwZXNcU2hhcGVJbnRlcnZhbC5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUluZm8uY3BwIj4KICAgICAgIDxG
aWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIj4KQEAgLTkx
MjYsMTkgKzkxMjYsMjIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xF
bGxpcHNpc0JveC5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
SW50ZXJ2YWwuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVz
XFBvbHlnb25TaGFwZS5oIj4KKyAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CisgICAg
PC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVz
XFJlY3RhbmdsZVNoYXBlLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25Qb2x5Z29uLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNo
YXBlc1xTaGFwZS5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
U2hhcGUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNo
YXBlSW5zaWRlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXHNoYXBlc1xTaGFwZUludGVydmFsLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91dHNpZGVJbmZvLmgiPgogICAgICAgPEZpbHRl
cj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIj4KQEAgLTk1OTQsOSAr
OTU5Nyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRGF0
YVJlZi5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRXhj
bHVzaW9uU2hhcGVWYWx1ZS5oIj4KLSAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc3R5bGVcRmlsbExheWVyLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTk2MjcsNiArOTYyNyw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU2hhZG93RGF0YS5oIj4KICAgICAgIDxG
aWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU2hhcGVWYWx1ZS5oIj4KKyAgICAg
IDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVCYWNrZ3JvdW5kRGF0
YS5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CkBAIC0xNTE5Myw0ICsxNTE5Niw0IEBACiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwv
RmlsdGVyPgogICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVj
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTA4NTM0Nzlj
YTIxMWEwNjgzNWYzMzg4NWI2ZjBiOGQ2MmI2MjZjNi4uNmUxZWViM2I3Yjc3NTI2MGU2MjY1OTMx
NjI5MDU4Y2MzZDk0MTdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgzNSwxNCArMTgzNSw2IEBACiAJCTZFNjdEMkE2MTI4
MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi87IH07CiAJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RP
cGVuR0wuaCAqLzsgfTsKIAkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMz
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0Qy
QTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovOyB9OwotCQk2RTg3OThCQTE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjQxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvbkludGVydmFsLmNwcCAqLzsgfTsKLQkJNkU4Nzk4QkIxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvbkludGVydmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RTg3OThCNTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2
YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2
RTg3OThCQzE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI2MTVGODFFNEEw
MEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwICovOyB9OwotCQk2RTg3OThCRDE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uUmVjdGFuZ2xlLmggKi87IH07Ci0JCTZFODc5OEJFMTVGODFFNEEwMEJGRTRBQSAvKiBF
eGNsdXNpb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICov
OyB9OwotCQk2RTg3OThCRjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI5MTVGODFF
NEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTZFQUYzNDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNs
dXNpb25Qb2x5Z29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAq
LzsgfTsKLQkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQUYzNDBFMTYx
Mzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi87IH07CiAJCTZFQkM1RUFGMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNG
bG9hdDY0QXJyYXkuY3BwICovOyB9OwogCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNG
bG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovOyB9Owog
CQk2RUJGMEU0ODEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ1MTJBODkyNjEw
MERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwICovOyB9OwpAQCAtMzI2Myw4ICszMjU1LDYg
QEAKIAkJOThDRTQzMkExMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4Q0U0MzI5MTI5RTAwRTUwMDU4
MjFEQyAvKiBMaW5rTG9hZGVyLmggKi87IH07CiAJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAv
KiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUExQjZGOTcx
NTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTFCNkY5NjE1ODg2OUM4MDAxMUE4
QzQgLyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKLQkJOUE5Q0VGOEQxNjNCM0VB
MTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUE5Q0VGOEIxNjNCM0VBMTAwREU3RUZF
IC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwICovOyB9OwotCQk5QTlDRUY4RTE2M0Iz
RUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUE5Q0VGOEMxNjNCM0VBMTAwREU3RUZF
IC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjFBQjA3QzE2NDhDN0M0MDA1MUYzRjIgLyogSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjFBQjA3QjE2NDhDN0M0MDA1MUYzRjIgLyogSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTlCMjRERThFMTUx
OTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxC
RElFbGVtZW50LmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3Rl
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhB
NzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3NDIsNyArNTczMiw3IEBACiAJCUZEMDZERkE1
MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwNkRGQTMxMzRBNERF
RjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi87IH07CiAJCUZE
MDZERkE2MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDZERkE0MTM0
QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAqLzsgfTsKIAkJ
RkQxNjYwQTUxMzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMTY2MEE0MTM3ODdDNkQwMDFG
RkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggKi87IH07Ci0JCUZEMUFGMTUwMTY1NkYxNTEwMEM2
RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogRXhjbHVzaW9u
U2hhcGVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDFBRjE0RTE2NTZGMTIxMDBD
NkQ0RjcgLyogU2hhcGVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZEMjNBMTI1MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRDIzQTEyMzEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUuY3BwICovOyB9OwogCQlGRDIzQTEyNjEzRjVGQTU5MDBGNjcwMDEgLyogSlNN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZEMjNBMTI0MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZS5oICovOyB9OwogCQlGRDJEQkYxMjEyQjA0OEEzMDBFRDk4QzYg
LyogQWNjZWxlcmF0ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDJEQkYwRTEyQjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5m
cmFtZXdvcmsgKi87IH07CkBAIC01ODU5LDYgKzU4NDksMjAgQEAKIAkJRkQzMTYwQzAxMkIwMjcy
QTAwQzFBMzU5IC8qIEZGVEZyYW1lTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzE2MEJBMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRGcmFtZU1h
Yy5jcHAgKi87IH07CiAJCUZEMzU5MThGMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGlt
ZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQzNTkxOEQxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5jcHAgKi87IH07
CiAJCUZEMzU5MTkwMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzU5MThFMTM4REIy
MjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuaCAqLzsgfTsKKwkJRkQ0NUE5NEYxNzVE
M0YzRTAwQzIxRUM4IC8qIFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDA4QTg3RjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1MDE3NUQz
RjNFMDBDMjFFQzggLyogU2hhcGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5
NTExNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODMxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlSW5zaWRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZENDVBOTUyMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4
NzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVD
OCAvKiBTaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRDA4QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovOyB9OworCQlGRDQ1
QTk1NDE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgwMTc1RDM5MjYwMDJDRDM2MCAvKiBT
aGFwZUluZm8uY3BwICovOyB9OworCQlGRDQ1QTk1NTE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJ
bnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMDhBODgyMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uY3BwICovOyB9
OworCQlGRDQ1QTk1NjE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4NjE3NUQz
OTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgKi87IH07CisJCUZENDVBOTU3MTc1
RDQxNEMwMEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdCMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29u
U2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlGRDQ1QTk1ODE3NUQ0MTRDMDBDMjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdEMTc1RDM5MjYwMDJD
RDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUZENDVBOTU5MTc1RDQxNzEwMEMyMUVDOCAvKiBQb2x5Z29uU2hh
cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQw
OEE4N0ExNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5jcHAgKi87IH07CisJCUZENDVB
OTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3QzE3NUQzOTI2MDAyQ0QzNjAg
LyogUmVjdGFuZ2xlU2hhcGUuY3BwICovOyB9OworCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzgg
LyogU2hhcGVJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQwOEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1QzE3
NUQ0MjBEMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4NDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hh
cGVJbnRlcnZhbC5jcHAgKi87IH07CiAJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJv
UG9sZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RDUzNzM1MDEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwICovOyB9OwogCQlGRDUzNzM1
MzEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTM3MzUxMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9s
ZS5oICovOyB9OwogCQlGRDUzNzM1NjEzN0I2NTNCMDAwMDhEQ0UgLyogRHluYW1pY3NDb21wcmVz
c29yS2VybmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZENTM3MzU0MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwu
Y3BwICovOyB9OwpAQCAtNTg4MSw4ICs1ODg1LDYgQEAKIAkJRkQ2RUQyQzgxMzZCOEU2NjAwM0NG
MDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQ2RUQyQzYxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29t
cHJlc3Nvci5oICovOyB9OwogCQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZENkYyNTI5MTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUuY3BwICovOyB9OwogCQlGRDZGMjUyRDEzRjVFRjBFMDA2NTE2NUYgLyogTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDZGMjUyQTEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmggKi87IH07Ci0JCUZENzQ4QUJGMTVCRjc0RUQwMDU5Q0YwRCAvKiBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQ3NDhBQkQxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby5jcHAgKi87IH07Ci0JCUZENzQ4QUMwMTVCRjc0RUQwMDU5Q0YwRCAvKiBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZENzQ4QUJFMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRDc4NjhCOTEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JO
b2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
Nzg2OEI3MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwICov
OyB9OwogCQlGRDc4NjhCQTEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JO
b2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc4
NjhCODEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi87IH07
CiAJCUZEN0YyOTkxMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEN0YyOThBMTNE
NEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCAqLzsgfTsKQEAgLTU5NDMs
OCArNTk0NSw2IEBACiAJCUZEQjA1MkUwMTU2MUE0MkMwMEI1MDBENiAvKiBBdWRpb1N1bW1pbmdK
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRCMDUyREUxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3VtbWluZ0p1bmN0aW9uLmggKi87IH07
CiAJCUZEQjE3MDA1MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCMTcwMDMx
NEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAgKi87IH07CiAJCUZE
QjE3MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjE3MDA0MTRBMkJBQjIw
MEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCAqLzsgfTsKLQkJRkRCOEQxREExNkIw
QzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCOEQxRDkxNkIwQzBENzAwMzQwRjEwIC8qIEV4
Y2x1c2lvblNoYXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCUZEQjhEMUU1MTZCMENDOTcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUlu
Zm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRC
OEQxREIxNkIwQzBGNjAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5jcHAgKi87IH07CiAJ
CUZEQkQxREZDMTY3RkUyN0QwMDUxQTExRSAvKiBKU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQxREZCMTY3
RkUyN0QwMDUxQTExRSAvKiBKU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRkRC
RDQ4MEMxNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCRDQ4MEEx
NTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwICovOyB9
OwogCQlGREJENDgwRDE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRC
RDQ4MEIxNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCAq
LzsgfTsKQEAgLTgyMzEsMTQgKzgyMzEsNiBAQAogCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4Rjcg
LyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNE
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI0MTVGODFFNEEwMEJGRTRB
QSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNsdXNpb25JbnRlcnZhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTZFODc5OEI1MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25JbnRlcnZhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uUmVjdGFuZ2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
Y2x1c2lvblJlY3RhbmdsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5
OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTZFODc5OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFw
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI5MTVGODFFNEEwMEJG
RTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeGNsdXNpb25TaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RUFGMzQw
RDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25Qb2x5Z29uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBv
bHlnb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUG9seWdv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENG
OEEgLyogRmxvYXQ2NEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJy
YXkuaWRsOyBwYXRoID0gY2FudmFzL0Zsb2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4
QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTcwOSw4ICs5
NzAxLDYgQEAKIAkJOThDRTQzMjkxMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua0xvYWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8q
IEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5QTlDRUY4QjE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUE5Q0VG
OEMxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3OTE2NDhDNjlEMDA1MUYzRjIgLyog
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxQUIwN0IxNjQ4QzdD
NDAwNTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMjRERThDMTUx
OTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MQkRJRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI1ODYsOCArMTI1NzYsMjIgQEAKIAkJRkQwMEQ3QTMxNEEzRjYxOTAwNzM0MDExIC8qIFNp
bmNSZXNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2luY1Jlc2Ft
cGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDA2REZBMzEzNEE0REVGMDA2
RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMDZERkE0MTM0QTRERUYwMDZGNUQ3RCAvKiBE
ZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZEMDhBODdBMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9seWdvblNoYXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0IxNzVEMzkyNjAwMkNEMzYwIC8qIFBv
bHlnb25TaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5Z29uU2hh
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0MxNzVEMzkyNjAwMkNE
MzYwIC8qIFJlY3RhbmdsZVNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlY3RhbmdsZVNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkQwOEE4N0QxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3RhbmdsZVNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZEMDhBODdFMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZEMDhBODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlSW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgxMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUlu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgyMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFw
ZUluc2lkZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hh
cGVJbnNpZGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODMx
NzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTaGFwZUluc2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkQwOEE4ODQxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGVJbnRlcnZhbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg1MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFw
ZUludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlSW50ZXJ2
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODYxNzVEMzkyNjAwMkNE
MzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2hhcGVPdXRzaWRlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZEMDhBODg3MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlT3V0c2lkZUluZm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQxNjYwQTQxMzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFs
RGlzYWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVub3JtYWxEaXNh
Ymxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRDFBRjE0RTE2NTZGMTIxMDBD
NkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBFeGNsdXNpb25TaGFwZVZhbHVlLmg7IHBhdGggPSBzdHlsZS9FeGNsdXNpb25TaGFw
ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMUFGMTRFMTY1NkYxMjEw
MEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFNoYXBlVmFsdWUuaDsgcGF0aCA9IHN0eWxlL1NoYXBlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkQyM0ExMjMxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkQyM0ExMjQxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMkRC
RjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBu
YW1lID0gQWNjZWxlcmF0ZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsK
QEAgLTEyNzQ4LDggKzEyNzUyLDYgQEAKIAkJRkQ2RjI1MjkxM0Y1RUYwRTAwNjUxNjVGIC8qIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRDZGMjUyQTEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RDZGMjUyQjEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRDc0OEFCRDE1QkY3NEVEMDA1OUNGMEQg
LyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZENzQ4QUJFMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENzg2OEI3
MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ3ODY4QjgxMzZCOTk5MjAwRDQwM0RG
IC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkQ3RjI5OEExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJEU1BLZXJuZWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2F2ZVNoYXBlckRTUEtl
cm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjgxMyw4ICsxMjgxNSw2
IEBACiAJCUZEQjA1MkRFMTU2MUE0MkMwMEI1MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1N1bW1pbmdKdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREIxNzAwMzE0QTJCQUIyMDBBMkI1RDkg
LyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE11bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZEQjE3MDA0MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXVsdGlDaGFubmVsUmVzYW1w
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEQjhEMUQ5MTZCMEMwRDcwMDM0
MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhjbHVzaW9uU2hhcGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZEQjhEMURCMTZCMEMwRjYwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJbmZvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCRDFERkIxNjdGRTI3RDAwNTFBMTFFIC8q
IEpTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZEQkQ0ODBBMTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVk
aWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGREJENDgwQjE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODkyOSw3ICsxODky
OSw2IEBACiAJCQkJQkMyMjcyQTEwRTgyRTg3QzAwRTdGOTc1IC8qIEN1cnNvckRhdGEuaCAqLywK
IAkJCQlCQzIyNzJBQzBFODJFOEYzMDBFN0Y5NzUgLyogQ3Vyc29yTGlzdC5oICovLAogCQkJCUJD
MjI3NDZFMEU4MzY2NDUwMEU3Rjk3NSAvKiBEYXRhUmVmLmggKi8sCi0JCQkJRkQxQUYxNEUxNjU2
RjEyMTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCAqLywKIAkJCQlCQzVFQjY5QzBF
ODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmNwcCAqLywKIAkJCQlCQzVFQjY5RDBFODFEQUVC
MDBCMjU5NjUgLyogRmlsbExheWVyLmggKi8sCiAJCQkJQTEyNzA1QzIxNjU2QkQ2NTAwQzJFMjdD
IC8qIEdyaWRQb3NpdGlvbi5oICovLApAQCAtMTg5NDcsNiArMTg5NDYsNyBAQAogCQkJCUJDNUVC
NjY3MEU4MUNCNzEwMEIyNTk2NSAvKiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oICovLAogCQkJCUJD
NUVCOEMxMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCAqLywKIAkJCQlCQzVFQjhD
MjBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5oICovLAorCQkJCUZEMUFGMTRFMTY1NkYx
MjEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggKi8sCiAJCQkJQkM1RUI2QTAwRTgxREM0RjAwQjI1
OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuY3BwICovLAogCQkJCUJDNUVCNkExMEU4MURDNEYw
MEIyNTk2NSAvKiBTdHlsZUJhY2tncm91bmREYXRhLmggKi8sCiAJCQkJQkM1RUI2N0MwRTgxRDQy
MDAwQjI1OTY1IC8qIFN0eWxlQm94RGF0YS5jcHAgKi8sCkBAIC0xOTg4MSw2ICsxOTg4MSw3IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTQzOTA0NkMyMTJEQTI1
Q0UwMEFGODBBMiAvKiBtYXRobWwgKi8sCisJCQkJRkQwOEE4NzkxNzVEMzkyNjAwMkNEMzYwIC8q
IHNoYXBlcyAqLywKIAkJCQlCQzhDOEZBQTBERENEMkYyMDBCNTkyRjQgLyogc3R5bGUgKi8sCiAJ
CQkJMDg4QzJGNzQxMjM5MDA4MDAwM0Q2NUNFIC8qIHN2ZyAqLywKIAkJCQlBOENGRjA0QjBBMTU0
RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCAqLywKQEAgLTE5ODk0LDIwICsxOTg5
NSw2IEBACiAJCQkJOTM5MkYxNEIwQUQxODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8s
CiAJCQkJQThDRkY2Q0EwQTE1NjFDRDAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmNwcCAqLywKIAkJ
CQlBOENGRjZCRDBBMTU2MTE4MDAwQTQyMzQgLyogRWxsaXBzaXNCb3guaCAqLywKLQkJCQk2RTg3
OThCNDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwICovLAotCQkJCTZF
ODc5OEI1MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oICovLAotCQkJCTZF
QUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLywKLQkJCQk2
RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICovLAotCQkJCTZF
ODc5OEI2MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwICovLAotCQkJ
CTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLywKLQkJ
CQk2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovLAotCQkJ
CTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICovLAotCQkJCUZE
QjhEMURCMTZCMEMwRjYwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwICovLAotCQkJ
CUZEQjhEMUQ5MTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCAqLywKLQkJ
CQlGRDc0OEFCRDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNw
cCAqLywKLQkJCQlGRDc0OEFCRTE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmggKi8sCi0JCQkJOUE5Q0VGOEIxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8uY3BwICovLAotCQkJCTlBOUNFRjhDMTYzQjNFQTEwMERFN0VGRSAvKiBF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggKi8sCiAJCQkJMzEzMTNGNjMxNDQzQjM1RTAwNkUy
QTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKIAkJCQkzMTMxM0Y2NDE0NDNCMzVF
MDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKIAkJCQlBOENGRjA0ODBBMTU0
RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5jcHAgKi8sCkBAIC0yMDU2MSw2ICsyMDU0
OCwyNyBAQAogCQkJcGF0aCA9IG9wZW5nbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCUZEMDhBODc5MTc1RDM5MjYwMDJDRDM2MCAvKiBzaGFwZXMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZEMDhBODdBMTc1RDM5MjYwMDJDRDM2
MCAvKiBQb2x5Z29uU2hhcGUuY3BwICovLAorCQkJCUZEMDhBODdCMTc1RDM5MjYwMDJDRDM2MCAv
KiBQb2x5Z29uU2hhcGUuaCAqLywKKwkJCQlGRDA4QTg3QzE3NUQzOTI2MDAyQ0QzNjAgLyogUmVj
dGFuZ2xlU2hhcGUuY3BwICovLAorCQkJCUZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0
YW5nbGVTaGFwZS5oICovLAorCQkJCUZEMDhBODdFMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5j
cHAgKi8sCisJCQkJRkQwOEE4N0YxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi8sCisJCQkJ
RkQwOEE4ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi8sCisJCQkJRkQwOEE4
ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovLAorCQkJCUZEMDhBODgyMTc1RDM5
MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uY3BwICovLAorCQkJCUZEMDhBODgzMTc1RDM5
MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uaCAqLywKKwkJCQlGRDA4QTg4NDE3NUQzOTI2
MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5jcHAgKi8sCisJCQkJRkQwOEE4ODUxNzVEMzkyNjAw
MkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLywKKwkJCQlGRDA4QTg4NjE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8sCisJCQkJRkQwOEE4ODcxNzVEMzkyNjAwMkNE
MzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uaCAqLywKKwkJCSk7CisJCQlwYXRoID0gc2hhcGVzOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRkQzMTVGQTIxMkIwMjVCMTAwQzFB
MzU5IC8qIHdlYmF1ZGlvICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTIwODY0LDYgKzIwODcyLDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUZFMTE1RkFCMTY3
OTg4Q0QwMDI0OTEzNCAvKiBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRTRBQURFRTE2RDJDMzc0MDAwMjZGRkMgLyogQWJzdHJhY3RTUUxTdGF0ZW1lbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZCRDZBRjhDMTVFRjI2MDQwMDhCNzExMCAvKiBCYXNpY1NoYXBl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QUFERUYxNkQyQzM3NDAwMDI2RkZDIC8qIEFic3Ry
YWN0U1FMU3RhdGVtZW50QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFFMUIxRDEwRkY1
OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUE4
MTIyRTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMDk4NSw3ICsyMDk5NCw2IEBACiAJCQkJRjU5Qzk2MDAxMjU1QjIzRjAw
MDYyM0MwIC8qIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjU1QjNEQUUxMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGQkQ2QUY4QTE1RUYyNURGMDA4QjcxMTAgLyogQmFzaWNTaGFwZUZ1bmN0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkJENkFGOEMxNUVGMjYwNDAwOEI3MTEwIC8qIEJhc2lj
U2hhcGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0NjJEODEwN0E3QjRDMDA4NTcxOTMgLyog
QmVmb3JlTG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjIzQTMyODA5QkJBN0QwMDA2
N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
MzY3RERGMTcyQ0E2N0YwMEQ4NjFCOSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZG
T2JqQy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTcyNCwxNCArMjE3MzIsNyBAQAogCQkJCTE0OEFG
REE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTc2N0NFMEIxNDVBQkMxMzAwNUU2NERCIC8qIEV4Y2VwdGlvbkhlYWRlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NjdDRTBDMTQ1QUJDMTMwMDVFNjREQiAvKiBFeGNlcHRpb25JbnRl
cmZhY2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTg3OThCQjE1RjgxRTRBMDBCRkU0QUEgLyog
RXhjbHVzaW9uSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFQUYzNDEwMTYxMzg2OUEw
MDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTg3OThC
RDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggaW4gSGVhZGVycyAqLywK
LQkJCQk2RTg3OThCRjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUZEQjhEMURBMTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUlu
Zm8uaCBpbiBIZWFkZXJzICovLAotCQkJCUZENzQ4QUMwMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTlBOUNFRjhFMTYzQjNF
QTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLywK
LQkJCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEwMjQ1NzUyMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3
QnVmZmVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTcxMjgwRThBNDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjk5Nyw2ICsy
Mjk5OCw3IEBACiAJCQkJODQ3MzBEOTIxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MDU5OTc4MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xp
Y3lDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcwNTk5N0ExMDdEOTc1MjAwQTUwQTdD
IC8qIFBvbGljeUNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTU3MTc1RDQxNEMw
MEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzRFMjBBMTBB
MUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjY4
RTE4QjBBREQ5NjI0MDA0MTI4RTAgLyogUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
QkMxMjg3NzBCMzNBQTZEMDBDNjkzRDUgLyogUG9wdXBNZW51Q2xpZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTIzMDM4LDYgKzIzMDQwLDcgQEAKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAg
LyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAzQzEy
QjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM0MzY4RTgwQzIyNkUzMjAwNUVGQjVGIC8qIFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZE
NDVBOTU4MTc1RDQxNEMwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcyRUEzQkIxNTg1Q0Y1NTAwNEZBQTI2IC8qIFJlZkNvdW50ZWRTdXBwbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5ODMxQUU0QTE1NDIyNUM5MDBGRTI2NDQgLyogUmVmZXJyZXJQ
b2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUI0MTgyMTNFMzU2RTgwMEQ4QUFGMyAvKiBS
ZWdpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjMzMDgsNiArMjMzMTEsMTEgQEAKIAkJCQlCQzVF
QjhDNDBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTZEMTY5NjQxMzQ2QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MEU2Q0U4MEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkQ0NUE5NEYxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRDQ1QTk1MDE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbmZvLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRDQ1QTk1MTE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hhcGVJbnRl
cnZhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNo
YXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJE
OEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QjFGMDJGMTNCMDI1
RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0MzUxLDYgKzI0MzU5LDEzIEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlG
RDQ1QTk1QzE3NUQ0MjBEMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRDQ1QTk1OTE3NUQ0MTcxMDBDMjFFQzggLyogUG9seWdvblNoYXBlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1MzE3NUQzRkI4MDBDMjFFQzggLyogU2hh
cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIxRUM4IC8qIFNo
YXBlSW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1NTE3NUQzRkI4MDBDMjFFQzgg
LyogU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTU2MTc1RDNG
QjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
RTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI5QzE2RTEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25l
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc2Q0REMkYyMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nl
c3NpYmlsaXR5TWVudUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNDkyNiwxMyArMjQ5NDEs
NiBAQAogCQkJCTk3M0RDNjNGMTQ1QTk0MDkwMDI4NDJDMiAvKiBFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQUNEQjExM0NFODc1QzAwQkJCRTNGIC8q
IEV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhBRkRB
NjBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMubW0gaW4gU291cmNlcyAqLywK
LQkJCQk2RTg3OThCQTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNkVBRjM0MEYxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBv
bHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4Nzk4QkMxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2RTg3OThCRTE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkRC
OEQxRTUxNkIwQ0M5NzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlGRDc0OEFCRjE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlBOUNFRjhEMTYzQjNFQTEwMERFN0VGRSAv
KiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwMjQ1
NzUxMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVycy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQ0REFCNUIxMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAppbmRl
eCA1YTJhMTM5OGVkNWM2ODY5NzE1MzE3NTVhYmZjNzY0M2FiMjlkNDA1Li5mMjE0YTZkOWRhZTU3
NDBlNjYwOWM2MjA5YWE4ZDMxOWRlNTgwYzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKQEAgLTU1
LDcgKzU1LDcgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0RldmljZU1vdGlvbkVu
YWJsZWQgPSB0cnVlOwogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0RldmljZU9yaWVu
dGF0aW9uRW5hYmxlZCA9IHRydWU7CiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmlzU3Bl
ZWNoSW5wdXRFbmFibGVkID0gdHJ1ZTsKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXND
YW52YXNQYXRoRW5hYmxlZCA9IGZhbHNlOwotYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpp
c0NTU0V4Y2x1c2lvbnNFbmFibGVkID0gdHJ1ZTsKK2Jvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6aXNDU1NTaGFwZXNFbmFibGVkID0gdHJ1ZTsKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6aXNDU1NSZWdpb25zRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjppc0NTU0NvbXBvc2l0aW5nRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjppc0xhbmdBdHRyaWJ1dGVBd2FyZUZvcm1Db250cm9sVUlFbmFibGVkID0gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDQzZTI5YWRiNjdlZDA5MjA5ZmRlNTRlZGY2MGNlNTI1
NTcyYmZmNzcuLmVhZGZkNTYzNzk3ZTU1MDAzNjRhOTRmYWYyM2JjNjU0NzNkMmU2NGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oCkBAIC03MSwxMiArNzEsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29s
IGNhbnZhc1BhdGhFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0jaWYgRU5B
QkxFKENTU19FWENMVVNJT05TKQotICAgIHN0YXRpYyB2b2lkIHNldENTU0V4Y2x1c2lvbnNFbmFi
bGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzQ1NTRXhjbHVzaW9uc0VuYWJsZWQgPSBpc0VuYWJsZWQ7
IH0KLSAgICBzdGF0aWMgYm9vbCBjc3NFeGNsdXNpb25zRW5hYmxlZCgpIHsgcmV0dXJuIGlzQ1NT
RXhjbHVzaW9uc0VuYWJsZWQ7IH0KKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBzdGF0aWMg
dm9pZCBzZXRDU1NTaGFwZXNFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IGlzQ1NTU2hhcGVzRW5h
YmxlZCA9IGlzRW5hYmxlZDsgfQorICAgIHN0YXRpYyBib29sIGNzc1NoYXBlc0VuYWJsZWQoKSB7
IHJldHVybiBpc0NTU1NoYXBlc0VuYWJsZWQ7IH0KICNlbHNlCi0gICAgc3RhdGljIHZvaWQgc2V0
Q1NTRXhjbHVzaW9uc0VuYWJsZWQoYm9vbCkgeyB9Ci0gICAgc3RhdGljIGJvb2wgY3NzRXhjbHVz
aW9uc0VuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyB2b2lkIHNldENTU1No
YXBlc0VuYWJsZWQoYm9vbCkgeyB9CisgICAgc3RhdGljIGJvb2wgY3NzU2hhcGVzRW5hYmxlZCgp
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKQEAg
LTMxNSw3ICszMTUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzRGV2aWNlT3JpZW50
YXRpb25FbmFibGVkOwogICAgIHN0YXRpYyBib29sIGlzU3BlZWNoSW5wdXRFbmFibGVkOwogICAg
IHN0YXRpYyBib29sIGlzQ2FudmFzUGF0aEVuYWJsZWQ7Ci0gICAgc3RhdGljIGJvb2wgaXNDU1NF
eGNsdXNpb25zRW5hYmxlZDsKKyAgICBzdGF0aWMgYm9vbCBpc0NTU1NoYXBlc0VuYWJsZWQ7CiAg
ICAgc3RhdGljIGJvb2wgaXNDU1NSZWdpb25zRW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBpc0NT
U0NvbXBvc2l0aW5nRW5hYmxlZDsKICAgICBXRUJDT1JFX1RFU1RJTkcgc3RhdGljIGJvb2wgaXNM
YW5nQXR0cmlidXRlQXdhcmVGb3JtQ29udHJvbFVJRW5hYmxlZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYjUyZDcxZjdl
OWJlOTllY2FmNjc5Yzc5MjU0ZTFjY2VlYzNiNDM1OS4uMDAyZjUzZjVjOTQxN2Y4NDkwMTJhYjJk
NzNkMjdjMmUwMjYwOWJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTY1LDggKzY1LDggQEAKICNpbmNsdWRlICJXZWJL
aXRGb250RmFtaWx5TmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVW
YWx1ZS5oIgorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQpAQCAtMzM4LDcgKzMzOCw3IEBAIHN0
YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIGNvbXB1dGVkUHJvcGVydGllc1tdID0gewogICAgIENT
U1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW4sCiAgICAgQ1NTUHJvcGVydHlXZWJraXRQ
cmludENvbG9yQWRqdXN0LAogICAgIENTU1Byb3BlcnR5V2Via2l0UnRsT3JkZXJpbmcsCi0jaWYg
RU5BQkxFKENTU19FWENMVVNJT05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIENTU1By
b3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNp
ZGUsCiAjZW5kaWYKQEAgLTM3Nyw3ICszNzcsNyBAQCBzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJ
RCBjb21wdXRlZFByb3BlcnRpZXNbXSA9IHsKICNpZiBFTkFCTEUoRFJBR0dBQkxFX1JFR0lPTikK
ICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbiwKICNlbmRpZgotI2lmIEVOQUJMRShDU1Nf
RVhDTFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBDU1NQcm9wZXJ0eVdlYmtp
dFdyYXBGbG93LAogICAgIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW4sCiAgICAgQ1NTUHJv
cGVydHlXZWJraXRTaGFwZVBhZGRpbmcsCkBAIC0yNjgzLDcgKzI2ODMsNyBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uT3ZlcmZs
b3c6CiAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUt
PnJlZ2lvbk92ZXJmbG93KCkpOwogI2VuZGlmCi0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQor
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3Jh
cEZsb3c6CiAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPndyYXBGbG93KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJn
aW46CkBAIC0yNjkzLDI0ICsyNjkzLDI0IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZToKICAgICAgICAgICAgIGlmICgh
c3R5bGUtPnNoYXBlSW5zaWRlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgaWYg
KHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6T3V0
c2lkZSkKKyAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IFNo
YXBlVmFsdWU6Ok91dHNpZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU91dHNpZGVTaGFwZSk7Ci0gICAgICAgICAg
ICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVl
OjpJbWFnZSkgeworICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkg
PT0gU2hhcGVWYWx1ZTo6SW1hZ2UpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBl
SW5zaWRlKCktPmltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+c2hh
cGVJbnNpZGUoKS0+aW1hZ2UoKS0+Y3NzVmFsdWUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUo
KSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSk7CisgICAgICAgICAgICBBU1NFUlQoc3R5
bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSk7CiAgICAgICAg
ICAgICByZXR1cm4gdmFsdWVGb3JCYXNpY1NoYXBlKHN0eWxlLT5zaGFwZUluc2lkZSgpLT5zaGFw
ZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKICAgICAg
ICAgICAgIGlmICghc3R5bGUtPnNoYXBlT3V0c2lkZSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAg
ICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25T
aGFwZVZhbHVlOjpJbWFnZSkgeworICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZU91dHNpZGUo
KS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OkltYWdlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0
eWxlLT5zaGFwZU91dHNpZGUoKS0+aW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+aW1hZ2UoKS0+Y3NzVmFsdWUoKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9uZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlT3V0
c2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpOworICAgICAgICAg
ICAgQVNTRVJUKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlNo
YXBlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckJhc2ljU2hhcGUoc3R5bGUtPnNoYXBl
T3V0c2lkZSgpLT5zaGFwZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBU
aHJvdWdoOgogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT53cmFwVGhyb3VnaCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggN2FjOTY1
MWJkMTRlMzQxYjQ4NWVmMzE1MzliNTNkMzNmZGZlYzAwYy4uYWExMWY1M2M1NjdiOGJkYjQyODRh
NjkxY2VlODhlODQ3NjViM2YyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTU4NCwx
MSArNTg0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NpbXBsZUxlbmd0aFByb3BlcnR5SUQo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBib29sJiBhY2NlCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFBhZGRpbmdTdGFydDoKICAgICAgICAgYWNjZXB0c05lZ2F0aXZlTnVtYmVycyA9IGZh
bHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisj
aWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFy
Z2luOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZVBhZGRpbmc6CiAgICAgICAgIGFj
Y2VwdHNOZWdhdGl2ZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OmNzc0V4Y2x1c2lvbnNFbmFibGVkKCk7CisgICAgICAgIHJldHVybiBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpjc3NTaGFwZXNFbmFibGVkKCk7CiAjZW5kaWYKICAgICBjYXNl
IENTU1Byb3BlcnR5Qm90dG9tOgogICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgpAQCAtMTAyMSwx
NSArMTAyMSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEtleXdvcmRQcm9wZXJ0eUFu
ZFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgaW50CiAgICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlVGV4dCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWxsKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKKyNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcEZsb3c6
Ci0gICAgICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3NzRXhjbHVzaW9uc0VuYWJs
ZWQoKSkKKyAgICAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjc3NTaGFwZXNFbmFi
bGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICh2YWx1ZUlEID09
IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQm90aCB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlU3RhcnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVuZCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlTWF4aW11bSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ2xlYXIpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBU
aHJvdWdoOgotICAgICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmNzc0V4Y2x1c2lv
bnNFbmFibGVkKCkpCisgICAgICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3NzU2hh
cGVzRW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZVdyYXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNjMsNyArMTE2Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0tleXdvcmRQcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVz
ZXJNb2RpZnk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6Ci0jaWYgRU5B
QkxFKENTU19FWENMVVNJT05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRXcmFwRmxvdzoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcFRo
cm91Z2g6CiAjZW5kaWYKQEAgLTI5NTIsMTAgKzI5NTIsMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lk
ZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlOgotICAgICAgICBpZiAo
IVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmNzc0V4Y2x1c2lvbnNFbmFibGVkKCkpCisgICAgICAg
IGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3NzU2hhcGVzRW5hYmxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwpAQCAtMjk3MCw3ICsyOTcwLDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJn
aW46CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlUGFkZGluZzoKLSAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3NzRXhjbHVzaW9uc0VuYWJs
ZWQoKSAmJiAhaWQgJiYgdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZykpOworICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpjc3NTaGFwZXNF
bmFibGVkKCkgJiYgIWlkICYmIHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcpKTsK
ICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9O
KQpAQCAtMzA4OSw3ICszMDg5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRVc2VyRHJhZzoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lP
TlMpCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdy
YXBGbG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwVGhyb3VnaDoKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCA2NzJjYTRlMTk1NTIxOTUz
ZDkwZmI1ODc0NmJkOWE4YWFiZWJjZDNlLi4zNzJjMWIzZjQ2ODA4MWY1NmM3ZDRlYTgxNDM3NDM3
MzcyYjg2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaApAQCAtMTIx
LDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGludGVybmFsbHkg
Zm9yIGNvdW50ZXIgbmFtZXMgKGFzIG9wcG9zZWQgdG8gY291bnRlciB2YWx1ZXMpCiAgICAgICAg
IENTU19DT1VOVEVSX05BTUUgPSAxMTAsCiAKLSAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGJ5IHRo
ZSBDU1MgRXhjbHVzaW9ucyBkcmFmdAorICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIENT
UyBTaGFwZXMgZHJhZnQKICAgICAgICAgQ1NTX1NIQVBFID0gMTExLAogCiAgICAgICAgIC8vIFVz
ZWQgYnkgYm9yZGVyIGltYWdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuY3BwCmluZGV4IGJl
ZGY3ZDdlODRiNmNmYjI4YWEyOTEwOTEyNjkwY2U1NTM3NTA3ZjkuLjM0MWFkNjc3ZjY0ZDg2OTkz
NzZlYmQ3NzdhNGIyMmE1NjU1NzY2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmNwcApA
QCAtNjY5LDcgKzY2OSw3IEBAIGJvb2wgQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdp
b25CcmVha0JlZm9yZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNp
ZGU6CiAjZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxFKENTU19T
SEFQRVMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBGbG93OgogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRTaGFwZU1hcmdpbjoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hh
cGVQYWRkaW5nOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFt
ZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgppbmRleCA5ZmZj
ZDE3M2U0YTJlNzgxYjJmODdmNzg2NjBkMmY4Yzk2MjBkMDU3Li42MTg0NDkxN2M4YmY5YzgxZDFi
ODg4NDc1YmE4ZTUwZmUzODE1MDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJvcGVydHlOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1l
cy5pbgpAQCAtNDIwLDcgKzQyMCw3IEBAIHotaW5kZXgKIC13ZWJraXQtcmVnaW9uLWJyZWFrLWJl
Zm9yZQogLXdlYmtpdC1yZWdpb24tYnJlYWstaW5zaWRlCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEVO
QUJMRV9DU1NfRVhDTFVTSU9OUykgJiYgRU5BQkxFX0NTU19FWENMVVNJT05TCisjaWYgZGVmaW5l
ZChFTkFCTEVfQ1NTX1NIQVBFUykgJiYgRU5BQkxFX0NTU19TSEFQRVMKIC13ZWJraXQtc2hhcGUt
aW5zaWRlCiAtd2Via2l0LXNoYXBlLW91dHNpZGUKIC13ZWJraXQtc2hhcGUtbWFyZ2luCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKaW5kZXggNTBiNTE4
NjdiYjE0MzYzOTEzNGU0NGQ2ODEyMzk3YzhmYjQ4MDg3Zi4uMjY5YzM5YjM2ZTI1M2RkOGM3YjJj
ZTEzMWIxNmNmYzAwNzYwYjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVk
U3R5bGVCdWlsZGVyLmNwcApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLSNpZiBFTkFCTEUoQ1NTX0VY
Q0xVU0lPTlMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgorI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwpAQCAtMTkzMiwxMSArMTkzMiwxMSBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAot
I2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLXRlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVl
KiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiksIEV4
Y2x1c2lvblNoYXBlVmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBwbHlQcm9w
ZXJ0eUV4Y2x1c2lvblNoYXBlIHsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKK3RlbXBsYXRlIDxT
aGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiksIFNo
YXBlVmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9wZXJ0eVNoYXBl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVy
RnVuY3Rpb24pKHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxl
KiBzdHlsZSwgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJG
dW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewpAQCAt
MTk0NSwyMCArMTk0NSwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAyNTcx
OiBMYXlvdXQgZm9yIHRoZSB2YWx1ZSAnb3V0c2lkZS1zaGFwZScgaXMgbm90IHlldCBpbXBsZW1l
bnRlZAogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVPdXRzaWRlU2hhcGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkp
OworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIFNoYXBl
VmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9u
U2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVl
KGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpj
cmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRT
aGFwZVZhbHVlKCkpKTsKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgUmVmUHRyPEV4Y2x1c2lv
blNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOworICAgICAgICAg
ICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBlID0gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOwogICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKICAg
ICAgICAgfQogCiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCiAgICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxFeGNsdXNpb25TaGFwZVZhbHVlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NS
ZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4sIHNldHRlckZ1bmN0aW9uLCBFeGNsdXNpb25TaGFw
ZVZhbHVlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICBQcm9w
ZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTaGFwZVZhbHVl
KiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4sIHNldHRlckZ1bmN0aW9u
LCBTaGFwZVZhbHVlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwogICAgICAg
ICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRs
ZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKICAgICB9CiB9OwpAQCAtMjMzNiwx
MyArMjMzNiwxMyBAQCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyOjpEZXByZWNhdGVkU3R5bGVCdWls
ZGVyKCkKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0
LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVXNlclNlbGVjdCwgJlJlbmRlclN0eWxlOjp1c2VyU2Vs
ZWN0LCBFVXNlclNlbGVjdCwgJlJlbmRlclN0eWxlOjpzZXRVc2VyU2VsZWN0LCBFVXNlclNlbGVj
dCwgJlJlbmRlclN0eWxlOjppbml0aWFsVXNlclNlbGVjdD46OmNyZWF0ZUhhbmRsZXIoKSk7CiAg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGgsIEFwcGx5UHJv
cGVydHlDbGlwUGF0aDwmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OnNldENs
aXBQYXRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxDbGlwUGF0aD46OmNyZWF0ZUhhbmRsZXIoKSk7
CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0V3JhcEZsb3csIEFwcGx5UHJv
cGVydHlEZWZhdWx0PFdyYXBGbG93LCAmUmVuZGVyU3R5bGU6OndyYXBGbG93LCBXcmFwRmxvdywg
JlJlbmRlclN0eWxlOjpzZXRXcmFwRmxvdywgV3JhcEZsb3csICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFdyYXBGbG93Pjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRTaGFwZU1hcmdpbiwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5
bGU6OnNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxTaGFwZU1hcmdpbj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVQYWRkaW5nLCBBcHBseVByb3BlcnR5TGVu
Z3RoPCZSZW5kZXJTdHlsZTo6c2hhcGVQYWRkaW5nLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlUGFk
ZGluZywgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVQYWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigp
KTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRXcmFwVGhyb3VnaCwg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8V3JhcFRocm91Z2gsICZSZW5kZXJTdHlsZTo6d3JhcFRocm91
Z2gsIFdyYXBUaHJvdWdoLCAmUmVuZGVyU3R5bGU6OnNldFdyYXBUaHJvdWdoLCBXcmFwVGhyb3Vn
aCwgJlJlbmRlclN0eWxlOjppbml0aWFsV3JhcFRocm91Z2g+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCBBcHBs
eVByb3BlcnR5RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJlbmRl
clN0eWxlOjpzZXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGU+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdFNoYXBlT3V0c2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlPCZSZW5kZXJTdHls
ZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlT3V0c2lkZSwgJlJlbmRlclN0
eWxlOjppbml0aWFsU2hhcGVPdXRzaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgQXBwbHlQcm9wZXJ0eVNo
YXBlPCZSZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNp
ZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGUsIEFw
cGx5UHJvcGVydHlTaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxl
OjpzZXRTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlT3V0c2lkZT46OmNy
ZWF0ZUhhbmRsZXIoKSk7CiAjZW5kaWYKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXaGl0ZVNwYWNlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFV2hpdGVTcGFjZSwgJlJlbmRlclN0
eWxlOjp3aGl0ZVNwYWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjpzZXRXaGl0ZVNwYWNl
LCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsV2hpdGVTcGFjZT46OmNyZWF0ZUhh
bmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2lkb3dzLCBBcHBs
eVByb3BlcnR5QXV0bzxzaG9ydCwgJlJlbmRlclN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHlsZTo6
c2V0V2lkb3dzLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9XaWRvd3MsICZSZW5kZXJTdHlsZTo6c2V0
SGFzQXV0b1dpZG93cz46OmNyZWF0ZUhhbmRsZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggZGNhNGIxYTEyOTgxMWVkMTgyMmVhYzMyMjdjYmE3Mzk3MjVmNTRmOC4u
YzI3NDViNmZhYmFhMTFiMjYzNTM3YzY3MjQ4NjQwOTg1NmFlYzA4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMzEyMCw3ICszMTIwLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VXNlclNlbGVjdDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGg6Ci0j
aWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwRmxvdzoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
U2hhcGVNYXJnaW46CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlUGFkZGluZzoKQEAg
LTQxNzEsNyArNDE3MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMo
KQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSNpZiBFTkFC
TEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZToKICAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0
eWxlKCktPnNoYXBlSW5zaWRlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5zaGFwZUluc2lkZSgpLT5p
bWFnZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+c2hhcGVJbnNpZGUoKS0+aW1hZ2UoKS0+aXNQZW5k
aW5nSW1hZ2UoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNoYXBlSW5zaWRl
KCktPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtX3N0YXRlLnN0eWxlKCktPnNoYXBlSW5zaWRlKCktPmltYWdlKCkpKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5j
cHAKaW5kZXggZDE4YmMzMDY4ZGQzMTU4OTM1YzNlYjlhNzA3ODc3N2UwMDU3ZDI0Ny4uZmNhNjI2
ZjgwZDY2YTEyYjEyNmE0YTgxNjU1ZmJmZmM0ZjJjMjM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMTQz
LDExICsxNDMsMTEgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9u
PiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIENsaXAKICAgICByZXR1cm4gU2hhcGVD
bGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKHRvU2hhcGUtPmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jl
c3MpKTsKIH0KIAotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLXN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFz
ZSosIEV4Y2x1c2lvblNoYXBlVmFsdWUqIGZyb20sIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCitzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBTaGFw
ZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0bywgZG91YmxlIHByb2dyZXNzKQogewogICAgIC8v
IEZJWE1FIEJ1ZyAxMDI3MjM6IFNoYXBlLWluc2lkZSBzaG91bGQgYmUgYWJsZSB0byBhbmltYXRl
IGEgdmFsdWUgb2YgJ291dHNpZGUtc2hhcGUnIHdoZW4gc2hhcGUtb3V0c2lkZSBpcyBzZXQgdG8g
YSBCYXNpY1NoYXBlCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBFeGNsdXNpb25TaGFwZVZhbHVl
OjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKQorICAg
IGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBT
aGFwZVZhbHVlOjpTaGFwZSkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgY29uc3QgQmFzaWNT
aGFwZSogZnJvbVNoYXBlID0gZnJvbS0+c2hhcGUoKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IEFuaW1hdGlvbkJhc2UqLCBFeAogICAgIGlmICghZnJvbVNoYXBlLT5jYW5CbGVuZCh0b1NoYXBl
KSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgcmV0dXJuIEV4Y2x1c2lvblNoYXBlVmFsdWU6
OmNyZWF0ZVNoYXBlVmFsdWUodG9TaGFwZS0+YmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVzcykpOwor
ICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKHRvU2hhcGUtPmJsZW5kKGZy
b21TaGFwZSwgcHJvZ3Jlc3MpKTsKIH0KICNlbmRpZgogCkBAIC00MDQsMTEgKzQwNCwxMSBAQCBw
dWJsaWM6CiAgICAgfQogfTsKIAotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLWNsYXNzIFBy
b3BlcnR5V3JhcHBlckV4Y2x1c2lvblNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdy
YXBwZXI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4geworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorY2xh
c3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBl
cjxTaGFwZVZhbHVlPiB7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyRXhjbHVzaW9uU2hh
cGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShQYXNzUmVmUHRy
PEV4Y2x1c2lvblNoYXBlVmFsdWU+KSkKLSAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIFByb3Bl
cnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcCwgU2hhcGVWYWx1ZSogKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUGFzc1Jl
ZlB0cjxTaGFwZVZhbHVlPikpCisgICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxT
aGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKICAgICB7CiAgICAgfQogfTsKQEAgLTEx
NjQsOCArMTE2NCw4IEBAIHZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmVuc3VyZVByb3BlcnR5
TWFwKCkKIAogICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
ckNsaXBQYXRoKENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBh
dGgsICZSZW5kZXJTdHlsZTo6c2V0Q2xpcFBhdGgpKTsKIAotI2lmIEVOQUJMRShDU1NfRVhDTFVT
SU9OUykKLSAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJF
eGNsdXNpb25TaGFwZShDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6
OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlKSk7CisjaWYgRU5BQkxF
KENTU19TSEFQRVMpCisgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpz
aGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSkpOwogI2VuZGlmCiAKICAg
ICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZm
ZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlk
Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENv
bHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgKaW5kZXggMTdiODAyNDhiNmIxNzkx
YTNhMDE2YTg5MmZkMjc5OWFmOGYyMWU0My4uZTA2NDlmY2I0M2Y0ZjI5MDMwNTUxZmFmNzU5ZjM1
ZWE5MWI2ZWEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRp
UmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZl
ci5oCkBAIC0xNDksNyArMTQ5LDcgQEAgc3RydWN0IEJpZGlDaGFyYWN0ZXJSdW4gewogICAgIC8v
IERvIG5vdCBhZGQgYW55dGhpbmcgYXBhcnQgZnJvbSBiaXRmaWVsZHMgdW50aWwgYWZ0ZXIgbV9u
ZXh0LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDE3Mwog
ICAgIGJvb2wgbV9vdmVycmlkZSA6IDE7CiAgICAgYm9vbCBtX2hhc0h5cGhlbiA6IDE7IC8vIFVz
ZWQgYnkgQmlkaVJ1biBzdWJjbGFzcyB3aGljaCBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbiBidXQg
ZW5hYmxlcyB1cyB0byBzYXZlIDggYnl0ZXMgcGVyIG9iamVjdCBvbiA2NC1iaXQuCi0jaWYgRU5B
QkxFKENTU19FWENMVVNJT05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGJvb2wgbV9z
dGFydHNTZWdtZW50IDogMTsgLy8gU2FtZSBjb21tZW50IGFzIG1faGFzSHlwaGVuLgogI2VuZGlm
CiAgICAgdW5zaWduZWQgY2hhciBtX2xldmVsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0JpZGlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmgK
aW5kZXggYzk1NDE1YzMyMWMzNzUwMjM2YjU4YjRkNDEwNjEyYTBiOWQxMmJkMi4uZTFjNzI1MjIz
NzcxYjFkY2NiNzY2NTA4NjE2NDlhZWRhYTNmMDIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0JpZGlSdW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlk
aVJ1bi5oCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBCaWRpUnVuIDogQmlkaUNoYXJhY3RlclJ1
biB7CiAgICAgICAgIEFTU0VSVCghb2JqZWN0LT5pc1RleHQoKSB8fCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RvcCkgPD0gdG9SZW5kZXJUZXh0KG9iamVjdCktPnRleHRMZW5ndGgoKSk7CiAgICAg
ICAgIC8vIFN0b3JlZCBpbiBiYXNlIGNsYXNzIHRvIHNhdmUgc3BhY2UuCiAgICAgICAgIG1faGFz
SHlwaGVuID0gZmFsc2U7Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQogICAgICAgICBtX3N0YXJ0c1NlZ21lbnQgPSBmYWxzZTsKICNlbmRpZgogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZh
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTBlZjdhOThiYWE2ODEwOWE4ODkxOTU4YWI5
YzkwMTU2M2M4N2NhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJFeGNsdXNpb25JbnRlcnZhbC5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgSW50ZXJ2YWxYMUNvbXBhcmF0b3Ig
ewotICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGkxLCBjb25z
dCBFeGNsdXNpb25JbnRlcnZhbCYgaTIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaTEu
eDEgPCBpMi54MTsKLSAgICB9Ci19OwotCi1ib29sIEV4Y2x1c2lvbkludGVydmFsOjppbnRlcnNl
Y3QoY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGksIEV4Y2x1c2lvbkludGVydmFsJiBydikgY29u
c3QKLXsKLSAgICBpZiAoeDIgPCBpLngxIHx8IHgxID4gaS54MikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJ2LngxID0gc3RkOjptYXgoeDEsIGkueDEpOwotICAgIHJ2LngyID0gc3RkOjpt
aW4oeDIsIGkueDIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIHNvcnRFeGNsdXNpb25J
bnRlcnZhbHMoVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdikKLXsKLSAgICBzdGQ6OnNvcnQo
di5iZWdpbigpLCB2LmVuZCgpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKLX0KLQotdm9pZCBt
ZXJnZUV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2
MSwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjIsIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4mIHJ2KQotewotICAgIGlmICghdjEuc2l6ZSgpKQotICAgICAgICBydi5hcHBlbmRS
YW5nZSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSk7Ci0gICAgZWxzZSBpZiAoIXYyLnNpemUoKSkKLSAg
ICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHYodjEuc2l6ZSgpICsgdjIuc2l6ZSgp
KTsKLSAgICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwqIGludGVydmFsID0gMDsKLQotICAgICAgICBz
dGQ6Om1lcmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgdi5i
ZWdpbigpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghaW50ZXJ2YWwpCi0g
ICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZb
aV0ueDEgPj0gaW50ZXJ2YWwtPngxICYmIHZbaV0ueDEgPD0gaW50ZXJ2YWwtPngyKSAvLyBGSVhN
RTogMXN0IDw9IHRlc3Qgbm90IG5lZWRlZD8KLSAgICAgICAgICAgICAgICBpbnRlcnZhbC0+eDIg
PSBzdGQ6Om1heChpbnRlcnZhbC0+eDIsIHZbaV0ueDIpOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgaW50
ZXJ2YWwgPSAmdltpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
bnRlcnZhbCkKLSAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOwotICAgIH0KLX0KLQot
dm9pZCBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+JiBydikKLXsKLSAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgp
OwotICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7Ci0KLSAgICBpZiAoIXYxU2l6ZSB8fCAh
djJTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZh
bDsKLSAgICBib29sIG92ZXJsYXAgPSBmYWxzZTsKLSAgICBzaXplX3QgaTEgPSAwOwotICAgIHNp
emVfdCBpMiA9IDA7Ci0KLSAgICB3aGlsZSAoaTEgPCB2MVNpemUgJiYgaTIgPCB2MlNpemUpIHsK
LSAgICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwgdjEyOwotICAgICAgICBpZiAodjFbaTFdLmludGVy
c2VjdCh2MltpMl0sIHYxMikpIHsKLSAgICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmlu
dGVyc2VjdChpbnRlcnZhbCwgaW50ZXJ2YWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJs
YXApCi0gICAgICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci0gICAgICAgICAg
ICAgICAgaW50ZXJ2YWwgPSB2MTI7Ci0gICAgICAgICAgICAgICAgb3ZlcmxhcCA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodjFbaTFdLngyIDwgdjJbaTJdLngyKQotICAg
ICAgICAgICAgICAgIGkxKys7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaTIr
KzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvdmVybGFwKQotICAgICAgICAg
ICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci0gICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAodjFbaTFdLngxIDwgdjJbaTJdLngxKQotICAgICAgICAgICAgICAg
IGkxKys7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaTIrKzsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChvdmVybGFwKQotICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwp
OwotfQotCi12b2lkIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNs
dXNpb25JbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2Miwg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcnYpCi17Ci0gICAgc2l6ZV90IHYxU2l6ZSA9IHYx
LnNpemUoKTsKLSAgICBzaXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOwotCi0gICAgaWYgKCF2MVNp
emUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdjJTaXplKQotICAgICAgICBydi5hcHBl
bmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNpemVf
dCBpMSA9IDAsIGkyID0gMDsKLSAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEu
ZW5kKCkpOwotCi0gICAgICAgIHdoaWxlIChpMSA8IHJ2LnNpemUoKSAmJiBpMiA8IHYyU2l6ZSkg
ewotICAgICAgICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwmIGludGVydmFsMSA9IHJ2W2kxXTsKLSAg
ICAgICAgICAgIGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpbnRlcnZhbDIgPSB2MltpMl07Ci0K
LSAgICAgICAgICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVydmFs
Mi54MiA+PSBpbnRlcnZhbDEueDIpCi0gICAgICAgICAgICAgICAgcnYucmVtb3ZlKGkxKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MiA8IGludGVydmFsMS54MSkKLSAgICAgICAg
ICAgICAgICBpMiArPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50
ZXJ2YWwxLngyKQotICAgICAgICAgICAgICAgIGkxICs9IDE7Ci0gICAgICAgICAgICBlbHNlIGlm
IChpbnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwx
LngyKSB7Ci0gICAgICAgICAgICAgICAgcnYuaW5zZXJ0KGkxLCBFeGNsdXNpb25JbnRlcnZhbChp
bnRlcnZhbDEueDEsIGludGVydmFsMi54MSkpOwotICAgICAgICAgICAgICAgIGludGVydmFsMS54
MSA9IGludGVydmFsMi54MjsKLSAgICAgICAgICAgICAgICBpMiArPSAxOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxKSB7Ci0gICAgICAgICAgICAg
ICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOwotICAgICAgICAgICAgICAgIGkyICs9IDE7
Ci0gICAgICAgICAgICB9IGVsc2UgIHsgLy8gKGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIp
Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngyID0gaW50ZXJ2YWwyLngxOwotICAgICAgICAg
ICAgICAgIGkxICs9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25JbnRlcnZhbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
bkludGVydmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMzFmZWIxODExM2Rl
OGMxZTQzNDFlMDEwMzcwOGI3NzRjYTM1MWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVy
dmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0g
KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNs
dXNpb25JbnRlcnZhbF9oCi0jZGVmaW5lIEV4Y2x1c2lvbkludGVydmFsX2gKLQotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRXhjbHVzaW9u
SW50ZXJ2YWwgewotcHVibGljOgotICAgIGZsb2F0IHgxOwotICAgIGZsb2F0IHgyOwotCi0gICAg
RXhjbHVzaW9uSW50ZXJ2YWwoZmxvYXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApCi0gICAgICAgIDog
eDEoeDEpCi0gICAgICAgICwgeDIoeDIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaW50ZXJz
ZWN0KGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiwgRXhjbHVzaW9uSW50ZXJ2YWwmKSBjb25zdDsK
LX07Ci0KLXZvaWQgc29ydEV4Y2x1c2lvbkludGVydmFscyhWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+Jik7Ci12b2lkIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYpOwotdm9pZCBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoY29u
c3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4mLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jik7Ci12b2lkIHN1YnRyYWN0RXhjbHVz
aW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBjb25zdCBWZWN0
b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpOwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFeGNsdXNpb25JbnRlcnZhbF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5Zjk3OGYzMGI1OGUyMTRiODRhOWQzZDFmOGQ0MDg3YWUw
YjJhMjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICog
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RXhjbHVzaW9uUG9seWdvbi5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsKLSAgICBOb3Jt
YWwsCi0gICAgVmVydGV4TWluWSwKLSAgICBWZXJ0ZXhNYXhZLAotICAgIFZlcnRleFlCb3RoCi19
OwotCi1zdHJ1Y3QgRWRnZUludGVyc2VjdGlvbiB7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSogZWRnZTsKLSAgICBGbG9hdFBvaW50IHBvaW50OwotICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBl
IHR5cGU7Ci19OwotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0IEZsb2F0UG9p
bnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQotewotICAgIHJldHVybiAoKHBvaW50LngoKSAtIHZlcnRleDEueCgpKSAqICh2ZXJ0
ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkgLSAoKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpICog
KHBvaW50LnkoKSAtIHZlcnRleDEueSgpKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Jl
ZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBjb25zdCBGbG9hdFBvaW50
JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCi17Ci0gICAgcmV0dXJuIGxl
ZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAwOwotfQotCi1zdGF0aWMg
Ym9vbCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9p
bnRlciwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQotewotICAgIGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7Ci0KLSAgICBpZiAoZWRnZS5taW5Z
KCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Y29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOwotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKLSAgICBmbG9hdCBkeSA9IHZlcnRl
eDIueSgpIC0gdmVydGV4MS55KCk7Ci0KLSAgICBmbG9hdCBpbnRlcnNlY3Rpb25YOwotICAgIEVk
Z2VJbnRlcnNlY3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7Ci0KLSAgICBpZiAoIWR5KSB7Ci0g
ICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKLSAgICAgICAgaW50ZXJzZWN0
aW9uWCA9IGVkZ2UubWluWCgpOwotICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1pblkoKSkgewot
ICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKLSAgICAgICAgaW50ZXJzZWN0
aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4
Mi54KCk7Ci0gICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7Ci0gICAgICAgIGludGVy
c2VjdGlvblR5cGUgPSBWZXJ0ZXhNYXhZOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRl
eDEueSgpID4gdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOwotICAgICAgICBpbnRl
cnNlY3Rpb25YID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0gdmVydGV4MS54
KCkpIC8gZHkpICsgdmVydGV4MS54KCk7Ci0gICAgfQotCi0gICAgcmVzdWx0LmVkZ2UgPSBlZGdl
UG9pbnRlcjsKLSAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7Ci0gICAgcmVzdWx0
LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBpbndhcmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UmIGVkZ2UpCi17Ci0gICAgRmxvYXRTaXplIGVkZ2VEZWx0YSA9IGVkZ2UudmVydGV4Migp
IC0gZWRnZS52ZXJ0ZXgxKCk7Ci0gICAgaWYgKCFlZGdlRGVsdGEud2lkdGgoKSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0U2l6ZSgoZWRnZURlbHRhLmhlaWdodCgpID4gMCA/IC0xIDogMSksIDApOwot
ICAgIGlmICghZWRnZURlbHRhLmhlaWdodCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKDAs
IChlZGdlRGVsdGEud2lkdGgoKSA+IDAgPyAxIDogLTEpKTsKLSAgICBmbG9hdCBlZGdlTGVuZ3Ro
ID0gZWRnZURlbHRhLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZSgtZWRn
ZURlbHRhLmhlaWdodCgpIC8gZWRnZUxlbmd0aCwgZWRnZURlbHRhLndpZHRoKCkgLyBlZGdlTGVu
Z3RoKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFNpemUgb3V0d2FyZEVkZ2VOb3JtYWwoY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKLXsKLSAgICByZXR1cm4gLWlud2FyZEVkZ2VOb3Jt
YWwoZWRnZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBcmMoVmVjdG9yPEZsb2F0
UG9pbnQ+JiB2ZXJ0aWNlcywgY29uc3QgRmxvYXRQb2ludCYgYXJjQ2VudGVyLCBmbG9hdCBhcmNS
YWRpdXMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0QXJjVmVydGV4LCBjb25zdCBGbG9hdFBvaW50
JiBlbmRBcmNWZXJ0ZXgsIGJvb2wgcGFkZGluZykKLXsKLSAgICBmbG9hdCBzdGFydEFuZ2xlID0g
YXRhbjIoc3RhcnRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgc3RhcnRBcmNWZXJ0ZXgu
eCgpIC0gYXJjQ2VudGVyLngoKSk7Ci0gICAgZmxvYXQgZW5kQW5nbGUgPSBhdGFuMihlbmRBcmNW
ZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgZW5kQXJjVmVydGV4LngoKSAtIGFyY0NlbnRlci54
KCkpOwotICAgIGNvbnN0IGZsb2F0IHR3b1BJID0gcGlGbG9hdCAqIDI7Ci0gICAgaWYgKHN0YXJ0
QW5nbGUgPCAwKQotICAgICAgICBzdGFydEFuZ2xlICs9IHR3b1BJOwotICAgIGlmIChlbmRBbmds
ZSA8IDApCi0gICAgICAgIGVuZEFuZ2xlICs9IHR3b1BJOwotICAgIGZsb2F0IGFuZ2xlID0gKHN0
YXJ0QW5nbGUgPiBlbmRBbmdsZSkgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSA6IChzdGFydEFu
Z2xlICsgdHdvUEkgLSBlbmRBbmdsZSk7Ci0gICAgY29uc3QgZmxvYXQgYXJjU2VnbWVudENvdW50
ID0gNjsgLy8gQW4gZXZlbiBudW1iZXIgc28gdGhhdCBvbmUgYXJjIHZlcnRleCB3aWxsIGJlIGVh
Y3RseSBhcmNSYWRpdXMgZnJvbSBhcmNDZW50ZXIuCi0gICAgZmxvYXQgYXJjU2VnbWVudEFuZ2xl
ID0gICgocGFkZGluZykgPyAtYW5nbGUgOiB0d29QSSAtIGFuZ2xlKSAvIGFyY1NlZ21lbnRDb3Vu
dDsKLQotICAgIHZlcnRpY2VzLmFwcGVuZChzdGFydEFyY1ZlcnRleCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IGFyY1NlZ21lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGFu
Z2xlID0gc3RhcnRBbmdsZSArIGFyY1NlZ21lbnRBbmdsZSAqIGk7Ci0gICAgICAgIHZlcnRpY2Vz
LmFwcGVuZChhcmNDZW50ZXIgKyBGbG9hdFBvaW50KGNvcyhhbmdsZSkgKiBhcmNSYWRpdXMsIHNp
bihhbmdsZSkgKiBhcmNSYWRpdXMpKTsKLSAgICB9Ci0gICAgdmVydGljZXMuYXBwZW5kKGVuZEFy
Y1ZlcnRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbmFwVmVydGljZXNUb0xheW91dFVu
aXRHcmlkKFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZlcnRpY2VzLnNpemUoKTsgKytpKQotICAgICAgICB2ZXJ0aWNlc1tpXS5z
ZXQoTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS54KCkpLnRvRmxvYXQoKSwgTGF5b3V0VW5pdCh2ZXJ0
aWNlc1tpXS55KCkpLnRvRmxvYXQoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUGFzc093blB0cjxG
bG9hdFBvbHlnb24+IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMoY29uc3QgRmxvYXRQb2x5Z29u
JiBwb2x5Z29uLCBmbG9hdCBwYWRkaW5nLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBPd25Q
dHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gcGFkZGVkVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVj
dG9yPEZsb2F0UG9pbnQ+KCkpOwotICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9uOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsK
LSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VB
dChpKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRn
ZS5wcmV2aW91c0VkZ2UoKTsKLSAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVk
Z2UodGhpc0VkZ2UsIGlud2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogcGFkZGluZyk7Ci0gICAg
ICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBpbndhcmRFZGdl
Tm9ybWFsKHByZXZFZGdlKSAqIHBhZGRpbmcpOwotCi0gICAgICAgIGlmIChwcmV2T2Zmc2V0RWRn
ZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCi0gICAgICAgICAg
ICBwYWRkZWRWZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgICAgIGVsc2UgaWYg
KGlzUmVmbGV4VmVydGV4KHByZXZFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2UudmVydGV4MSgpLCB0
aGlzRWRnZS52ZXJ0ZXgyKCkpKQotICAgICAgICAgICAgYXBwZW5kQXJjKCpwYWRkZWRWZXJ0aWNl
cywgdGhpc0VkZ2UudmVydGV4MSgpLCBwYWRkaW5nLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0ZXgyKCks
IHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgc25hcFZlcnRp
Y2VzVG9MYXlvdXRVbml0R3JpZCgqcGFkZGVkVmVydGljZXMpOwotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRmxvYXRQb2x5Z29uKHBhZGRlZFZlcnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsK
LX0KLQotc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBl
TWFyZ2luQm91bmRzKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgbWFyZ2luLCBX
aW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gbWFy
Z2luVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkpOwotICAgIEZs
b2F0UG9pbnQgaW50ZXJzZWN0aW9uOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBv
bHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKLSAgICAgICAgY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsKLSAgICAgICAg
T2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIG91dHdhcmRFZGdlTm9y
bWFsKHRoaXNFZGdlKSAqIG1hcmdpbik7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZP
ZmZzZXRFZGdlKHByZXZFZGdlLCBvdXR3YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkgKiBtYXJnaW4p
OwotCi0gICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVk
Z2UsIGludGVyc2VjdGlvbikpCi0gICAgICAgICAgICBtYXJnaW5WZXJ0aWNlcy0+YXBwZW5kKGlu
dGVyc2VjdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZEFyYygqbWFyZ2lu
VmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgbWFyZ2luLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0
ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIHNu
YXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKm1hcmdpblZlcnRpY2VzKTsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbihtYXJnaW5WZXJ0aWNlcy5yZWxlYXNlKCksIGZpbGxS
dWxlKSk7Ci19Ci0KLWNvbnN0IEZsb2F0UG9seWdvbiYgRXhjbHVzaW9uUG9seWdvbjo6c2hhcGVQ
YWRkaW5nQm91bmRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2hhcGVQYWRkaW5nKCkgPj0gMCk7
Ci0gICAgaWYgKCFzaGFwZVBhZGRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbjsKLQot
ICAgIGlmICghbV9wYWRkaW5nQm91bmRzKQotICAgICAgICBtX3BhZGRpbmdCb3VuZHMgPSBjb21w
dXRlU2hhcGVQYWRkaW5nQm91bmRzKG1fcG9seWdvbiwgc2hhcGVQYWRkaW5nKCksIG1fcG9seWdv
bi5maWxsUnVsZSgpKTsKLQotICAgIHJldHVybiAqbV9wYWRkaW5nQm91bmRzOwotfQotCi1jb25z
dCBGbG9hdFBvbHlnb24mIEV4Y2x1c2lvblBvbHlnb246OnNoYXBlTWFyZ2luQm91bmRzKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoc2hhcGVNYXJnaW4oKSA+PSAwKTsKLSAgICBpZiAoIXNoYXBlTWFy
Z2luKCkpCi0gICAgICAgIHJldHVybiBtX3BvbHlnb247Ci0KLSAgICBpZiAoIW1fbWFyZ2luQm91
bmRzKQotICAgICAgICBtX21hcmdpbkJvdW5kcyA9IGNvbXB1dGVTaGFwZU1hcmdpbkJvdW5kcyht
X3BvbHlnb24sIHNoYXBlTWFyZ2luKCksIG1fcG9seWdvbi5maWxsUnVsZSgpKTsKLQotICAgIHJl
dHVybiAqbV9tYXJnaW5Cb3VuZHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBnZXRWZXJ0ZXhJ
bnRlcnNlY3Rpb25WZXJ0aWNlcyhjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24s
IEZsb2F0UG9pbnQmIHByZXZWZXJ0ZXgsIEZsb2F0UG9pbnQmIHRoaXNWZXJ0ZXgsIEZsb2F0UG9p
bnQmIG5leHRWZXJ0ZXgpCi17Ci0gICAgaWYgKGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1p
blkgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWF4WSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQVNTRVJUKGludGVyc2VjdGlvbi5lZGdlICYmIGludGVyc2VjdGlvbi5lZGdl
LT5wb2x5Z29uKCkpOwotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9ICooaW50ZXJz
ZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhp
c0VkZ2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKLQotICAgIGlmICgoaW50ZXJzZWN0aW9uLnR5
cGUgPT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRoaXNFZGdlLnZl
cnRleDIoKS55KCkpKQotICAgICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4
WSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIoKS55KCkpKSkg
ewotICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS5wcmV2aW91
c0VkZ2UoKS52ZXJ0ZXhJbmRleDEoKSk7Ci0gICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZl
cnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsKLSAgICAgICAgbmV4dFZlcnRleCA9IHBv
bHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgyKCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4
MSgpKTsKLSAgICAgICAgdGhpc1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVy
dGV4SW5kZXgyKCkpOwotICAgICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlz
RWRnZS5uZXh0RWRnZSgpLnZlcnRleEluZGV4MigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGFwcGVuZEludGVydmFsWChmbG9hdCB4LCBib29s
IGluc2lkZSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQotewotICAgIGlmICgh
aW5zaWRlKQotICAgICAgICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMV0ueDIgPSB4OwotCi0gICAg
cmV0dXJuICFpbnNpZGU7Ci19Ci0KLXN0YXRpYyBib29sIGNvbXBhcmVFZGdlSW50ZXJzZWN0aW9u
WChjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24xLCBjb25zdCBFZGdlSW50ZXJz
ZWN0aW9uJiBpbnRlcnNlY3Rpb24yKQotewotICAgIGZsb2F0IHgxID0gaW50ZXJzZWN0aW9uMS5w
b2ludC54KCk7Ci0gICAgZmxvYXQgeDIgPSBpbnRlcnNlY3Rpb24yLnBvaW50LngoKTsKLSAgICBy
ZXR1cm4gKHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlvbjIudHlw
ZSA6IHgxIDwgeDI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhjb25z
dCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCi17Ci0gICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UqPiBlZGdlczsKLSAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5LCB5LCBl
ZGdlcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxFZGdlSW50ZXJzZWN0aW9uPiBp
bnRlcnNlY3Rpb25zOwotICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
Y29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZXNbaV0sIHksIGludGVyc2VjdGlvbikgJiYgaW50ZXJz
ZWN0aW9uLnR5cGUgIT0gVmVydGV4WUJvdGgpCi0gICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFw
cGVuZChpbnRlcnNlY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChpbnRlcnNlY3Rpb25zLnNpemUo
KSA8IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJl
Z2luKCksIGludGVyc2VjdGlvbnMuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50ZXJzZWN0
aW9uWCk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgaW50IHdpbmRDb3VudCA9IDA7
Ci0gICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKLQotICAgIHdoaWxlIChpbmRleCA8IGludGVyc2Vj
dGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIHRoaXNJbnRl
cnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4XTsKLSAgICAgICAgaWYgKGluZGV4ICsgMSA8
IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0
aW9uJiBuZXh0SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArIDFdOwotICAgICAg
ICAgICAgaWYgKCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSA9PSBuZXh0SW50ZXJzZWN0aW9u
LnBvaW50LngoKSkgJiYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZIHx8IHRo
aXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKSkgewotICAgICAgICAgICAgICAgIGlm
ICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gbmV4dEludGVyc2VjdGlvbi50eXBlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFNraXAgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBl
cyBhcmUgVmVydGV4TWF4WSxWZXJ0ZXhNYXhZIGFuZCBWZXJ0ZXhNaW5ZLFZlcnRleE1pblkuCi0g
ICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdo
b3NlIHR5cGVzIGFyZSBWZXJ0ZXhNaW5ZLFZlcnRleE1heFkgb3IgVmVydGV4TWF4WSxWZXJ0ZXhN
aW5ZIHdpdGggb25lIGludGVyc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRn
ZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7Ci0gICAgICAgIGJvb2wgZXZlbk9kZENyb3NzaW5n
ID0gIXdpbmRDb3VudDsKLQotICAgICAgICBpZiAocG9seWdvbi5maWxsUnVsZSgpID09IFJVTEVf
RVZFTk9ERCkgewotICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCku
eSgpID4gdGhpc0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7Ci0gICAgICAgICAgICBldmVu
T2RkQ3Jvc3NpbmcgPSBldmVuT2RkQ3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChldmVuT2RkQ3Jvc3NpbmcpIHsKLSAgICAgICAgICAgIGJvb2wgZWRnZUNy
b3NzaW5nID0gdGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbDsKLSAgICAgICAgICAgIGlm
ICghZWRnZUNyb3NzaW5nKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwcmV2VmVydGV4
OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgdGhpc1ZlcnRleDsKLSAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IG5leHRWZXJ0ZXg7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2V0VmVydGV4
SW50ZXJzZWN0aW9uVmVydGljZXModGhpc0ludGVyc2VjdGlvbiwgcHJldlZlcnRleCwgdGhpc1Zl
cnRleCwgbmV4dFZlcnRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgu
eSgpID09IHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5Z
KSA/IHByZXZWZXJ0ZXgueSgpID4geSA6IHByZXZWZXJ0ZXgueSgpIDwgeTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAocHJldlZlcnRleC55KCkgPT0geSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gbmV4dFZlcnRleC55KCkgPiB5IDogbmV4
dFZlcnRleC55KCkgPCB5OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlZGdlQ3Jvc3NpbmcpCi0gICAgICAgICAgICAgICAg
aW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpLCBpbnNp
ZGUsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICArK2luZGV4OwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhjb25zdCBGbG9h
dFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiYgcmVzdWx0KQotewotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4g
ZWRnZXM7Ci0gICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBlZGdlcykp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBGbG9hdFBvbHlnb25FZGdlICplZGdlID0gZWRnZXNbaV07Ci0gICAgICAgIGZsb2F0
IHgxOwotICAgICAgICBmbG9hdCB4MjsKLQotICAgICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEp
IHsKLSAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rp
b24pOwotICAgICAgICAgICAgeDEgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHgxID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPCBlZGdlLT52ZXJ0
ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOwot
Ci0gICAgICAgIGlmIChlZGdlLT5tYXhZKCkgPiB5MikgewotICAgICAgICAgICAgY29tcHV0ZVhJ
bnRlcnNlY3Rpb24oZWRnZSwgeTIsIGludGVyc2VjdGlvbik7Ci0gICAgICAgICAgICB4MiA9IGlu
dGVyc2VjdGlvbi5wb2ludC54KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeDIgPSAo
ZWRnZS0+dmVydGV4MSgpLnkoKSA+IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4
MSgpLngoKSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7Ci0KLSAgICAgICAgaWYgKHgxID4geDIpCi0g
ICAgICAgICAgICBzdGQ6OnN3YXAoeDEsIHgyKTsKLQotICAgICAgICBpZiAoeDIgPiB4MSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeDEsIHgyKSk7Ci0gICAg
fQotCi0gICAgc29ydEV4Y2x1c2lvbkludGVydmFscyhyZXN1bHQpOwotfQotCi12b2lkIEV4Y2x1
c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewot
ICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7Ci0g
ICAgaWYgKHBvbHlnb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5
MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdo
dDsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRl
cnZhbHM7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJ
bnRlcnZhbHMpOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2Us
IHkyWEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdlZElu
dGVydmFsczsKLSAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWElu
dGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZh
bD4gZWRnZUludGVydmFsczsKLSAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25z
KHBvbHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9u
SW50ZXJ2YWw+IGV4Y2x1ZGVkSW50ZXJ2YWxzOwotICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxz
KG1lcmdlZEludGVydmFscywgZWRnZUludGVydmFscywgZXhjbHVkZWRJbnRlcnZhbHMpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gZXhjbHVkZWRJbnRlcnZh
bHNbaV07Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGlu
dGVydmFsLngyKSk7Ci0gICAgfQotfQotCi12b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1
ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0UG9seWdv
biYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwotICAgIGlmIChwb2x5Z29uLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAg
IGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVY
SW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKLSAgICBjb21w
dXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOwotCi0g
ICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBjb21tb25JbnRlcnZhbHM7Ci0gICAgaW50ZXJz
ZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBjb21tb25J
bnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxz
OwotICAgIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHky
LCBlZGdlSW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gaW5jbHVk
ZWRJbnRlcnZhbHM7Ci0gICAgc3VidHJhY3RFeGNsdXNpb25JbnRlcnZhbHMoY29tbW9uSW50ZXJ2
YWxzLCBlZGdlSW50ZXJ2YWxzLCBpbmNsdWRlZEludGVydmFscyk7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5jbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
RXhjbHVzaW9uSW50ZXJ2YWwgaW50ZXJ2YWwgPSBpbmNsdWRlZEludGVydmFsc1tpXTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29u
c3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVk
IG9mZnNldEVkZ2VJbmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDIpCi17Ci0gICAgVmVj
dG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBpZiAoIXBvbHlnb24ub3Zl
cmxhcHBpbmdFZGdlcyhyZWN0LnkoKSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOwot
ICAgICAgICBpZiAoZWRnZS0+ZWRnZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdl
LT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChy
ZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRS
ZWN0JiByMSwgY29uc3QgRmxvYXRSZWN0JiByMikKLXsKLSAgICBpZiAocjEueSgpIDwgcjIueSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocjEueSgpID09IHIyLnkoKSkKLSAgICAg
ICAgcmV0dXJuIHIxLngoKSA8IHIyLngoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
RXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRV
bml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbElu
dGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAotewotICAgIGZsb2F0IG1pbklu
dGVydmFsVG9wID0gbWluTG9naWNhbEludGVydmFsVG9wOwotICAgIGZsb2F0IG1pbkludGVydmFs
SGVpZ2h0ID0gbWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKLSAgICBmbG9hdCBtaW5J
bnRlcnZhbFdpZHRoID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOwotCi0gICAgY29u
c3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAgY29u
c3QgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcG9seWdvbi5ib3VuZGluZ0JveCgpOwotICAgIGlm
IChtaW5JbnRlcnZhbFdpZHRoID4gYm91bmRpbmdCb3gud2lkdGgoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWlu
SW50ZXJ2YWxUb3ApOwotICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7
Ci0KLSAgICBpZiAobWF4WSA+IGJvdW5kaW5nQm94Lm1heFkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBw
b2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMobWluSW50ZXJ2YWxUb3AsIGJvdW5kaW5nQm94Lm1heFko
KSwgZWRnZXMpOwotCi0gICAgZmxvYXQgZHggPSBtaW5JbnRlcnZhbFdpZHRoIC8gMjsKLSAgICBm
bG9hdCBkeSA9IG1pbkludGVydmFsSGVpZ2h0IC8gMjsKLSAgICBWZWN0b3I8T2Zmc2V0UG9seWdv
bkVkZ2U+IG9mZnNldEVkZ2VzOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2Vz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAq
KGVkZ2VzW2ldKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJl
dmlvdXNFZGdlKCkudmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgx
ID0gZWRnZS52ZXJ0ZXgxKCk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBl
ZGdlLnZlcnRleDIoKTsKLSAgICAgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRF
ZGdlQnVmZmVyOwotCi0gICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA+IHZlcnRleDEueSgpID8gdmVy
dGV4Mi54KCkgPj0gdmVydGV4MS54KCkgOiB2ZXJ0ZXgxLngoKSA+PSB2ZXJ0ZXgyLngoKSkgewot
ICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRn
ZSwgRmxvYXRTaXplKGR4LCAtZHkpKSk7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFw
cGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBv
bHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZShkeCwgZHkpKSk7Ci0gICAgICAgICAgICBvZmZzZXRF
ZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCAt
ZHkpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNSZWZsZXhWZXJ0ZXgodmVydGV4MCwg
dmVydGV4MSwgdmVydGV4MikpIHsKLSAgICAgICAgICAgIGlmICh2ZXJ0ZXgyLngoKSA8PSB2ZXJ0
ZXgxLngoKSAmJiB2ZXJ0ZXgwLngoKSA8PSB2ZXJ0ZXgxLngoKSkKLSAgICAgICAgICAgICAgICBv
ZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNp
emUoZHgsIC1keSksIEZsb2F0U2l6ZShkeCwgZHkpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2
ZXJ0ZXgyLngoKSA+PSB2ZXJ0ZXgxLngoKSAmJiB2ZXJ0ZXgwLngoKSA+PSB2ZXJ0ZXgxLngoKSkK
LSAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRn
ZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCAtZHkpLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKLSAg
ICAgICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0ZXgwLnkoKSA8
PSB2ZXJ0ZXgxLnkoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChP
ZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCBkeSksIEZsb2F0U2l6ZShk
eCwgZHkpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+PSB2ZXJ0ZXgxLnko
KSAmJiB2ZXJ0ZXgwLnkoKSA+PSB2ZXJ0ZXgxLnkoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRF
ZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4
LCAtZHkpLCBGbG9hdFNpemUoZHgsIC1keSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBvZmZzZXRFZGdlQnVmZmVyLnNpemUoKTsgKytqKQotICAgICAg
ICAgICAgaWYgKG9mZnNldEVkZ2VCdWZmZXJbal0ubWF4WSgpID49IG1pblkpCi0gICAgICAgICAg
ICAgICAgb2Zmc2V0RWRnZXMuYXBwZW5kKG9mZnNldEVkZ2VCdWZmZXJbal0pOwotICAgIH0KLQot
ICAgIG9mZnNldEVkZ2VzLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShwb2x5Z29uLCBtaW5JbnRl
cnZhbFRvcCwgRmxvYXRTaXplKDAsIGR5KSkpOwotCi0gICAgRmxvYXRQb2ludCBvZmZzZXRFZGdl
c0ludGVyc2VjdGlvbjsKLSAgICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OwotICAgIGJvb2wgZmly
c3RGaXRGb3VuZCA9IGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9mZnNl
dEVkZ2VzLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsg
MTsgaiA8IG9mZnNldEVkZ2VzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0
RWRnZXNbaV0uaW50ZXJzZWN0aW9uKG9mZnNldEVkZ2VzW2pdLCBvZmZzZXRFZGdlc0ludGVyc2Vj
dGlvbikpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHBvdGVudGlhbEZpcnN0Rml0TG9j
YXRpb24ob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueCgpIC0gZHgsIG9mZnNldEVkZ2VzSW50ZXJz
ZWN0aW9uLnkoKSAtIGR5KTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcG90ZW50aWFsRmly
c3RGaXRSZWN0KHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFNp
emUpOwotICAgICAgICAgICAgICAgIGlmICgob2Zmc2V0RWRnZXNbaV0uYmFzaXMoKSA9PSBPZmZz
ZXRQb2x5Z29uRWRnZTo6TGluZVRvcAotICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXRFZGdl
c1tqXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCi0gICAgICAgICAgICAg
ICAgICAgIHx8IHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ueSgpID49IG1pbkludGVydmFsVG9w
KQotICAgICAgICAgICAgICAgICAgICAmJiAoIWZpcnN0Rml0Rm91bmQgfHwgYWJvdmVPclRvVGhl
TGVmdChwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIGZpcnN0Rml0UmVjdCkpCi0gICAgICAgICAgICAg
ICAgICAgICYmIHBvbHlnb24uY29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCi0gICAg
ICAgICAgICAgICAgICAgICYmIGZpcnN0Rml0UmVjdEluUG9seWdvbihwb2x5Z29uLCBwb3RlbnRp
YWxGaXJzdEZpdFJlY3QsIG9mZnNldEVkZ2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdlc1tq
XS5lZGdlSW5kZXgoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRGb3VuZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0UmVjdCA9IHBvdGVudGlhbEZpcnN0Rml0
UmVjdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoZmlyc3RGaXRGb3VuZCkKLSAgICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0
VW5pdChmaXJzdEZpdFJlY3QueSgpKTsKLSAgICByZXR1cm4gZmlyc3RGaXRGb3VuZDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25Qb2x5Z29uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ODU1M2FiMjFkMDY0
NDFiZWJhMzAxOWFjMGI5YTUyODZhNWZlZTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHln
b24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0g
KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNs
dXNpb25Qb2x5Z29uX2gKLSNkZWZpbmUgRXhjbHVzaW9uUG9seWdvbl9oCi0KLSNpbmNsdWRlICJF
eGNsdXNpb25JbnRlcnZhbC5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRQb2x5Z29uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgT2Zmc2V0
UG9seWdvbkVkZ2UgOiBwdWJsaWMgVmVydGV4UGFpciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBCYXNp
cyB7Ci0gICAgICAgIEVkZ2UsCi0gICAgICAgIFZlcnRleCwKLSAgICAgICAgTGluZVRvcAotICAg
IH07Ci0KLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdl
LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLSAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0
ZXgxKCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zm
c2V0KQotICAgICAgICAsIG1fZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkpCi0gICAgICAgICwg
bV9iYXNpcyhFZGdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25z
dCBGbG9hdFBvaW50JiByZWZsZXhWZXJ0ZXgsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MSwgY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQyKQotICAgICAgICA6IG1fdmVydGV4MShyZWZsZXhWZXJ0ZXgg
KyBvZmZzZXQxKQotICAgICAgICAsIG1fdmVydGV4MihyZWZsZXhWZXJ0ZXggKyBvZmZzZXQyKQot
ICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQotICAgICAgICAsIG1fYmFzaXMoVmVydGV4KQotICAg
IHsKLSAgICB9Ci0KLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBv
bHlnb24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQpCi0gICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgp
LngoKSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKLSAgICAgICAgLCBtX3ZlcnRl
eDIoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50
ZXJ2YWxUb3ApICsgb2Zmc2V0KQotICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQotICAgICAgICAs
IG1fYmFzaXMoTGluZVRvcCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCBGbG9h
dFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgxOyB9Ci0g
ICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV92ZXJ0ZXgyOyB9Ci0gICAgaW50IGVkZ2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRnZUluZGV4OyB9Ci0gICAgQmFzaXMgYmFzaXMoKSBjb25zdCB7IHJldHVybiBtX2Jhc2lzOyB9
Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRQb2ludCBtX3ZlcnRleDE7Ci0gICAgRmxvYXRQb2ludCBt
X3ZlcnRleDI7Ci0gICAgaW50IG1fZWRnZUluZGV4OwotICAgIEJhc2lzIG1fYmFzaXM7Ci19Owot
Ci1jbGFzcyBFeGNsdXNpb25Qb2x5Z29uIDogcHVibGljIEV4Y2x1c2lvblNoYXBlIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShFeGNsdXNpb25Qb2x5Z29uKTsKLXB1YmxpYzoKLSAgICBFeGNs
dXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdp
bmRSdWxlIGZpbGxSdWxlKQotICAgICAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAgICAgLCBt
X3BvbHlnb24odmVydGljZXMsIGZpbGxSdWxlKQotICAgICAgICAsIG1fbWFyZ2luQm91bmRzKG51
bGxwdHIpCi0gICAgICAgICwgbV9wYWRkaW5nQm91bmRzKG51bGxwdHIpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFy
Z2luQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hh
cGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91bmRzKCkuYm91bmRpbmdCb3goKSk7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
cG9seWdvbi5pc0VtcHR5KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZh
bHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21l
bnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50
ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBT
ZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1
ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBj
b25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29u
c3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZU1h
cmdpbkJvdW5kcygpIGNvbnN0OwotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVQYWRkaW5n
Qm91bmRzKCkgY29uc3Q7Ci0KLSAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOwotICAgIG11dGFi
bGUgT3duUHRyPEZsb2F0UG9seWdvbj4gbV9tYXJnaW5Cb3VuZHM7Ci0gICAgbXV0YWJsZSBPd25Q
dHI8RmxvYXRQb2x5Z29uPiBtX3BhZGRpbmdCb3VuZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFeGNsdXNpb25Qb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ2YjUyMDI2ZThhMWUxNmNmNGUzZjliNmM5ZDJhYjFkMjVmMGVmYmQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICog
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25S
ZWN0YW5nbGUuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5
LCBmbG9hdCByeCwgZmxvYXQgcnkpCi17Ci0gICAgQVNTRVJUKHJ5ID4gMCk7Ci0gICAgcmV0dXJu
IHJ4ICogc3FydCgxIC0gKHkgKiB5KSAvIChyeSAqIHJ5KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
ZmxvYXQgZWxsaXBzZVlJbnRlcmNlcHQoZmxvYXQgeCwgZmxvYXQgcngsIGZsb2F0IHJ5KQotewot
ICAgIEFTU0VSVChyeCA+IDApOwotICAgIHJldHVybiByeSAqIHNxcnQoMSAtICh4ICogeCkgLyAo
cnggKiByeCkpOwotfQotCi1GbG9hdFJvdW5kZWRSZWN0IEZsb2F0Um91bmRlZFJlY3Q6OnBhZGRp
bmdCb3VuZHMoZmxvYXQgcGFkZGluZykgY29uc3QKLXsKLSAgICBBU1NFUlQocGFkZGluZyA+PSAw
KTsKLSAgICBpZiAoIXBhZGRpbmcgfHwgaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0KLSAgICBmbG9hdCBib3VuZHNYID0geCgpICsgc3RkOjptaW4od2lkdGgoKSAvIDIsIHBhZGRp
bmcpOwotICAgIGZsb2F0IGJvdW5kc1kgPSB5KCkgKyBzdGQ6Om1pbihoZWlnaHQoKSAvIDIsIHBh
ZGRpbmcpOwotICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gc3RkOjptYXgoMC4wZiwgd2lkdGgoKSAt
IHBhZGRpbmcgKiAyKTsKLSAgICBmbG9hdCBib3VuZHNIZWlnaHQgPSBzdGQ6Om1heCgwLjBmLCBo
ZWlnaHQoKSAtIHBhZGRpbmcgKiAyKTsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gc3RkOjpt
YXgoMC4wZiwgcngoKSAtIHBhZGRpbmcpOwotICAgIGZsb2F0IGJvdW5kc1JhZGl1c1kgPSBzdGQ6
Om1heCgwLjBmLCByeSgpIC0gcGFkZGluZyk7Ci0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Qo
RmxvYXRSZWN0KGJvdW5kc1gsIGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBG
bG9hdFNpemUoYm91bmRzUmFkaXVzWCwgYm91bmRzUmFkaXVzWSkpOwotfQotCi1GbG9hdFJvdW5k
ZWRSZWN0IEZsb2F0Um91bmRlZFJlY3Q6Om1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1hcmdpbiA+PSAwKTsKLSAgICBpZiAoIW1hcmdpbikKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotCi0gICAgZmxvYXQgYm91bmRzWCA9IHgoKSAtIG1hcmdpbjsKLSAgICBm
bG9hdCBib3VuZHNZID0geSgpIC0gbWFyZ2luOwotICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gd2lk
dGgoKSArIG1hcmdpbiAqIDI7Ci0gICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gaGVpZ2h0KCkgKyBt
YXJnaW4gKiAyOwotICAgIGZsb2F0IGJvdW5kc1JhZGl1c1ggPSByeCgpICsgbWFyZ2luOwotICAg
IGZsb2F0IGJvdW5kc1JhZGl1c1kgPSByeSgpICsgbWFyZ2luOwotICAgIHJldHVybiBGbG9hdFJv
dW5kZWRSZWN0KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRz
SGVpZ2h0KSwgRmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKLX0KLQot
RmxvYXRQb2ludCBGbG9hdFJvdW5kZWRSZWN0Ojpjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9h
dCB3aWR0aEF0SW50ZXJjZXB0KSBjb25zdAotewotICAgIGZsb2F0IHhpID0gKHdpZHRoKCkgLSB3
aWR0aEF0SW50ZXJjZXB0KSAvIDI7Ci0gICAgZmxvYXQgeWkgPSByeSgpIC0gZWxsaXBzZVlJbnRl
cmNlcHQocngoKSAtIHhpLCByeCgpLCByeSgpKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludCh4aSwg
eWkpOwotfQotCi1GbG9hdFJvdW5kZWRSZWN0IEV4Y2x1c2lvblJlY3RhbmdsZTo6c2hhcGVQYWRk
aW5nQm91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0Jv
dW5kcykgewotICAgICAgICBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgPSB0cnVlOwot
ICAgICAgICBtX3BhZGRpbmdCb3VuZHMgPSBtX2JvdW5kcy5wYWRkaW5nQm91bmRzKHNoYXBlUGFk
ZGluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fcGFkZGluZ0JvdW5kczsKLX0KLQotRmxvYXRS
b3VuZGVkUmVjdCBFeGNsdXNpb25SZWN0YW5nbGU6OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzKSB7Ci0gICAgICAgIG1f
aGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJnaW5Cb3Vu
ZHMgPSBtX2JvdW5kcy5tYXJnaW5Cb3VuZHMoc2hhcGVNYXJnaW4oKSk7Ci0gICAgfQotICAgIHJl
dHVybiBtX21hcmdpbkJvdW5kczsKLX0KLQotdm9pZCBFeGNsdXNpb25SZWN0YW5nbGU6OmdldEV4
Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlTWFyZ2luQm91bmRzKCk7Ci0gICAgaWYgKGJvdW5kcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsK
LSAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgaWYgKHky
IDwgYm91bmRzLnkoKSB8fCB5MSA+PSBib3VuZHMubWF4WSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmbG9hdCB4MSA9IGJvdW5kcy54KCk7Ci0gICAgZmxvYXQgeDIgPSBib3VuZHMubWF4WCgp
OwotCi0gICAgaWYgKGJvdW5kcy5yeSgpID4gMCkgewotICAgICAgICBpZiAoeTIgPCBib3VuZHMu
eSgpICsgYm91bmRzLnJ5KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0geTIgLSBib3VuZHMu
eSgpIC0gYm91bmRzLnJ5KCk7Ci0gICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJj
ZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgeDEgPSBib3Vu
ZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKLSAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgo
KSAtIGJvdW5kcy5yeCgpICsgeGk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeTEgPiBib3VuZHMubWF4
WSgpIC0gYm91bmRzLnJ5KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0gIHkxIC0gKGJvdW5k
cy5tYXhZKCkgLSBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VY
SW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgeDEg
PSBib3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKLSAgICAgICAgICAgIHgyID0gYm91bmRz
Lm1heFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1
bHQuYXBwZW5kKExpbmVTZWdtZW50KHgxLCB4MikpOwotfQotCi12b2lkIEV4Y2x1c2lvblJlY3Rh
bmdsZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAg
aWYgKGJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0g
bG9naWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0Owot
Ci0gICAgaWYgKHkxIDwgYm91bmRzLnkoKSB8fCB5MiA+IGJvdW5kcy5tYXhZKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0IHgxID0gYm91bmRzLngoKTsKLSAgICBmbG9hdCB4MiA9IGJv
dW5kcy5tYXhYKCk7Ci0KLSAgICBpZiAoYm91bmRzLnJ5KCkgPiAwKSB7Ci0gICAgICAgIGJvb2wg
eTFJbnRlcmNlcHRzQ29ybmVyID0geTEgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCk7Ci0gICAg
ICAgIGJvb2wgeTJJbnRlcmNlcHRzQ29ybmVyID0geTIgPiBib3VuZHMubWF4WSgpIC0gYm91bmRz
LnJ5KCk7Ci0gICAgICAgIGZsb2F0IHhpID0gMDsKLQotICAgICAgICBpZiAoeTFJbnRlcmNlcHRz
Q29ybmVyICYmIHkySW50ZXJjZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgaWYgICh5MSA8IGJv
dW5kcy5oZWlnaHQoKSArIDIgKiBib3VuZHMueSgpIC0geTIpIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICAgICAgICAg
IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0gKGJv
dW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNl
WEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIGZs
b2F0IHlpID0geTEgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7Ci0gICAgICAgICAgICB4aSA9
IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKHkySW50ZXJjZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgZmxvYXQgeWkg
PSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIHhpID0g
ZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyIHx8IHkySW50ZXJjZXB0c0Nvcm5l
cikgewotICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKLSAg
ICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KHgxLCB4MikpOwotfQot
Ci1ib29sIEV4Y2x1c2lvblJlY3RhbmdsZTo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRv
cChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWlu
TG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAotewotICAgIGZs
b2F0IG1pbkludGVydmFsVG9wID0gbWluTG9naWNhbEludGVydmFsVG9wOwotICAgIGZsb2F0IG1p
bkludGVydmFsSGVpZ2h0ID0gbWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKLSAgICBm
bG9hdCBtaW5JbnRlcnZhbFdpZHRoID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOwot
Ci0gICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRz
KCk7Ci0gICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkgfHwgbWluSW50ZXJ2YWxXaWR0aCA+IGJvdW5k
cy53aWR0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBtaW5ZID0gc3Rk
OjptYXgoYm91bmRzLnkoKSwgbWluSW50ZXJ2YWxUb3ApOwotICAgIGZsb2F0IG1heFkgPSBtaW5Z
ICsgbWluSW50ZXJ2YWxIZWlnaHQ7Ci0KLSAgICBpZiAobWF4WSA+IGJvdW5kcy5tYXhZKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5l
ciA9IG1pblkgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCk7Ci0gICAgYm9vbCBpbnRlcnZhbE92
ZXJsYXBzTWF4Q29ybmVyID0gbWF4WSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKLQot
ICAgIGlmICghaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciAmJiAhaW50ZXJ2YWxPdmVybGFwc01h
eENvcm5lcikgewotICAgICAgICByZXN1bHQgPSBtaW5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQo
KSAvIDI7Ci0gICAgYm9vbCBtaW5Db3JuZXJEZWZpbmVzWCA9IGZhYnMoY2VudGVyWSAtIG1pblkp
ID4gZmFicyhjZW50ZXJZIC0gbWF4WSk7Ci0gICAgYm9vbCBpbnRlcnZhbEZpdHNXaXRoaW5Db3Ju
ZXJzID0gbWluSW50ZXJ2YWxXaWR0aCArIDIgKiBib3VuZHMucngoKSA8PSBib3VuZHMud2lkdGgo
KTsKLSAgICBGbG9hdFBvaW50IGNvcm5lckludGVyY2VwdCA9IGJvdW5kcy5jb3JuZXJJbnRlcmNl
cHRGb3JXaWR0aChtaW5JbnRlcnZhbFdpZHRoKTsKLQotICAgIGlmIChpbnRlcnZhbE92ZXJsYXBz
TWluQ29ybmVyICYmICghaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciB8fCBtaW5Db3JuZXJEZWZp
bmVzWCkpIHsKLSAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgYm91bmRz
LnkoKSArIGNvcm5lckludGVyY2VwdC55KCkgPCBtaW5ZKSB7Ci0gICAgICAgICAgICByZXN1bHQg
PSBtaW5ZOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1pbkludGVydmFsSGVpZ2h0IDwgYm91bmRzLmhlaWdodCgpIC0gKDIgKiBjb3JuZXJJbnRlcmNl
cHQueSgpKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChib3VuZHMu
eSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyICYmICgh
aW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciB8fCAhbWluQ29ybmVyRGVmaW5lc1gpKSB7Ci0gICAg
ICAgIGlmIChpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8IG1pblkgPD0gIGJvdW5kcy5tYXhZ
KCkgLSBjb3JuZXJJbnRlcmNlcHQueSgpIC0gbWluSW50ZXJ2YWxIZWlnaHQpIHsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IG1pblk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDlmZGFjMTYzYzEyZWU3M2QyYmU4OTNlZjMxODhiZDMy
NzdjMmEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaAorKysgL2Rldi9udWxs
CkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICog
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblJlY3RhbmdsZV9oCi0j
ZGVmaW5lIEV4Y2x1c2lvblJlY3RhbmdsZV9oCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFJvdW5k
ZWRSZWN0IDogcHVibGljIEZsb2F0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRmxvYXRSb3VuZGVkUmVj
dCgpIHsgfQotICAgIEZsb2F0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNv
bnN0IEZsb2F0U2l6ZSYgcmFkaWkpCi0gICAgICAgIDogRmxvYXRSZWN0KGJvdW5kcykKLSAgICAg
ICAgLCBtX3JhZGlpKHJhZGlpKQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCByeCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFkaWkud2lkdGgoKTsgfQotICAgIGZsb2F0IHJ5KCkgY29uc3QgeyByZXR1
cm4gbV9yYWRpaS5oZWlnaHQoKTsgfQotICAgIEZsb2F0Um91bmRlZFJlY3QgbWFyZ2luQm91bmRz
KGZsb2F0IG1hcmdpbikgY29uc3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBwYWRkaW5nQm91bmRz
KGZsb2F0IHBhZGRpbmcpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0Rm9y
V2lkdGgoZmxvYXQgd2lkdGgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZsb2F0U2l6ZSBtX3Jh
ZGlpOwotfTsKLQotY2xhc3MgRXhjbHVzaW9uUmVjdGFuZ2xlIDogcHVibGljIEV4Y2x1c2lvblNo
YXBlIHsKLXB1YmxpYzoKLSAgICBFeGNsdXNpb25SZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiBi
b3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCi0gICAgICAgIDogRXhjbHVzaW9uU2hhcGUo
KQotICAgICAgICAsIG1fYm91bmRzKGJvdW5kcywgcmFkaWkpCi0gICAgICAgICwgbV9oYXZlSW5p
dGlhbGl6ZWRNYXJnaW5Cb3VuZHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRQ
YWRkaW5nQm91bmRzKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIExheW91dFJl
Y3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpKTsgfQotICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3Vu
ZHMoKSk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZElu
dGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVk
ZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGZpcnN0
SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxU
b3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQm
KSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBl
TWFyZ2luQm91bmRzKCkgY29uc3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZVBhZGRpbmdC
b3VuZHMoKSBjb25zdDsKLQotICAgIEZsb2F0Um91bmRlZFJlY3QgbV9ib3VuZHM7Ci0gICAgbXV0
YWJsZSBGbG9hdFJvdW5kZWRSZWN0IG1fbWFyZ2luQm91bmRzOwotICAgIG11dGFibGUgRmxvYXRS
b3VuZGVkUmVjdCBtX3BhZGRpbmdCb3VuZHM7Ci0gICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRp
YWxpemVkTWFyZ2luQm91bmRzIDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6
ZWRQYWRkaW5nQm91bmRzIDogMTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEV4Y2x1c2lvblJlY3RhbmdsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlNjQwZGI1
ZDc2MTc0NGE0YTAxYjY4MDViODVjNzhjYmIwNjdkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQot
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKLQotI2luY2x1ZGUgIkJh
c2ljU2hhcGVGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCi0jaW5j
bHVkZSAiRXhjbHVzaW9uUmVjdGFuZ2xlLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5j
bHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiV2luZFJ1bGUuaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBQYXNzT3du
UHRyPEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoY29uc3QgRmxvYXRS
ZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCi17Ci0gICAgQVNTRVJUKGJvdW5k
cy53aWR0aCgpID49IDAgJiYgYm91bmRzLmhlaWdodCgpID49IDAgJiYgcmFkaWkud2lkdGgoKSA+
PSAwICYmIHJhZGlpLmhlaWdodCgpID49IDApOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhj
bHVzaW9uUmVjdGFuZ2xlKGJvdW5kcywgcmFkaWkpKTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8
RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZXIsIGZsb2F0IHJhZGl1cykKLXsKLSAgICBBU1NFUlQocmFkaXVzID49IDApOwotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdChjZW50ZXIueCgp
IC0gcmFkaXVzLCBjZW50ZXIueSgpIC0gcmFkaXVzLCByYWRpdXMqMiwgcmFkaXVzKjIpLCBGbG9h
dFNpemUocmFkaXVzLCByYWRpdXMpKSk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lv
blNoYXBlPiBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwg
Y29uc3QgRmxvYXRTaXplJiByYWRpaSkKLXsKLSAgICBBU1NFUlQocmFkaWkud2lkdGgoKSA+PSAw
ICYmIHJhZGlpLmhlaWdodCgpID49IDApOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVz
aW9uUmVjdGFuZ2xlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaWkud2lkdGgoKSwgY2VudGVy
LnkoKSAtIHJhZGlpLmhlaWdodCgpLCByYWRpaS53aWR0aCgpKjIsIHJhZGlpLmhlaWdodCgpKjIp
LCByYWRpaSkpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRl
RXhjbHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2Vz
LCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lv
blBvbHlnb24odmVydGljZXMsIGZpbGxSdWxlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRS
ZWN0IHBoeXNpY2FsUmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxv
Z2ljYWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiByZWN0Owot
ICAgIGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QocmVjdC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSByZWN0Lm1heFgo
KSwgcmVjdC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpKTsKLSAgICByZXR1cm4gcmVjdC50cmFuc3Bv
c2VkUmVjdCgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRv
TG9naWNhbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIHBvaW50OwotICAgIGlmIChpc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBGbG9hdFBv
aW50KHBvaW50LnkoKSwgbG9naWNhbEJveEhlaWdodCAtIHBvaW50LngoKSk7Ci0gICAgcmV0dXJu
IHBvaW50LnRyYW5zcG9zZWRQb2ludCgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBw
aHlzaWNhbFNpemVUb0xvZ2ljYWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpKQotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICByZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6
ZSgpOwotfQotCi1QYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3Jl
YXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZSogYmFzaWNTaGFwZSwgY29uc3QgTGF5
b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMZW5ndGgg
bWFyZ2luLCBMZW5ndGggcGFkZGluZykKLXsKLSAgICBBU1NFUlQoYmFzaWNTaGFwZSk7Ci0KLSAg
ICBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKTsKLSAgICBmbG9hdCBib3hXaWR0aCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/
IGxvZ2ljYWxCb3hTaXplLndpZHRoKCkgOiBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKTsKLSAgICBm
bG9hdCBib3hIZWlnaHQgPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94U2l6ZS5o
ZWlnaHQoKSA6IGxvZ2ljYWxCb3hTaXplLndpZHRoKCk7Ci0gICAgT3duUHRyPEV4Y2x1c2lvblNo
YXBlPiBleGNsdXNpb25TaGFwZTsKLQotICAgIHN3aXRjaCAoYmFzaWNTaGFwZS0+dHlwZSgpKSB7
Ci0KLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVSZWN0YW5nbGVUeXBlOiB7Ci0gICAg
ICAgIGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcygKLSAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT54KCks
IGJveFdpZHRoKSwKLSAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT55
KCksIGJveEhlaWdodCksCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3Rhbmds
ZS0+d2lkdGgoKSwgYm94V2lkdGgpLAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChy
ZWN0YW5nbGUtPmhlaWdodCgpLCBib3hIZWlnaHQpKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1hM
ZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1
c1lMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKLSAgICAgICAgRmxvYXRTaXpl
IGNvcm5lclJhZGlpKAotICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8g
MCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAotICAgICAg
ICAgICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5n
dGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2dpY2Fs
Qm91bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVp
Z2h0KCksIHdyaXRpbmdNb2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4
Y2x1c2lvblJlY3RhbmdsZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29y
bmVyUmFkaWksIHdyaXRpbmdNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNh
c2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUNpcmNsZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFz
aWNTaGFwZUNpcmNsZSogY2lyY2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUNpcmNs
ZSo+KGJhc2ljU2hhcGUpOwotICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChjaXJjbGUtPmNlbnRlclgoKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9hdCBjZW50ZXJZ
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKLSAg
ICAgICAgZmxvYXQgcmFkaXVzID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPnJhZGl1cygp
LCBzdGQ6Om1pbihib3hIZWlnaHQsIGJveFdpZHRoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9n
aWNhbENlbnRlciA9IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBj
ZW50ZXJZKSwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLQotICAgICAg
ICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShsb2dpY2FsQ2VudGVyLCBy
YWRpdXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJh
c2ljU2hhcGVFbGxpcHNlVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSog
ZWxsaXBzZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4oYmFzaWNTaGFw
ZSk7Ci0gICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2Ut
PmNlbnRlclgoKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7Ci0gICAgICAgIGZsb2F0
IHJhZGl1c1ggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1goKSwgYm94V2lk
dGgpOwotICAgICAgICBmbG9hdCByYWRpdXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNl
LT5yYWRpdXNZKCksIGJveEhlaWdodCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRl
ciA9IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwg
bG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgRmxvYXRTaXpl
IGxvZ2ljYWxSYWRpaSA9IHBoeXNpY2FsU2l6ZVRvTG9naWNhbChGbG9hdFNpemUocmFkaXVzWCwg
cmFkaXVzWSksIHdyaXRpbmdNb2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0
ZUV4Y2x1c2lvbkVsbGlwc2UobG9naWNhbENlbnRlciwgbG9naWNhbFJhZGlpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUG9seWdvblR5
cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZVBvbHlnb24qIHBvbHlnb24gPSBzdGF0aWNf
Y2FzdDxjb25zdCBCYXNpY1NoYXBlUG9seWdvbio+KGJhc2ljU2hhcGUpOwotICAgICAgICBjb25z
dCBWZWN0b3I8TGVuZ3RoPiYgdmFsdWVzID0gcG9seWdvbi0+dmFsdWVzKCk7Ci0gICAgICAgIHNp
emVfdCB2YWx1ZXNTaXplID0gdmFsdWVzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWVz
U2l6ZSAlIDIpKTsKLSAgICAgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2Vz
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50Pih2YWx1ZXNTaXplIC8gMikpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzU2l6ZTsgaSArPSAyKSB7Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50IHZlcnRleCgKLSAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9y
TGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgpLAotICAgICAgICAgICAgICAgIGZsb2F0VmFs
dWVGb3JMZW5ndGgodmFsdWVzLmF0KGkgKyAxKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgICAgICAo
KnZlcnRpY2VzKVtpIC8gMl0gPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKHZlcnRleCwgbG9naWNh
bEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4
Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUG9seWdvbih2ZXJ0aWNlcy5yZWxlYXNlKCks
IHBvbHlnb24tPndpbmRSdWxlKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNl
IEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZVR5cGU6IHsKLSAgICAgICAgY29u
c3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgZmxvYXQg
bGVmdCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5sZWZ0KCksIGJveFdpZHRoKTsK
LSAgICAgICAgZmxvYXQgdG9wID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnRvcCgp
LCBib3hIZWlnaHQpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAotICAgICAgICAgICAgbGVm
dCwKLSAgICAgICAgICAgIHRvcCwKLSAgICAgICAgICAgIGJveFdpZHRoIC0gbGVmdCAtIGZsb2F0
VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5yaWdodCgpLCBib3hXaWR0aCksCi0gICAgICAgICAg
ICBib3hIZWlnaHQgLSB0b3AgLSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+Ym90dG9t
KCksIGJveEhlaWdodCkpOwotICAgICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3Rhbmds
ZS0+Y29ybmVyUmFkaXVzWCgpOwotICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3Rh
bmdsZS0+Y29ybmVyUmFkaXVzWSgpOwotICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCi0g
ICAgICAgICAgICByYWRpdXNYTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZv
ckxlbmd0aChyYWRpdXNYTGVuZ3RoLCBib3hXaWR0aCksCi0gICAgICAgICAgICByYWRpdXNZTGVu
Z3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3Ro
LCBib3hIZWlnaHQpKTsKLSAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNh
bFJlY3RUb0xvZ2ljYWwoYm91bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01v
ZGUpOwotCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xl
KGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3JpdGlu
Z01vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgZXhjbHVzaW9uU2hhcGUtPm1fd3Jp
dGluZ01vZGUgPSB3cml0aW5nTW9kZTsKLSAgICBleGNsdXNpb25TaGFwZS0+bV9tYXJnaW4gPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKG1hcmdpbiwgMCk7Ci0gICAgZXhjbHVzaW9uU2hhcGUtPm1fcGFk
ZGluZyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocGFkZGluZywgMCk7Ci0KLSAgICByZXR1cm4gZXhj
bHVzaW9uU2hhcGUucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlM2Q1MWYwNDE2ODIzMjE4MjE1MmMzMjgwM2ZhNzNmYTQ4OWQ0NTFkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICog
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICog
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVfaAotI2RlZmluZSBFeGNsdXNpb25TaGFw
ZV9oCi0KLSNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIK
LSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBM
aW5lU2VnbWVudCB7Ci0gICAgTGluZVNlZ21lbnQoZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxv
Z2ljYWxSaWdodCkKLSAgICAgICAgOiBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKLSAgICAgICAg
LCBsb2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQotICAgIHsKLSAgICB9Ci0KLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0OwotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0OwotfTsKLQotdHlw
ZWRlZiBWZWN0b3I8TGluZVNlZ21lbnQ+IFNlZ21lbnRMaXN0OwotCi0KLS8vIEEgcmVwcmVzZW50
YXRpb24gb2YgYSBCYXNpY1NoYXBlIHRoYXQgZW5hYmxlcyBsYXlvdXQgY29kZSB0byBkZXRlcm1p
bmUgaG93IHRvIGJyZWFrIGEgbGluZSB1cCBpbnRvIHNlZ21lbnRzCi0vLyB0aGF0IHdpbGwgZml0
IHdpdGhpbiBvciBhcm91bmQgYSBzaGFwZS4gVGhlIGxpbmUgaXMgZGVmaW5lZCBieSBhIHBhaXIg
b2YgbG9naWNhbCBZIGNvb3JkaW5hdGVzIGFuZCB0aGUKLS8vIGNvbXB1dGVkIHNlZ21lbnRzIGFy
ZSByZXR1cm5lZCBhcyBwYWlycyBvZiBsb2dpY2FsIFggY29vcmRpbmF0ZXMuIFRoZSBCYXNpY1No
YXBlIGl0c2VsZiBpcyBkZWZpbmVkIGluCi0vLyBwaHlzaWNhbCBjb29yZGluYXRlcy4KLQotY2xh
c3MgRXhjbHVzaW9uU2hhcGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1
c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlKiwgY29uc3Qg
TGF5b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBM
ZW5ndGggcGFkZGluZyk7Ci0KLSAgICB2aXJ0dWFsIH5FeGNsdXNpb25TaGFwZSgpIHsgfQotCi0g
ICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRp
bmdCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVu
aXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50
ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgot
ICAgIGZsb2F0IHNoYXBlTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAgICBm
bG9hdCBzaGFwZVBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0KLQotcHJpdmF0
ZToKLSAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOwotICAgIGZsb2F0IG1fbWFyZ2luOwot
ICAgIGZsb2F0IG1fcGFkZGluZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEV4Y2x1c2lvblNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZDNl
ZTZiMDFiY2VjZDI1ZDczOWViNzkyMDc3NmVjYjMzMzlmMmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5mby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwot
ICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAq
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNs
dXNpb25TaGFwZUluZm8uaCIKLQotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLQotI2luY2x1
ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKLSNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJU
eXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBj
b25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwg
TGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWNvbnN0IEV4Y2x1c2lvblNoYXBlKiBF
eGNsdXNpb25TaGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVydmFsR2V0dGVy
Pjo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEV4Y2x1c2lvblNoYXBlKiBleGNs
dXNpb25TaGFwZSA9IG1fc2hhcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBleGNsdXNpb25TaGFw
ZTsKLQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSAobV9yZW5kZXJlci0+
c3R5bGUoKS0+KnNoYXBlR2V0dGVyKSgpOwotICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gKHNoYXBl
VmFsdWUgJiYgc2hhcGVWYWx1ZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBl
KSA/IHNoYXBlVmFsdWUtPnNoYXBlKCkgOiAwOwotCi0gICAgQVNTRVJUKHNoYXBlKTsKLQotICAg
IG1fc2hhcGUgPSBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUoc2hhcGUsIExh
eW91dFNpemUobV9zaGFwZUxvZ2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWlnaHQpLCBtX3Jl
bmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFw
ZU1hcmdpbigpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7Ci0gICAgQVNT
RVJUKG1fc2hhcGUpOwotICAgIHJldHVybiBtX3NoYXBlLmdldCgpOwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFw
ZUdldHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlciko
TGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWJvb2wgRXhjbHVz
aW9uU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNv
bXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVI
ZWlnaHQpCi17Ci0gICAgQVNTRVJUKGxpbmVIZWlnaHQgPj0gMCk7Ci0gICAgbV9zaGFwZUxpbmVU
b3AgPSBsaW5lVG9wIC0gbG9naWNhbFRvcE9mZnNldCgpOwotICAgIG1fbGluZUhlaWdodCA9IGxp
bmVIZWlnaHQ7Ci0gICAgbV9zZWdtZW50cy5jbGVhcigpOwotCi0gICAgaWYgKGxpbmVPdmVybGFw
c1NoYXBlQm91bmRzKCkpCi0gICAgICAgIChjb21wdXRlZFNoYXBlKCktPippbnRlcnZhbEdldHRl
cikobV9zaGFwZUxpbmVUb3AsIHN0ZDo6bWluKG1fbGluZUhlaWdodCwgc2hhcGVMb2dpY2FsQm90
dG9tKCkgLSBsaW5lVG9wKSwgbV9zZWdtZW50cyk7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0T2Zmc2V0ID0gdGhpcy0+bG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fc2VnbWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV9zZWdtZW50c1tp
XS5sb2dpY2FsTGVmdCArPSBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICAgICAgbV9zZWdtZW50c1tp
XS5sb2dpY2FsUmlnaHQgKz0gbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1fc2VnbWVudHMuc2l6ZSgpOwotfQotCi10ZW1wbGF0ZSBjbGFzcyBFeGNsdXNpb25TaGFwZUlu
Zm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1
c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz47Ci10ZW1wbGF0ZSBjbGFzcyBFeGNsdXNp
b25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1
c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz47Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNmVkZTVhMjk0YjI3OWViMjRmZDg5YzM1NzQ1ZWYwNGRmMGE0OWMyZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEg
KzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0q
IGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwot
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMKLSogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQot
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotKiBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0qIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SCi0qIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotKiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1B
R0UuCi0qLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlSW5mb19oCi0jZGVmaW5lIEV4Y2x1c2lv
blNoYXBlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0KLSNpbmNsdWRlICJF
eGNsdXNpb25TaGFwZS5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNs
YXNzIEluZm9UeXBlPgotY2xhc3MgTWFwcGVkSW5mbyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIElu
Zm9UeXBlKiBlbnN1cmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkKLSAgICB7Ci0gICAgICAgIElu
Zm9NYXAmIGluZm9NYXAgPSBNYXBwZWRJbmZvPEtleVR5cGUsIEluZm9UeXBlPjo6aW5mb01hcCgp
OwotICAgICAgICBpZiAoSW5mb1R5cGUqIGluZm8gPSBpbmZvTWFwLmdldChrZXkpKQotICAgICAg
ICAgICAgcmV0dXJuIGluZm87Ci0gICAgICAgIHR5cGVuYW1lIEluZm9NYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBpbmZvTWFwLmFkZChrZXksIEluZm9UeXBlOjpjcmVhdGVJbmZvKGtleSkpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLSAgICB9Ci0gICAgc3Rh
dGljIHZvaWQgcmVtb3ZlSW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsgaW5mb01hcCgpLnJlbW92
ZShrZXkpOyB9Ci0gICAgc3RhdGljIEluZm9UeXBlKiBpbmZvKGNvbnN0IEtleVR5cGUqIGtleSkg
eyByZXR1cm4gaW5mb01hcCgpLmdldChrZXkpOyB9Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFz
aE1hcDxjb25zdCBLZXlUeXBlKiwgT3duUHRyPEluZm9UeXBlPiA+IEluZm9NYXA7Ci0gICAgc3Rh
dGljIEluZm9NYXAmIGluZm9NYXAoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChJbmZvTWFwLCBzdGF0aWNJbmZvTWFwLCAoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNJbmZv
TWFwOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIEV4Y2x1c2lvblNo
YXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChFeGNs
dXNpb25TaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0PgotY2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZvIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5FeGNsdXNpb25TaGFwZUlu
Zm8oKSB7IH0KLQotICAgIHZvaWQgc2V0U2hhcGVTaXplKExheW91dFVuaXQgbG9naWNhbFdpZHRo
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpCi0gICAgewotICAgICAgICBpZiAobV9yZW5kZXJl
ci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpIHsKLSAgICAgICAgICAgIGxv
Z2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7
Ci0gICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRp
bmdMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9zaGFwZUxvZ2lj
YWxXaWR0aCA9PSBsb2dpY2FsV2lkdGggJiYgbV9zaGFwZUxvZ2ljYWxIZWlnaHQgPT0gbG9naWNh
bEhlaWdodCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGlydHlTaGFwZVNpemUoKTsK
LSAgICAgICAgbV9zaGFwZUxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aDsKLSAgICAgICAgbV9z
aGFwZUxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0OwotICAgIH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lSGVpZ2h0KTsKLSAgICB2b2lkIGNsZWFyU2VnbWVudHMoKSB7IG1fc2VnbWVudHMuY2xl
YXIoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVy
biBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgpICsgbG9naWNhbFRvcE9mZnNl
dCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVy
biBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WSgpICsgbG9naWNhbFRvcE9m
ZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1
cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLngoKSArIGxvZ2ljYWxMZWZ0T2Zm
c2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFgoKSArIGxvZ2ljYWxMZWZ0
T2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KLSAgICBM
YXlvdXRVbml0IHNoYXBlTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hh
cGVMb2dpY2FsQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGluZVRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9wICsgbG9naWNhbFRvcE9m
ZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJvdHRvbSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcGVMaW5lVG9wICsgbV9saW5lSGVpZ2h0ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9
Ci0KLSAgICBMYXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKSA/
IChtX3NoYXBlTG9naWNhbEhlaWdodCArIG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsSGVpZ2h0KCkpIDogbV9zaGFwZUxvZ2ljYWxIZWlnaHQ7IH0KLQotICAgIGJvb2wgbGluZU92
ZXJsYXBzU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGluZVRvcCgpIDwgc2hh
cGVMb2dpY2FsQm90dG9tKCkgJiYgc2hhcGVMb2dpY2FsVG9wKCkgPD0gbG9naWNhbExpbmVCb3R0
b20oKTsgfQotICAgIGJvb2wgbGluZVdpdGhpblNoYXBlQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiAobG9naWNhbExpbmVCb3R0b20oKSA8PSBzaGFw
ZUxvZ2ljYWxCb3R0b20oKSk7IH0KLQotICAgIHZvaWQgZGlydHlTaGFwZVNpemUoKSB7IG1fc2hh
cGUuY2xlYXIoKTsgfQotICAgIGJvb2wgc2hhcGVTaXplRGlydHkoKSB7IHJldHVybiAhbV9zaGFw
ZS5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclR5cGUqIG93bmVyKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJlcjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRXhjbHVzaW9uU2hhcGVJbmZvKGNvbnN0
IFJlbmRlclR5cGUqIHJlbmRlcmVyKTogbV9yZW5kZXJlcihyZW5kZXJlcikgeyB9Ci0KLSAgICBj
b25zdCBFeGNsdXNpb25TaGFwZSogY29tcHV0ZWRTaGFwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwot
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5k
ZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBtX3JlbmRlcmVyLT5i
b3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiBMYXlvdXRVbml0KCk7IH07Ci0gICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgp
LT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCAmJiAhbV9yZW5kZXJlci0+aXNSZW5kZXJSZWdp
b24oKSkgPyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nU3RhcnQoKSA6IExheW91dFVuaXQo
KTsgfQotCi0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTGluZVRvcDsKLSAgICBMYXlvdXRVbml0IG1f
bGluZUhlaWdodDsKLSAgICBTZWdtZW50TGlzdCBtX3NlZ21lbnRzOwotCi1wcml2YXRlOgotICAg
IG11dGFibGUgT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBtX3NoYXBlOwotCi0gICAgTGF5b3V0VW5p
dCBtX3NoYXBlTG9naWNhbFdpZHRoOwotICAgIExheW91dFVuaXQgbV9zaGFwZUxvZ2ljYWxIZWln
aHQ7Ci0gICAgY29uc3QgUmVuZGVyVHlwZSogbV9yZW5kZXJlcjsKLX07Ci19Ci0jZW5kaWYKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQxNTc0MDZhYzM4
YzA5N2QyZTM5MjdiMGQ5YzNjMDJhNmEwMWQ2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0g
KiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICog
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIKLQotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykK
LQotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1MaW5lU2VnbWVudFJhbmdlOjpMaW5lU2VnbWVudFJh
bmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVu
ZCkKLSAgICA6IHN0YXJ0KHN0YXJ0LnJvb3QoKSwgc3RhcnQub2JqZWN0KCksIHN0YXJ0Lm9mZnNl
dCgpKQotICAgICwgZW5kKGVuZC5yb290KCksIGVuZC5vYmplY3QoKSwgZW5kLm9mZnNldCgpKQot
ICAgIHsKLSAgICB9Ci0KLWJvb2wgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRG
b3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQotewotICAgIEV4Y2x1c2lvblNoYXBlVmFs
dWUqIHNoYXBlVmFsdWUgPSByZW5kZXJlci0+c3R5bGUoKS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgp
OwotICAgIGlmICghc2hhcGVWYWx1ZSB8fCBzaGFwZVZhbHVlLT50eXBlKCkgIT0gRXhjbHVzaW9u
U2hhcGVWYWx1ZTo6U2hhcGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEJhc2ljU2hh
cGUqIHNoYXBlID0gc2hhcGVWYWx1ZS0+c2hhcGUoKTsKLSAgICByZXR1cm4gc2hhcGUgJiYgc2hh
cGUtPnR5cGUoKSAhPSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOwot
fQotCi1ib29sIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3Ao
ZmxvYXQgbWluU2VnbWVudFdpZHRoKQotewotICAgIGNvbnN0IEV4Y2x1c2lvblNoYXBlKiBzaGFw
ZSA9IGNvbXB1dGVkU2hhcGUoKTsKLSAgICBpZiAoIXNoYXBlIHx8IG1fbGluZUhlaWdodCA8PSAw
IHx8IGxvZ2ljYWxMaW5lVG9wKCkgPiBzaGFwZUxvZ2ljYWxCb3R0b20oKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgTGF5b3V0VW5pdCBuZXdMaW5lVG9wOwotICAgIGlmIChzaGFwZS0+
Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChtX3NoYXBlTGluZVRvcCwgTGF5b3V0U2l6
ZShtaW5TZWdtZW50V2lkdGgsIG1fbGluZUhlaWdodCksIG5ld0xpbmVUb3ApKSB7Ci0gICAgICAg
IGlmIChuZXdMaW5lVG9wID4gbV9zaGFwZUxpbmVUb3ApIHsKLSAgICAgICAgICAgIG1fc2hhcGVM
aW5lVG9wID0gbmV3TGluZVRvcDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzOTc2MWFiNDlmNWVlZjEzMmRjNGI5ZWM2NWI3YWE3
MGM4NzQ3Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb19oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0KLSNpbmNsdWRlICJF
eGNsdXNpb25TaGFwZUluZm8uaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbmxpbmVJ
dGVyYXRvcjsKLWNsYXNzIFJlbmRlckJsb2NrOwotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi1zdHJ1
Y3QgTGluZVNlZ21lbnRJdGVyYXRvciB7Ci0gICAgUmVuZGVyT2JqZWN0KiByb290OwotICAgIFJl
bmRlck9iamVjdCogb2JqZWN0OwotICAgIHVuc2lnbmVkIG9mZnNldDsKLSAgICBMaW5lU2VnbWVu
dEl0ZXJhdG9yKFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVuc2ln
bmVkIG9mZnNldCkKLSAgICAgICAgOiByb290KHJvb3QpCi0gICAgICAgICwgb2JqZWN0KG9iamVj
dCkKLSAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci19OwotCi1zdHJ1Y3Qg
TGluZVNlZ21lbnRSYW5nZSB7Ci0gICAgTGluZVNlZ21lbnRJdGVyYXRvciBzdGFydDsKLSAgICBM
aW5lU2VnbWVudEl0ZXJhdG9yIGVuZDsKLSAgICBMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGlu
ZUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Ci19OwotCi10eXBl
ZGVmIFZlY3RvcjxMaW5lU2VnbWVudFJhbmdlPiBTZWdtZW50UmFuZ2VMaXN0OwotCi1jbGFzcyBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRl
ckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFw
ZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxFeGNsdXNpb25TaGFwZUluc2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQmxvY2sq
IHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KHJlbmRlcmVyKSk7IH0KLQotICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5k
ZXJCbG9jayogcmVuZGVyZXIpOwotCi0gICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0Zv
ckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURF
Ci0gICAgewotICAgICAgICBBU1NFUlQoIW5lZWRzUmVtb3ZhbCgpKTsKLSAgICAgICAgbV9zZWdt
ZW50UmFuZ2VzLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBFeGNsdXNpb25TaGFwZUluZm88UmVu
ZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNo
YXBlOjpnZXRJbmNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRv
cCwgbGluZUhlaWdodCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNTZWdtZW50cygpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiBtX3NlZ21l
bnRzLnNpemUoKTsKLSAgICB9Ci0gICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNTZWdtZW50cygpKTsKLSAgICAgICAgcmV0dXJu
IG1fc2VnbWVudHM7Ci0gICAgfQotICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMo
KSB7IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7IH0KLSAgICBjb25zdCBTZWdtZW50UmFuZ2VMaXN0
JiBzZWdtZW50UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9Ci0gICAg
Y29uc3QgTGluZVNlZ21lbnQqIGN1cnJlbnRTZWdtZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmICghaGFzU2VnbWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBBU1NF
UlQobV9zZWdtZW50UmFuZ2VzLnNpemUoKSA8IG1fc2VnbWVudHMuc2l6ZSgpKTsKLSAgICAgICAg
cmV0dXJuICZtX3NlZ21lbnRzW21fc2VnbWVudFJhbmdlcy5zaXplKCldOwotICAgIH0KLSAgICBi
b29sIGFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21lbnRXaWR0aCk7Ci0KLSAgICB2
b2lkIHNldE5lZWRzTGF5b3V0KGJvb2wgdmFsdWUpIHsgbV9uZWVkc0xheW91dCA9IHZhbHVlOyB9
Ci0gICAgYm9vbCBuZWVkc0xheW91dCgpIHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0KLQotICAg
IHZvaWQgc2V0TmVlZHNSZW1vdmFsKGJvb2wgdmFsdWUpIHsgbV9uZWVkc1JlbW92YWwgPSB2YWx1
ZTsgfQotICAgIGJvb2wgbmVlZHNSZW1vdmFsKCkgeyByZXR1cm4gbV9uZWVkc1JlbW92YWw7IH0K
LQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNh
bEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5z
aGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKTsgfQotCi1wcml2YXRlOgotICAgIEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCi0gICAgOiBF
eGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFw
ZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz4gKHJlbmRlcmVy
KQotICAgICwgbV9uZWVkc0xheW91dChmYWxzZSkKLSAgICAsIG1fbmVlZHNSZW1vdmFsKGZhbHNl
KQotICAgIHsgfQotCi0gICAgU2VnbWVudFJhbmdlTGlzdCBtX3NlZ21lbnRSYW5nZXM7Ci0gICAg
Ym9vbCBtX25lZWRzTGF5b3V0OjE7Ci0gICAgYm9vbCBtX25lZWRzUmVtb3ZhbDoxOwotfTsKLQot
fQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODk2Mzk1NGYyZTViZmVhMmI0NjNhNzQ1NTc2ZmUzMTc3NjlhMzM3Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
LSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotYm9vbCBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3Io
Y29uc3QgUmVuZGVyQm94KiBib3gpCi17Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogdmFsdWUg
PSBib3gtPnN0eWxlKCktPnNoYXBlT3V0c2lkZSgpOwotICAgIHJldHVybiBib3gtPmlzRmxvYXRp
bmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYgdmFsdWUtPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZh
bHVlOjpTaGFwZSAmJiB2YWx1ZS0+c2hhcGUoKTsKLX0KLQotYm9vbCBFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lSGVpZ2h0KQotewotICAgIGlmIChzaGFwZVNpemVEaXJ0eSgpIHx8IG1fbGlu
ZVRvcCAhPSBsaW5lVG9wIHx8IG1fbGluZUhlaWdodCAhPSBsaW5lSGVpZ2h0KSB7Ci0gICAgICAg
IGlmIChFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0
c2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdt
ZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fbGVmdFNl
Z21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSBtX3NlZ21lbnRzWzBdLmxvZ2ljYWxMZWZ0IC0g
c2hhcGVMb2dpY2FsTGVmdCgpOwotICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5k
aW5nQm94RGVsdGEgPSBtX3NlZ21lbnRzW21fc2VnbWVudHMuc2l6ZSgpLTFdLmxvZ2ljYWxSaWdo
dCAtIHNoYXBlTG9naWNhbFJpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
X2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKLSAgICAgICAgICAgIG1fcmln
aHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKLSAgICAgICAgfQotICAgICAgICBt
X2xpbmVUb3AgPSBsaW5lVG9wOwotICAgIH0KLQotICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUo
KTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODhmZWUxODQ1NDY4MDJhZGEyNjgwY2Y0ZWQ2ZTY5ZWUyZmQxZDUzOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT
4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YK
LSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mb19oCi0KLSNp
ZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluZm8u
aCIKLSNpbmNsdWRlICJMYXlvdXRTaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUmVuZGVyQm94OwotCi1jbGFzcyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvIDogcHVibGlj
IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRl
LCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPiwgcHVibGljIE1hcHBlZElu
Zm88UmVuZGVyQm94LCBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvPiB7Ci1wdWJsaWM6Ci0gICAg
TGF5b3V0U2l6ZSBzaGFwZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXpl
KHNoYXBlTG9naWNhbExlZnQoKSwgc2hhcGVMb2dpY2FsVG9wKCkpOyB9Ci0KLSAgICBMYXlvdXRV
bml0IGxlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9s
ZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsgfQotICAgIExheW91dFVuaXQgcmlnaHRT
ZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodFNlZ21l
bnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2Vn
bWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBP
VkVSUklERTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8ocmVuZGVyZXIpKTsgfQotICAgIHN0YXRp
YyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqKTsKLQotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZU1hcmdpbkxvZ2ljYWxC
b3VuZGluZ0JveCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
byhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSA6IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJC
b3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1
ZGVkSW50ZXJ2YWxzPihyZW5kZXJlcikgeyB9Ci0KLSAgICBMYXlvdXRVbml0IG1fbGVmdFNlZ21l
bnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7Ci0gICAgTGF5b3V0VW5pdCBtX3JpZ2h0U2VnbWVudFNo
YXBlQm91bmRpbmdCb3hEZWx0YTsKLSAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKLX07Ci0KLX0K
LSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcApp
bmRleCA3MjVlZGE4ZmNmZDNiMWE5MTMzZDViN2YzNWQ0YzA2NjYyZjM3ZGM2Li42ZjVjNTNjYTVh
ODViYTZlODVmMDE0YTQ0Mjg3ZDkyN2RkNjJhN2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5jcHAKQEAgLTM5LDggKzM5LDggQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0
YXRlKExheW91dFN0YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRT
aXoKICAgICA6IG1fY29sdW1uSW5mbyhjb2x1bW5JbmZvKQogICAgICwgbV9saW5lR3JpZCgwKQog
ICAgICwgbV9uZXh0KHByZXYpCi0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotICAgICwgbV9l
eGNsdXNpb25TaGFwZUluc2lkZUluZm8oMCkKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAs
IG1fc2hhcGVJbnNpZGVJbmZvKDApCiAjZW5kaWYKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX3Jl
bmRlcmVyKHJlbmRlcmVyKQpAQCAtMTEwLDE2ICsxMTAsMTYgQEAgTGF5b3V0U3RhdGU6OkxheW91
dFN0YXRlKExheW91dFN0YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBMYXlv
dXRTaXoKICAgICBpZiAoIW1fY29sdW1uSW5mbykKICAgICAgICAgbV9jb2x1bW5JbmZvID0gbV9u
ZXh0LT5tX2NvbHVtbkluZm87CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5B
QkxFKENTU19TSEFQRVMpCiAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKICAg
ICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlckJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5k
ZXJlcik7Ci0gICAgICAgIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gcmVuZGVyQmxvY2st
PmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhSZW5kZXJCbG9jazo6U2hhcGVQcmVzZW50T3JSZW1v
dmVkKTsKLSAgICAgICAgaWYgKG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8gJiYg
cmVuZGVyQmxvY2stPmFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkgewot
ICAgICAgICAgICAgaWYgKCFtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykKLSAgICAgICAgICAg
ICAgICBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IG1fbmV4dC0+bV9leGNsdXNpb25TaGFw
ZUluc2lkZUluZm87Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby0+bmVlZHNSZW1vdmFsKCkpIHsKLSAgICAgICAgICAgICAgICBtX2V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyA9IG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm87Ci0gICAgICAg
ICAgICAgICAgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNldE5lZWRzTGF5b3V0KHRydWUp
OworICAgICAgICBtX3NoYXBlSW5zaWRlSW5mbyA9IHJlbmRlckJsb2NrLT5zaGFwZUluc2lkZUlu
Zm8oUmVuZGVyQmxvY2s6OlNoYXBlUHJlc2VudE9yUmVtb3ZlZCk7CisgICAgICAgIGlmIChtX25l
eHQtPm1fc2hhcGVJbnNpZGVJbmZvICYmIHJlbmRlckJsb2NrLT5hbGxvd3NTaGFwZUluc2lkZUlu
Zm9TaGFyaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICghbV9zaGFwZUluc2lkZUluZm8pCisgICAg
ICAgICAgICAgICAgbV9zaGFwZUluc2lkZUluZm8gPSBtX25leHQtPm1fc2hhcGVJbnNpZGVJbmZv
OworICAgICAgICAgICAgZWxzZSBpZiAobV9zaGFwZUluc2lkZUluZm8tPm5lZWRzUmVtb3ZhbCgp
KSB7CisgICAgICAgICAgICAgICAgbV9zaGFwZUluc2lkZUluZm8gPSBtX25leHQtPm1fc2hhcGVJ
bnNpZGVJbmZvOworICAgICAgICAgICAgICAgIG1fc2hhcGVJbnNpZGVJbmZvLT5zZXROZWVkc0xh
eW91dCh0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE1NCw4ICsx
NTQsOCBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAg
ICwgbV9jb2x1bW5JbmZvKDApCiAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgLCBtX25leHQoMCkK
LSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgLCBtX2V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbygwKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgICwgbV9zaGFwZUluc2lkZUluZm8o
MCkKICNlbmRpZgogICAgICwgbV9wYWdlTG9naWNhbEhlaWdodCgwKQogI2lmbmRlZiBOREVCVUcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKaW5kZXggMzg1NzFmOTFkNzhhZjYx
ODA0OTgxZGUxMWNmYjQ5M2U0ZjZjNjkyMi4uZDc3NDljNTJjNjBkNzU2MjAxYTk4MTM5MmU4M2I1
YjVjMTcyYTA5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0
YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKQEAgLTM4
LDggKzM4LDggQEAgY2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwotI2lmIEVOQUJMRShDU1NfRVhD
TFVTSU9OUykKLWNsYXNzIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzsKKyNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKK2NsYXNzIFNoYXBlSW5zaWRlSW5mbzsKICNlbmRpZgogCiBjbGFzcyBMYXlvdXRT
dGF0ZSB7CkBAIC01Niw4ICs1Niw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgICAgICwgbV9uZXh0KDApCi0jaWYgRU5B
QkxFKENTU19FWENMVVNJT05TKQotICAgICAgICAsIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KDApCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgICAgICwgbV9zaGFwZUluc2lkZUluZm8o
MCkKICNlbmRpZgogICAgICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICNpZm5kZWYgTkRF
QlVHCkBAIC05OCw4ICs5OCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmVlZHNCbG9ja0RpcmVj
dGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lR3JpZCB8
fCAobV9pc1BhZ2luYXRlZCAmJiBtX3BhZ2VMb2dpY2FsSGVpZ2h0KTsgfQogCi0jaWYgRU5BQkxF
KENTU19FWENMVVNJT05TKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9leGNsdXNpb25TaGFwZUluc2lkZUlu
Zm87IH0KKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBl
SW5zaWRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVJbnNpZGVJbmZvOyB9CiAjZW5kaWYK
IHByaXZhdGU6CiAgICAgLy8gVGhlIG5vcm1hbCBvcGVyYXRvciBuZXcgaXMgZGlzYWxsb3dlZC4K
QEAgLTEyNSw4ICsxMjUsOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGN1cnJlbnQgbGluZSBncmlk
IHRoYXQgd2UncmUgc25hcHBpbmcgdG8gYW5kIHRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRo
ZSBncmlkLgogICAgIFJlbmRlckJsb2NrKiBtX2xpbmVHcmlkOwogICAgIExheW91dFN0YXRlKiBt
X25leHQ7Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotICAgIEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyogbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm87CisjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCisgICAgU2hhcGVJbnNpZGVJbmZvKiBtX3NoYXBlSW5zaWRlSW5mbzsKICNlbmRpZgogCiAg
ICAgLy8gRklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGxheW91dCBjbGlwIHJlY3QgYW5k
IHRoZSBwYWludCBjbGlwIHJlY3Qgd2hpY2ggbWF5IGJlIGxhcmdlciwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDhiNTRmNTczZGU5OWU5MDY0ZDUzZGI0YWE0
MjkxMmM4MDVmNGJhOTguLjgxZjJmZmJkOTRjMDgyNmJhYTFjMjE5ODVjYTg2ZTE1NGFkMTA3ZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNjYsOSArNjYs
OSBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5o
IgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lP
TlMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiCi0jaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIgorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorI2luY2x1
ZGUgIlNoYXBlSW5zaWRlSW5mby5oIgorI2luY2x1ZGUgIlNoYXBlT3V0c2lkZUluZm8uaCIKICNl
bmRpZgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFy
eUNoYW5nZS5oPgpAQCAtMzYyLDEwICszNjIsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQog
ICAgIAogICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgCi0jaWYgRU5B
QkxFKENTU19FWENMVVNJT05TKQotICAgIC8vIEZJWE1FOiBCdWcgODk5OTM6IFN0eWxlIGNoYW5n
ZXMgc2hvdWxkIGFmZmVjdCB0aGUgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvcyBmb3Igb3RoZXIg
cmVuZGVyIGJsb2NrcyB0aGF0Ci0gICAgLy8gc2hhcmUgdGhlIHNhbWUgRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvCi0gICAgdXBkYXRlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZShuZXdTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxl
LT5yZXNvbHZlZFNoYXBlSW5zaWRlKCkgOiAwKTsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAg
ICB1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKG5ld1N0eWxlLT5yZXNvbHZl
ZFNoYXBlSW5zaWRlKCksIG9sZFN0eWxlID8gb2xkU3R5bGUtPnJlc29sdmVkU2hhcGVJbnNpZGUo
KSA6IDApOwogI2VuZGlmCiAKICAgICBpZiAoIWlzQW5vbnltb3VzQmxvY2soKSkgewpAQCAtMTQz
OSw0MSArMTQzNyw0MSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgIGludmFsaWRh
dGVCYWNrZ3JvdW5kT2JzY3VyYXRpb25TdGF0dXMoKTsKIH0KIAotI2lmIEVOQUJMRShDU1NfRVhD
TFVTSU9OUykKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
b0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUs
IGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNoYXBlSW5zaWRlKQorI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQordm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBTaGFwZVZhbHVlKiBzaGFwZUluc2lkZSwgY29uc3QgU2hhcGVWYWx1
ZSogb2xkU2hhcGVJbnNpZGUpCiB7CiAgICAgLy8gRklYTUU6IEEgZnV0dXJlIG9wdGltaXphdGlv
biB3b3VsZCBkbyBhIGRlZXAgY29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuCiAgICAgaWYgKHNoYXBl
SW5zaWRlID09IG9sZFNoYXBlSW5zaWRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzsKKyAgICBTaGFwZUlu
c2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbzsKICAgICBpZiAoc2hhcGVJbnNpZGUpIHsKLSAgICAg
ICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gZW5zdXJlRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCk7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+ZGlydHlTaGFwZVNpemUo
KTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZXROZWVkc1JlbW92YWwoZmFs
c2UpOwotICAgIH0gZWxzZSBpZiAoKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IHRoaXMtPmV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhTaGFwZVByZXNlbnRPclJlbW92ZWQpKSkKLSAgICAgICAg
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZXROZWVkc1JlbW92YWwodHJ1ZSk7CisgICAgICAg
IHNoYXBlSW5zaWRlSW5mbyA9IGVuc3VyZVNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICBzaGFw
ZUluc2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CisgICAgICAgIHNoYXBlSW5zaWRlSW5mby0+
c2V0TmVlZHNSZW1vdmFsKGZhbHNlKTsKKyAgICB9IGVsc2UgaWYgKChzaGFwZUluc2lkZUluZm8g
PSB0aGlzLT5zaGFwZUluc2lkZUluZm8oU2hhcGVQcmVzZW50T3JSZW1vdmVkKSkpCisgICAgICAg
IHNoYXBlSW5zaWRlSW5mby0+c2V0TmVlZHNSZW1vdmFsKHRydWUpOwogfQogI2VuZGlmCiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxheW91dChjb25zdCBSZW5k
ZXJCbG9jayogYmxvY2spCiB7Ci0jaWYgIUVOQUJMRShDU1NfRVhDTFVTSU9OUykKKyNpZiAhRU5B
QkxFKENTU19TSEFQRVMpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qIGluZm8gPSBibG9jay0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKFJl
bmRlckJsb2NrOjpTaGFwZVByZXNlbnRPclJlbW92ZWQpOworICAgIFNoYXBlSW5zaWRlSW5mbyog
aW5mbyA9IGJsb2NrLT5zaGFwZUluc2lkZUluZm8oUmVuZGVyQmxvY2s6OlNoYXBlUHJlc2VudE9y
UmVtb3ZlZCk7CiAgICAgaWYgKGluZm8pCiAgICAgICAgIGluZm8tPnNldE5lZWRzTGF5b3V0KGlu
Zm8tPnNoYXBlU2l6ZURpcnR5KCkgfHwgaW5mby0+bmVlZHNSZW1vdmFsKCkpOwogICAgIGVsc2UK
LSAgICAgICAgaW5mbyA9IGJsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oUmVu
ZGVyQmxvY2s6OlNoYXBlUHJlc2VudE9yUmVtb3ZlZCk7CisgICAgICAgIGluZm8gPSBibG9jay0+
bGF5b3V0U2hhcGVJbnNpZGVJbmZvKFJlbmRlckJsb2NrOjpTaGFwZVByZXNlbnRPclJlbW92ZWQp
OwogICAgIHJldHVybiBpbmZvICYmIGluZm8tPm5lZWRzTGF5b3V0KCk7CiAjZW5kaWYKIH0KIAog
Ym9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExh
eW91dChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogewotI2lmIEVOQUJMRShDU1NfRVhD
TFVTSU9OUykKLSAgICBpZiAoIWZsb3dUaHJlYWQgJiYgIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
bygpKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIGlmICghZmxvd1RocmVhZCAmJiAhc2hh
cGVJbnNpZGVJbmZvKCkpCiAjZWxzZQogICAgIGlmICghZmxvd1RocmVhZCkKICNlbmRpZgpAQCAt
MTQ4Nyw4ICsxNDg1LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1
c2lvbnNCZWZvcmVDaGlsZExheW91dChSZW5kZXJGbG93VGhyZWFkKgogICAgIHNldExvZ2ljYWxI
ZWlnaHQoTGF5b3V0VW5pdDo6bWF4KCkgLyAyKTsKICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7
CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgY29tcHV0ZUV4Y2x1c2lvblNoYXBl
U2l6ZSgpOworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIGNvbXB1dGVTaGFwZVNpemUoKTsK
ICNlbmRpZgogCiAgICAgLy8gU2V0IG91ciBzdGFydCBhbmQgZW5kIHJlZ2lvbnMuIE5vIHJlZ2lv
bnMgYWJvdmUgb3IgYmVsb3cgdXMgd2lsbCBiZSBjb25zaWRlcmVkIGJ5IG91ciBjaGlsZHJlbi4g
VGhleSBhcmUKQEAgLTE1MDEsMjYgKzE0OTksMjYgQEAgYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRl
UmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExheW91dChSZW5kZXJGbG93VGhyZWFkKgog
ICAgIHJldHVybiBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxheW91dCh0aGlzKTsKIH0KIAotI2lm
IEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLXZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVFeGNsdXNp
b25TaGFwZVNpemUoKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQordm9pZCBSZW5kZXJCbG9jazo6
Y29tcHV0ZVNoYXBlU2l6ZSgpCiB7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNs
dXNpb25TaGFwZUluc2lkZUluZm8gPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsK
LSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKSB7CisgICAgU2hhcGVJbnNpZGVJbmZv
KiBzaGFwZUluc2lkZUluZm8gPSB0aGlzLT5zaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hh
cGVJbnNpZGVJbmZvKSB7CiAgICAgICAgIGJvb2wgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNv
bHZhYmxlID0gcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGVGcm9tQmxvY2sodGhp
cywgZmFsc2UpOwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNldFNoYXBlU2l6
ZShsb2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9n
aWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5z
ZXRTaGFwZVNpemUobG9naWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2
YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IExheW91dFVuaXQoKSk7CiAgICAgfQogfQogI2VuZGlm
CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0ZXJDaGls
ZExheW91dChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkLCBib29sIGhlaWdodENoYW5nZWQp
CiB7Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+ZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKFNoYXBlUHJlc2VudE9yUmVtb3ZlZCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyAmJiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPm5lZWRzUmVtb3ZhbCgpKQotICAg
ICAgICBzZXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8obnVsbHB0cik7CisjaWYgRU5BQkxFKENT
U19TSEFQRVMpCisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB0aGlzLT5z
aGFwZUluc2lkZUluZm8oU2hhcGVQcmVzZW50T3JSZW1vdmVkKTsKKyAgICBpZiAoc2hhcGVJbnNp
ZGVJbmZvICYmIHNoYXBlSW5zaWRlSW5mby0+bmVlZHNSZW1vdmFsKCkpCisgICAgICAgIHNldFNo
YXBlSW5zaWRlSW5mbyhudWxscHRyKTsKIAogICAgIC8vIEEgcHJldmlvdXMgc2libGluZyBoYXMg
Y2hhbmdlZCBkaW1lbnNpb24sIHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQgdGhlIHNoYXBlIHdpdGgg
dGhlIGNvbnRlbnQKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5m
byA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIHNoYXBlSW5zaWRlSW5m
byA9IGxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAgIGlmIChoZWlnaHRDaGFuZ2VkICYmIHNo
YXBlSW5zaWRlSW5mbykKICAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgp
OwogI2VuZGlmCkBAIC0zOTk4LDExICszOTk2LDExIEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKICAg
ICAgICAgby0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFyZ2lucyh0aGlzKTsKICAgICB9
CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mbyogc2hhcGVPdXRzaWRlID0gby0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQorICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9
IG8tPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRzaWRlKSB7CiAgICAgICAg
IHNoYXBlT3V0c2lkZS0+c2V0U2hhcGVTaXplKG8tPmxvZ2ljYWxXaWR0aCgpLCBvLT5sb2dpY2Fs
SGVpZ2h0KCkpOwotICAgICAgICAvLyBUaGUgQ1NTIEV4Y2x1c2lvbnMgc3BlY2lmaWNhdGlvbiBz
YXlzIHRoYXQgdGhlIG1hcmdpbnMgYXJlIGlnbm9yZWQKKyAgICAgICAgLy8gVGhlIENTUyBTaGFw
ZXMgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhlIG1hcmdpbnMgYXJlIGlnbm9yZWQKICAgICAg
ICAgLy8gd2hlbiBhIGZsb2F0IGhhcyBhIHNoYXBlIG91dHNpZGUuCiAgICAgICAgIHNldExvZ2lj
YWxXaWR0aEZvckZsb2F0KG5ld09iaiwgc2hhcGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxXaWR0aCgp
KTsKICAgICB9IGVsc2UKQEAgLTQwNzgsOSArNDA3Niw5IEBAIExheW91dFBvaW50IFJlbmRlckJs
b2NrOjpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3Qq
IGZsCiAgICAgUmVuZGVyQm94KiBjaGlsZEJveCA9IGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigp
OwogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSBsb2dpY2FsTGVmdE9mZnNldEZv
ckNvbnRlbnQobG9naWNhbFRvcE9mZnNldCk7IC8vIENvbnN0YW50IHBhcnQgb2YgbGVmdCBvZmZz
ZXQuCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXQ7IC8vIENvbnN0YW50IHBhcnQg
b2YgcmlnaHQgb2Zmc2V0LgotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKKyNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKICAgICAvLyBGSVhNRSBCdWcgMTAyOTQ4OiBUaGlzIG9ubHkgd29ya3MgZm9y
IHNoYXBlIG91dHNpZGUgZGlyZWN0bHkgc2V0IG9uIHRoaXMgYmxvY2suCi0gICAgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBleGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHRoaXMtPnNoYXBl
SW5zaWRlSW5mbygpOwogICAgIC8vIEZJWE1FIEJ1ZyAxMDI4NDY6IFRha2UgaW50byBhY2NvdW50
IHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRlbnQuIFRoZSBvZmZzZXQgc2hvdWxkIGJlCiAgICAgLy8g
ZXF1YWwgdG8gdGhlIG1heGltdW0gc2VnbWVudCBsZW5ndGguCiAgICAgaWYgKHNoYXBlSW5zaWRl
SW5mbyAmJiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkgJiYgc2hhcGVJbnNpZGVJbmZv
LT5zZWdtZW50cygpLnNpemUoKSA9PSAxKSB7CkBAIC00MjM0LDkgKzQyMzIsOSBAQCBib29sIFJl
bmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIH0KIAogICAgICAgICBzZXRM
b2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGZsb2F0TG9naWNhbExvY2F0aW9uLnko
KSk7Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotICAgICAgICBpZiAoY2hpbGRCb3gtPmV4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKSkKLSAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRG
b3JGbG9hdChmbG9hdGluZ09iamVjdCwgY2hpbGRCb3gtPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8oKS0+c2hhcGVMb2dpY2FsSGVpZ2h0KCkpOworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAg
ICAgICBpZiAoY2hpbGRCb3gtPnNoYXBlT3V0c2lkZUluZm8oKSkKKyAgICAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgY2hpbGRCb3gtPnNoYXBlT3V0c2lk
ZUluZm8oKS0+c2hhcGVMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICBlbHNlCiAjZW5kaWYKICAg
ICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNh
bEhlaWdodEZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkQm94
KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGRCb3gpKTsKQEAgLTQzNzQsNyArNDM3Miw3IEBA
IGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdEludGVydmFsU2VhcmNoQWRhcHRlcjxGbG9h
dFR5cGVWYWx1ZT46OmNvbGxlY3RJZk5lCiAgICAgICAgICAgICAqbV9oZWlnaHRSZW1haW5pbmcg
PSBtX3JlbmRlcmVyLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQocikgLSBtX2xvd1ZhbHVlOwogICAg
IH0KIAotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
ICAgICBtX2xhc3QgPSByOwogI2VuZGlmCiB9CkBAIC00NDE5LDEwICs0NDE3LDEwIEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxv
Z2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIEZsb2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyPEZs
b2F0aW5nT2JqZWN0OjpGbG9hdExlZnQ+IGFkYXB0ZXIodGhpcywgcm91bmRUb0ludChsb2dpY2Fs
VG9wKSwgcm91bmRUb0ludChsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCksIGxlZnQsIGhlaWdo
dFJlbWFpbmluZyk7CiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5wbGFjZWRGbG9hdHNUcmVl
KCkuYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKIAotI2lmIEVOQUJMRShDU1NfRVhD
TFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3QqIGxhc3RGbG9hdCA9IGFkYXB0ZXIubGFzdEZsb2F0KCk7CiAgICAgICAgIGlmIChvZmZz
ZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgbGFzdEZsb2F0KSB7Ci0g
ICAgICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0g
bGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCkpIHsKKyAg
ICAgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0RmxvYXQt
PnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgewogICAgICAgICAgICAgICAgIHNoYXBl
T3V0c2lkZS0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsb2dpY2FsVG9wIC0gbG9naWNhbFRvcEZv
ckZsb2F0KGxhc3RGbG9hdCkgKyBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbFRvcCgpLCBsb2dp
Y2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBsZWZ0ICs9IHNoYXBlT3V0c2lkZS0+cmlnaHRT
ZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCk7CiAgICAgICAgICAgICB9CkBAIC00NDc3LDEw
ICs0NDc1LDEwIEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVCiAgICAgICAgIEZsb2F0SW50ZXJ2
YWxTZWFyY2hBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0PiBhZGFwdGVyKHRoaXMs
IHJvdW5kVG9JbnQobG9naWNhbFRvcCksIHJvdW5kVG9JbnQobG9naWNhbFRvcCArIGxvZ2ljYWxI
ZWlnaHQpLCByaWdodEZsb2F0T2Zmc2V0LCBoZWlnaHRSZW1haW5pbmcpOwogICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+cGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIo
YWRhcHRlcik7CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxFKENTU19T
SEFQRVMpCiAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBhZGFwdGVy
Lmxhc3RGbG9hdCgpOwogICAgICAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9h
dFNoYXBlT2Zmc2V0ICYmIGxhc3RGbG9hdCkgewotICAgICAgICAgICAgaWYgKEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKSB7CisgICAgICAgICAgICBpZiAoU2hhcGVPdXRzaWRl
SW5mbyogc2hhcGVPdXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJ
bmZvKCkpIHsKICAgICAgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0Zv
ckxpbmUobG9naWNhbFRvcCAtIGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgc2hhcGVP
dXRzaWRlLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAg
ICAgcmlnaHRGbG9hdE9mZnNldCArPSBzaGFwZU91dHNpZGUtPmxlZnRTZWdtZW50U2hhcGVCb3Vu
ZGluZ0JveERlbHRhKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCmluZGV4IDlmY2VkYjE5YjE1OTg0OTFmMjY3MzAyMTQwMmFiNWNkMDk0MmJjMzQu
LmM2ZGQxMzIyZTM3MTdhNDQ0N2Y0MmNlZTI0OTE4Y2VkOWFjODYyNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCi0jaWYgRU5BQkxFKENT
U19FWENMVVNJT05TKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIgotI2lu
Y2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyNp
bmNsdWRlICJTaGFwZUluc2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgQmlkaVJ1
bjsKIHN0cnVjdCBQYWludEluZm87CiBjbGFzcyBMaW5lSW5mbzsKIGNsYXNzIFJlbmRlclJ1YnlS
dW47Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQog
Y2xhc3MgQmFzaWNTaGFwZTsKICNlbmRpZgogY2xhc3MgVGV4dExheW91dDsKQEAgLTQ0NSwyOSAr
NDQ1LDI5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3QgSW5s
aW5lQm94KiA9IDAsIGNvbnN0IGNoYXIqID0gMCwgY29uc3QgSW5saW5lQm94KiA9IDAsIGNvbnN0
IGNoYXIqID0gMCwgY29uc3QgUmVuZGVyT2JqZWN0KiA9IDApIGNvbnN0OwogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBl
bnN1cmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQor
ICAgIFNoYXBlSW5zaWRlSW5mbyogZW5zdXJlU2hhcGVJbnNpZGVJbmZvKCkKICAgICB7CiAgICAg
ICAgIGlmICghbV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8pCi0g
ICAgICAgICAgICBzZXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvOjpjcmVhdGVJbmZvKHRoaXMpKTsKKyAgICAgICAgICAgIHNldFNoYXBlSW5zaWRlSW5m
byhTaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8odGhpcykpOwogICAgICAgICByZXR1cm4gbV9y
YXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8uZ2V0KCk7CiAgICAgfQogCi0gICAgZW51bSBFeGNs
dXNpb25TaGFwZVN0YXR1cyB7IFNoYXBlUHJlc2VudCwgU2hhcGVQcmVzZW50T3JSZW1vdmVkIH07
Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8o
RXhjbHVzaW9uU2hhcGVTdGF0dXMgZXhjbHVzaW9uU2hhcGVTdGF0dXMgPSBTaGFwZVByZXNlbnQp
IGNvbnN0CisgICAgZW51bSBTaGFwZVN0YXR1cyB7IFNoYXBlUHJlc2VudCwgU2hhcGVQcmVzZW50
T3JSZW1vdmVkIH07CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8oU2hhcGVT
dGF0dXMgc2hhcGVTdGF0dXMgPSBTaGFwZVByZXNlbnQpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoIW1fcmFyZURhdGEgfHwgIW1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvKQogICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86
OmlzRW5hYmxlZEZvcih0aGlzKSB8fCAoZXhjbHVzaW9uU2hhcGVTdGF0dXMgPT0gU2hhcGVQcmVz
ZW50T3JSZW1vdmVkKSA/IG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvLmdldCgpIDogMDsK
KyAgICAgICAgcmV0dXJuIFNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpIHx8IChz
aGFwZVN0YXR1cyA9PSBTaGFwZVByZXNlbnRPclJlbW92ZWQpID8gbV9yYXJlRGF0YS0+bV9zaGFw
ZUluc2lkZUluZm8uZ2V0KCkgOiAwOwogICAgIH0KLSAgICB2b2lkIHNldEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyhQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbz4gdmFsdWUpCisg
ICAgdm9pZCBzZXRTaGFwZUluc2lkZUluZm8oUGFzc093blB0cjxTaGFwZUluc2lkZUluZm8+IHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICAgICAgbV9yYXJl
RGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpKTsKICAgICAgICAg
bV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8gPSB2YWx1ZTsKICAgICB9Ci0gICAgRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKiBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oRXhjbHVz
aW9uU2hhcGVTdGF0dXMgPSBTaGFwZVByZXNlbnQpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dzRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpIGNvbnN0IHsgcmV0dXJuICFpc0lubGluZSgp
ICYmICFpc0Zsb2F0aW5nKCk7IH0KKyAgICBTaGFwZUluc2lkZUluZm8qIGxheW91dFNoYXBlSW5z
aWRlSW5mbyhTaGFwZVN0YXR1cyA9IFNoYXBlUHJlc2VudCkgY29uc3Q7CisgICAgYm9vbCBhbGxv
d3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkgY29uc3QgeyByZXR1cm4gIWlzSW5saW5lKCkgJiYg
IWlzRmxvYXRpbmcoKTsgfQogI2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTU4NCw5ICs1ODQsOSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxI
ZWlnaHRDaGFuZ2UoTGF5b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dp
Y2FsSGVpZ2h0Q2hhbmdlZCwgYm9vbCYgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpOwog
CiBwcml2YXRlOgotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICB2b2lkIGNvbXB1dGVF
eGNsdXNpb25TaGFwZVNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZUV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSosIGNvbnN0IEV4
Y2x1c2lvblNoYXBlVmFsdWUqIG9sZEV4Y2x1c2lvblNoYXBlKTsKKyNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKKyAgICB2b2lkIGNvbXB1dGVTaGFwZVNpemUoKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXBl
SW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgU2hhcGVWYWx1ZSosIGNvbnN0IFNoYXBl
VmFsdWUqIG9sZFNoYXBlKTsKICNlbmRpZgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgdmlydHVh
bCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsg
cmV0dXJuIGNoaWxkcmVuKCk7IH0KQEAgLTc4OCw4ICs3ODgsOCBAQCBwcml2YXRlOgogCiAgICAg
TGF5b3V0VW5pdCB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBGbG9hdGlu
Z09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAgewotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykK
LSAgICAgICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQt
PnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKKyAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQt
PnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgaWYgKHNoYXBlT3V0c2lk
ZSkKICAgICAgICAgICAgIHJldHVybiBjaGlsZC0+eCgpOwogI2VuZGlmCkBAIC04MDIsOCArODAy
LDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgTGF5b3V0VW5pdCB5UG9zaXRpb25Gb3JGbG9h
dEluY2x1ZGluZ01hcmdpbihjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAg
ewotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm8oKTsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAgICAgU2hhcGVPdXRz
aWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUlu
Zm8oKTsKICAgICAgICAgaWYgKHNoYXBlT3V0c2lkZSkKICAgICAgICAgICAgIHJldHVybiBjaGls
ZC0+eSgpOwogI2VuZGlmCkBAIC0xMDgzLDkgKzEwODMsOSBAQCBwcml2YXRlOgogICAgIFJvb3RJ
bmxpbmVCb3gqIGNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyhCaWRpUnVuTGlzdDxCaWRpUnVu
PiYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiwgVmVydGljYWxQb3NpdGlv
bkNhY2hlJiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgV29yZE1lYXN1cmVtZW50cyYpOwog
ICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmLCBib29sIGhhc0lu
bGluZUNoaWxkKTsKICAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlv
dXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBjbGVh
bkxpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgdW5zaWdu
ZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpOwotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9O
UykKLSAgICB2b2lkIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yRXhjbHVzaW9ucyhFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qLCBMYXlvdXRVbml0JiwgTGluZUxheW91dFN0YXRlJiwgYm9vbCYpOwot
ICAgIGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCwgTGluZUxheW91dFN0YXRlJiwgSW5s
aW5lQmlkaVJlc29sdmVyJiwgRmxvYXRpbmdPYmplY3QqLCBJbmxpbmVJdGVyYXRvciYsIFdvcmRN
ZWFzdXJlbWVudHMmKTsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICB2b2lkIHVwZGF0ZUxp
bmVCb3VuZGFyaWVzRm9yU2hhcGVzKFNoYXBlSW5zaWRlSW5mbyosIExheW91dFVuaXQmLCBMaW5l
TGF5b3V0U3RhdGUmLCBib29sJik7CisgICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExv
Z2ljYWxIZWlnaHRJZk5lZWRlZChTaGFwZUluc2lkZUluZm8qLCBMYXlvdXRVbml0LCBMaW5lTGF5
b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBGbG9hdGluZ09iamVjdCosIElubGluZUl0
ZXJhdG9yJiwgV29yZE1lYXN1cmVtZW50cyYpOwogI2VuZGlmCiAgICAgY29uc3QgSW5saW5lSXRl
cmF0b3ImIHJlc3RhcnRMYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMYXlvdXRVbml0IG9sZExv
Z2ljYWxIZWlnaHQsIExheW91dFVuaXQgbmV3TG9naWNhbEhlaWdodCwgIEZsb2F0aW5nT2JqZWN0
KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCAgY29uc3Qg
SW5saW5lSXRlcmF0b3ImKTsKICAgICB2b2lkIGxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5
b3V0U3RhdGUmKTsKQEAgLTExNzEsNyArMTE3MSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICwgbV9oaWdoVmFsdWUoaGlnaFZhbHVlKQogICAgICAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CiAgICAgICAgICAgICAsIG1faGVpZ2h0UmVtYWluaW5nKGhlaWdodFJlbWFpbmluZykKLSNpZiBF
TkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgICAgICAg
ICAsIG1fbGFzdCgwKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTExODEsNyArMTE4MSw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgaW5saW5lIGludCBoaWdoVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X2hpZ2hWYWx1ZTsgfQogICAgICAgICB2b2lkIGNvbGxlY3RJZk5lZWRlZChjb25zdCBJbnRlcnZh
bFR5cGUmKSBjb25zdDsKIAotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKKyNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKICAgICAgICAgLy8gV2hlbiBjb21wdXRpbmcgdGhlIG9mZnNldCBjYXVzZWQg
YnkgdGhlIGZsb2F0cyBvbiBhIGdpdmVuIGxpbmUsIGlmCiAgICAgICAgIC8vIHRoZSBvdXRlcm1v
c3QgZmxvYXQgb24gdGhhdCBsaW5lIGhhcyBhIHNoYXBlLW91dHNpZGUsIHRoZSBpbmxpbmUKICAg
ICAgICAgLy8gY29udGVudCB0aGF0IGJ1dHRzIHVwIGFnYWluc3QgdGhhdCBmbG9hdCBtdXN0IGJl
IHBvc2l0aW9uZWQgdXNpbmcKQEAgLTExOTcsNyArMTE5Nyw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgaW50IG1faGlnaFZhbHVlOwogICAgICAgICBMYXlvdXRVbml0JiBtX29mZnNldDsKICAgICAg
ICAgTGF5b3V0VW5pdCogbV9oZWlnaHRSZW1haW5pbmc7Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJ
T05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICAvLyBUaGlzIG1lbWJlciB2YXJp
YWJsZSBpcyBtdXRhYmxlIGJlY2F1c2UgdGhlIGNvbGxlY3RJZk5lZWRlZCBtZXRob2QKICAgICAg
ICAgLy8gaXMgZGVjbGFyZWQgYXMgY29uc3QsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3QgYWN0dWFs
bHkgcmVzcGVjdCB0aGF0CiAgICAgICAgIC8vIGNvbnRyYWN0LiBJdCBtb2RpZmllcyBvdGhlciBt
ZW1iZXIgdmFyaWFibGVzIHZpYSBsb29waG9sZXMgaW4gdGhlCkBAIC0xMjkxLDggKzEyOTEsOCBA
QCBwdWJsaWM6CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fbGluZUdyaWRCb3g7CiAKICAgICAg
ICAgUm9vdElubGluZUJveCogbV9saW5lQnJlYWtUb0F2b2lkV2lkb3c7Ci0jaWYgRU5BQkxFKENT
U19FWENMVVNJT05TKQotICAgICAgICBPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvPiBt
X3NoYXBlSW5zaWRlSW5mbzsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAgICAgT3duUHRy
PFNoYXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CiAjZW5kaWYKICAgICAgICAgYm9v
bCBtX3Nob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93IDogMTsKICAgICAgICAgYm9vbCBtX2Rp
c2NhcmRNYXJnaW5CZWZvcmUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBlMTg3MThhODI4NzRmNTI4MjVhOTRhYWZm
YTcwZmQ0OWMwODBjYTQ3Li40Yzc3Y2VjNGU2ODhhNWY2NGI1ZjY2NGQxMzc3ZmY3NWQyOGIzYTcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi0jaWYgRU5BQkxFKENTU19FWENM
VVNJT05TKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIgorI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQorI2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5mby5oIgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoU1ZHKQpAQCAtNzYsMjAgKzc2LDIwIEBAIHN0YXRpYyBMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHRGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgYm9vbCBpc0ZpcnN0TGlu
CiAgICAgcmV0dXJuIG1heDxMYXlvdXRVbml0PihyZXBsYWNlZEhlaWdodCwgYmxvY2stPmxpbmVI
ZWlnaHQoaXNGaXJzdExpbmUsIGJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9y
aXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykp
OwogfQogCi0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKEV4Y2x1c2lv
blNoYXBlU3RhdHVzIGV4Y2x1c2lvblNoYXBlU3RhdHVzKSBjb25zdAorI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQorU2hhcGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJ
bmZvKFNoYXBlU3RhdHVzIHNoYXBlU3RhdHVzKSBjb25zdAogewotICAgIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5leGNs
dXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAgICBpZiAoc2hhcGVJbnNpZGVJbmZvICYmIHNoYXBl
SW5zaWRlSW5mby0+bmVlZHNSZW1vdmFsKCkgJiYgZXhjbHVzaW9uU2hhcGVTdGF0dXMgPT0gU2hh
cGVQcmVzZW50KQorICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdmlldygp
LT5sYXlvdXRTdGF0ZSgpLT5zaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hhcGVJbnNpZGVJ
bmZvICYmIHNoYXBlSW5zaWRlSW5mby0+bmVlZHNSZW1vdmFsKCkgJiYgc2hhcGVTdGF0dXMgPT0g
U2hhcGVQcmVzZW50KQogICAgICAgICBzaGFwZUluc2lkZUluZm8gPSAwOwogCi0gICAgaWYgKCFz
aGFwZUluc2lkZUluZm8gJiYgZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpICYmIGFsbG93c0V4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkgeworICAgIGlmICghc2hhcGVJbnNpZGVJ
bmZvICYmIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSAmJiBhbGxvd3NTaGFwZUluc2lkZUlu
Zm9TaGFyaW5nKCkpIHsKICAgICAgICAgLy8gcmVnaW9uQXRCbG9ja09mZnNldCByZXR1cm5zIHJl
Z2lvbnMgbGlrZSBhbiBhcnJheSBmaXJzdD17MCxOLTF9LCBzZWNvbmQ9e04sTS0xfSwgLi4uCiAg
ICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbG9naWNhbEhlaWdodCgpICsgbG9naWNhbEhlaWdo
dEZvckxpbmUodGhpcywgZmFsc2UpIC0gTGF5b3V0VW5pdCgxKTsKICAgICAgICAgUmVuZGVyUmVn
aW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIGlmIChy
ZWdpb24pCi0gICAgICAgICAgICBzaGFwZUluc2lkZUluZm8gPSByZWdpb24tPmV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbygpOwotICAgICAgICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvICYmIHNoYXBl
SW5zaWRlSW5mby0+bmVlZHNSZW1vdmFsKCkgJiYgZXhjbHVzaW9uU2hhcGVTdGF0dXMgPT0gU2hh
cGVQcmVzZW50ID8gMCA6IHNoYXBlSW5zaWRlSW5mbzsKKyAgICAgICAgICAgIHNoYXBlSW5zaWRl
SW5mbyA9IHJlZ2lvbi0+c2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIHJldHVybiBzaGFwZUlu
c2lkZUluZm8gJiYgc2hhcGVJbnNpZGVJbmZvLT5uZWVkc1JlbW92YWwoKSAmJiBzaGFwZVN0YXR1
cyA9PSBTaGFwZVByZXNlbnQgPyAwIDogc2hhcGVJbnNpZGVJbmZvOwogICAgIH0KIAogICAgIHJl
dHVybiBzaGFwZUluc2lkZUluZm87CkBAIC0xMDksMTcgKzEwOSwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9sZWZ0KDApCiAgICAgICAgICwgbV9yaWdodCgwKQogICAgICAgICAsIG1fYXZhaWxh
YmxlV2lkdGgoMCkKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxFKENTU19T
SEFQRVMpCiAgICAgICAgICwgbV9zZWdtZW50KDApCiAjZW5kaWYKICAgICAgICAgLCBtX2lzRmly
c3RMaW5lKGlzRmlyc3RMaW5lKQogICAgICAgICAsIG1fc2hvdWxkSW5kZW50VGV4dChzaG91bGRJ
bmRlbnRUZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSNpZiBFTkFCTEUoQ1NT
X0VYQ0xVU0lPTlMpCi0gICAgICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KCk7Ci0gICAgICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lkZUluZm8pCi0gICAgICAgICAgICBt
X3NlZ21lbnQgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmN1cnJlbnRTZWdtZW50KCk7Cisj
aWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNp
ZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIGlmIChz
aGFwZUluc2lkZUluZm8pCisgICAgICAgICAgICBtX3NlZ21lbnQgPSBzaGFwZUluc2lkZUluZm8t
PmN1cnJlbnRTZWdtZW50KCk7CiAjZW5kaWYKICAgICAgICAgdXBkYXRlQXZhaWxhYmxlV2lkdGgo
KTsKICAgICB9CkBAIC0xNjMsNyArMTYzLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2xlZnQ7
CiAgICAgZmxvYXQgbV9yaWdodDsKICAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRoOwotI2lmIEVO
QUJMRShDU1NfRVhDTFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBjb25zdCBM
aW5lU2VnbWVudCogbV9zZWdtZW50OwogI2VuZGlmCiAgICAgYm9vbCBtX2lzRmlyc3RMaW5lOwpA
QCAtMTc3LDcgKzE3Nyw3IEBAIGlubGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxl
V2lkdGgoTGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCkKICAgICBtX2xlZnQgPSBtX2Jsb2NrLT5s
b2dpY2FsTGVmdE9mZnNldEZvckxpbmUoaGVpZ2h0LCBzaG91bGRJbmRlbnRUZXh0KCksIGxvZ2lj
YWxIZWlnaHQpOwogICAgIG1fcmlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JM
aW5lKGhlaWdodCwgc2hvdWxkSW5kZW50VGV4dCgpLCBsb2dpY2FsSGVpZ2h0KTsKIAotI2lmIEVO
QUJMRShDU1NfRVhDTFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBpZiAobV9z
ZWdtZW50KSB7CiAgICAgICAgIG1fbGVmdCA9IG1heDxmbG9hdD4obV9zZWdtZW50LT5sb2dpY2Fs
TGVmdCwgbV9sZWZ0KTsKICAgICAgICAgbV9yaWdodCA9IG1pbjxmbG9hdD4obV9zZWdtZW50LT5s
b2dpY2FsUmlnaHQsIG1fcmlnaHQpOwpAQCAtMTkzLDM0ICsxOTMsMzQgQEAgaW5saW5lIHZvaWQg
TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoUmVuZGVy
QmxvY2s6OkZsb2EKICAgICBpZiAoaGVpZ2h0IDwgbV9ibG9jay0+bG9naWNhbFRvcEZvckZsb2F0
KG5ld0Zsb2F0KSB8fCBoZWlnaHQgPj0gbV9ibG9jay0+bG9naWNhbEJvdHRvbUZvckZsb2F0KG5l
d0Zsb2F0KSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQor
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIC8vIFdoZW4gZmxvYXRzIHdpdGggc2hhcGUgb3V0
c2lkZSBhcmUgc3RhY2tlZCwgdGhlIGZsb2F0cyBhcmUgcG9zaXRpb25lZCBiYXNlZCBvbiB0aGUg
Ym91bmRpbmcgYm94IG9mIHRoZSBzaGFwZSwKICAgICAvLyBub3QgdGhlIHNoYXBlJ3MgY29udG91
ci4gU2luY2Ugd2UgY29tcHV0ZWQgdGhlIHdpZHRoIGJhc2VkIG9uIHRoZSBzaGFwZSBjb250b3Vy
IHdoZW4gd2UgYWRkZWQgdGhlIGZsb2F0LAogICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVu
dCBmbG9hdCBvbiB0aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRh
IGluIG9yZGVyIHRvIHBvc2l0aW9uCiAgICAgLy8gYmFzZWQgb24gdGhlIGJvdW5kaW5nIGJveC4g
SW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgbmVlZCB0byB3YWxrIGJhY2sgdGhyb3VnaCB0aGUgZmxv
YXRpbmcgb2JqZWN0IGxpc3QgdG8gZmluZAogICAgIC8vIHRoZSBmaXJzdCBwcmV2aW91cyBmbG9h
dCB0aGF0IGlzIG9uIHRoZSBzYW1lIHNpZGUgYXMgb3VyIG5ld0Zsb2F0LgotICAgIEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8qIGxhc3RTaGFwZU91dHNpZGVJbmZvID0gMDsKKyAgICBTaGFwZU91
dHNpZGVJbmZvKiBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CiAgICAgY29uc3QgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsKICAgICBmb3IgKC0taXQ7IGl0ICE9IGJlZ2luOyAtLWl0KSB7CiAgICAgICAgIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0ID0gKml0OwogICAgICAgICBpZiAobGFzdEZs
b2F0ICE9IG5ld0Zsb2F0ICYmIGxhc3RGbG9hdC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkp
IHsKLSAgICAgICAgICAgIGxhc3RTaGFwZU91dHNpZGVJbmZvID0gbGFzdEZsb2F0LT5yZW5kZXJl
cigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCk7CisgICAgICAgICAgICBsYXN0U2hhcGVP
dXRzaWRlSW5mbyA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwog
ICAgICAgICAgICAgaWYgKGxhc3RTaGFwZU91dHNpZGVJbmZvKQogICAgICAgICAgICAgICAgIGxh
c3RTaGFwZU91dHNpZGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxvZ2lj
YWxIZWlnaHQoKSAtIG1fYmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgbGFz
dFNoYXBlT3V0c2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpLCBsb2dpY2FsSGVpZ2h0Rm9yTGlu
ZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUlu
Zm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOwor
ICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVy
ZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgIGlmIChzaGFwZU91dHNpZGVJbmZvKQogICAg
ICAgICBzaGFwZU91dHNpZGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxv
Z2ljYWxIZWlnaHQoKSAtIG1fYmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCkgKyBz
aGFwZU91dHNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUo
bV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOwogI2VuZGlmCiAKICAgICBpZiAobmV3RmxvYXQtPnR5
cGUoKSA9PSBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkgewogICAgICAg
ICBmbG9hdCBuZXdMZWZ0ID0gbV9ibG9jay0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQobmV3RmxvYXQp
OwotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAg
ICAgICAgaWYgKGxhc3RTaGFwZU91dHNpZGVJbmZvKQogICAgICAgICAgICAgbmV3TGVmdCAtPSBs
YXN0U2hhcGVPdXRzaWRlSW5mby0+cmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCk7
CiAgICAgICAgIGlmIChzaGFwZU91dHNpZGVJbmZvKQpAQCAtMjMyLDcgKzIzMiw3IEBAIGlubGlu
ZSB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVk
KFJlbmRlckJsb2NrOjpGbG9hCiAgICAgICAgIG1fbGVmdCA9IG1heDxmbG9hdD4obV9sZWZ0LCBu
ZXdMZWZ0KTsKICAgICB9IGVsc2UgewogICAgICAgICBmbG9hdCBuZXdSaWdodCA9IG1fYmxvY2st
PmxvZ2ljYWxMZWZ0Rm9yRmxvYXQobmV3RmxvYXQpOwotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9O
UykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgaWYgKGxhc3RTaGFwZU91dHNpZGVJ
bmZvKQogICAgICAgICAgICAgbmV3UmlnaHQgLT0gbGFzdFNoYXBlT3V0c2lkZUluZm8tPmxlZnRT
ZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCk7CiAgICAgICAgIGlmIChzaGFwZU91dHNpZGVJ
bmZvKQpAQCAtNjgzLDcgKzY4Myw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RMaW5lKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QKICAgICAgICAg
Ly8gdGhlbiB3ZSBuZWVkIHRvIGNvbnN0cnVjdCBpbmxpbmUgYm94ZXMgYXMgbmVjZXNzYXJ5IHRv
IHByb3Blcmx5IGVuY2xvc2UgdGhlCiAgICAgICAgIC8vIHJ1bidzIGlubGluZSBib3guIFNlZ21l
bnRzIGNhbiBvbmx5IGJlIHNpYmxpbmdzIGF0IHRoZSByb290IGxldmVsLCBhcwogICAgICAgICAv
LyB0aGV5IGFyZSBwb3NpdGlvbmVkIHNlcGFyYXRlbHkuCi0jaWYgRU5BQkxFKENTU19FWENMVVNJ
T05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBib29sIHJ1blN0YXJ0c1NlZ21l
bnQgPSByLT5tX3N0YXJ0c1NlZ21lbnQ7CiAjZWxzZQogICAgICAgICBib29sIHJ1blN0YXJ0c1Nl
Z21lbnQgPSBmYWxzZTsKQEAgLTkyMyw3ICs5MjMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29t
cHV0ZUV4cGFuc2lvbkZvckp1c3RpZmllZFRleHQoQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4q
CiAKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChCaWRpUnVuKiByID0gZmlyc3RSdW47IHI7
IHIgPSByLT5uZXh0KCkpIHsKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxF
KENTU19TSEFQRVMpCiAgICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHBlciBz
ZWdtZW50LCBkbyBub3QgbW92ZSBwYXN0IHRoZSBjdXJyZW50IHNlZ21lbnQuCiAgICAgICAgIGlm
IChyLT5tX3N0YXJ0c1NlZ21lbnQpCiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMzcsMTEgKzEw
MzcsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCwKICAgICBmbG9hdCBhdmFpbGFibGVMb2dp
Y2FsV2lkdGg7CiAgICAgdXBkYXRlTG9naWNhbElubGluZVBvc2l0aW9ucyh0aGlzLCBsaW5lTG9n
aWNhbExlZnQsIGxpbmVMb2dpY2FsUmlnaHQsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaXNGaXJz
dExpbmUsIHNob3VsZEluZGVudFRleHQsIDApOwogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2luZzsK
LSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8oKTsKLSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAg
IFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZv
KCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAmJiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21l
bnRzKCkpIHsKICAgICAgICAgQmlkaVJ1biogc2VnbWVudFN0YXJ0ID0gZmlyc3RSdW47Ci0gICAg
ICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by0+c2VnbWVudHMoKTsKKyAgICAgICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzID0gc2hh
cGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOwogICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1h
eDxmbG9hdD4ocm91bmRUb0ludChzZWdtZW50c1swXS5sb2dpY2FsTGVmdCksIGxpbmVMb2dpY2Fs
TGVmdCk7CiAgICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodCA9IG1pbjxmbG9hdD4oZmxvb3JUb0lu
dChzZWdtZW50c1swXS5sb2dpY2FsUmlnaHQpLCBsaW5lTG9naWNhbFJpZ2h0KTsKICAgICAgICAg
ZmxvYXQgc3RhcnRMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0OwpAQCAtMTA5NCw3ICsxMDk0LDcg
QEAgQmlkaVJ1biogUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNG
b3JTZWdtZW50KFJvb3RJbmxpbmVCb3gqIGwKIAogICAgIEJpZGlSdW4qIHIgPSBmaXJzdFJ1bjsK
ICAgICBmb3IgKDsgcjsgciA9IHItPm5leHQoKSkgewotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9O
UykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHJlYWNo
ZWQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHNlZ21lbnQsIHdlIGhhdmUgZmluaXNoZWQKICAgICAg
ICAgLy8gY29tcHV0aW5nIHRoZSBwb3NpdGlvbnMgZm9yIHRoaXMgc2VnbWVudCdzIGNvbnRlbnRz
LgogICAgICAgICBpZiAoci0+bV9zdGFydHNTZWdtZW50KQpAQCAtMTM1OCwxNyArMTM1OCwxNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJp
ZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RC
aWRpUnVuc0ZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBJbmxpbmVCaWRpUmVzb2x2
ZXImIHRvcFJlc29sdmVyLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IElu
bGluZUl0ZXJhdG9yJiBlbmRPZkxpbmUsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRl
LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKIHsKLSNpZiAhRU5BQkxFKENTU19FWENM
VVNJT05TKQorI2lmICFFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBVTlVTRURfUEFSQU0oYmxvY2sp
OwogICAgIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudCh0b3BSZXNvbHZlciwgYmlkaVJ1bnMs
IGVuZE9mTGluZSwgb3ZlcnJpZGUsIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiAjZWxzZQot
ICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0g
YmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmICghZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvIHx8ICFleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmhhc1NlZ21l
bnRzKCkpIHsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGJsb2NrLT5s
YXlvdXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbyB8fCAhc2hh
cGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CiAgICAgICAgIGNvbnN0cnVjdEJpZGlSdW5z
Rm9yU2VnbWVudCh0b3BSZXNvbHZlciwgYmlkaVJ1bnMsIGVuZE9mTGluZSwgb3ZlcnJpZGUsIHBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBj
b25zdCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLT5zZWdtZW50UmFuZ2VzKCk7CisgICAgY29uc3QgU2VnbWVudFJhbmdlTGlzdCYgc2Vn
bWVudFJhbmdlcyA9IHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOwogICAgIEFTU0VS
VChzZWdtZW50UmFuZ2VzLnNpemUoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNl
Z21lbnRSYW5nZXMuc2l6ZSgpOyBpKyspIHsKQEAgLTE2MjQsNyArMTYyNCw3IEBAIGlubGluZSBj
b25zdCBJbmxpbmVJdGVyYXRvciYgUmVuZGVyQmxvY2s6OnJlc3RhcnRMYXlvdXRSdW5zQW5kRmxv
YXRzSW5SYW5nZShMYXlvCiAgICAgcmV0dXJuIG9sZEVuZDsKIH0KIAotI2lmIEVOQUJMRShDU1Nf
RVhDTFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKIHN0YXRpYyBpbmxpbmUgZmxvYXQg
Zmlyc3RQb3NpdGl2ZVdpZHRoKGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVu
dHMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkTWVhc3VyZW1lbnRzLnNpemUo
KTsgKytpKSB7CkBAIC0xNjM0LDI2ICsxNjM0LDI2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgZmly
c3RQb3NpdGl2ZVdpZHRoKGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMp
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBhZGp1c3RMb2dp
Y2FsTGluZVRvcChFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbywgSW5saW5lSXRlcmF0b3Igc3RhcnQsIElubGluZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29y
ZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cykKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5p
dCBhZGp1c3RMb2dpY2FsTGluZVRvcChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywg
SW5saW5lSXRlcmF0b3Igc3RhcnQsIElubGluZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29yZE1lYXN1
cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cykKIHsKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyB8fCBlbmQgIT0gc3RhcnQpCisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8gfHwgZW5k
ICE9IHN0YXJ0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGZsb2F0IG1pbldpZHRoID0gZmly
c3RQb3NpdGl2ZVdpZHRoKHdvcmRNZWFzdXJlbWVudHMpOwogICAgIEFTU0VSVChtaW5XaWR0aCB8
fCB3b3JkTWVhc3VyZW1lbnRzLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1pbldpZHRoID4gMCAmJiBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmFkanVzdExvZ2ljYWxMaW5lVG9wKG1pbldpZHRoKSkK
LSAgICAgICAgcmV0dXJuIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVUb3Ao
KTsKKyAgICBpZiAobWluV2lkdGggPiAwICYmIHNoYXBlSW5zaWRlSW5mby0+YWRqdXN0TG9naWNh
bExpbmVUb3AobWluV2lkdGgpKQorICAgICAgICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvLT5sb2dp
Y2FsTGluZVRvcCgpOwogCi0gICAgcmV0dXJuIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hh
cGVMb2dpY2FsQm90dG9tKCk7CisgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dp
Y2FsQm90dG9tKCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUxpbmVCb3VuZGFyaWVz
Rm9yRXhjbHVzaW9ucyhFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbywgTGF5b3V0VW5pdCYgYWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBib29sJiBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKQordm9pZCBS
ZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMoU2hhcGVJbnNpZGVJbmZv
KiBzaGFwZUluc2lkZUluZm8sIExheW91dFVuaXQmIGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgYm9vbCYgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lk
ZSkKIHsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSB0aGlzLT5sb2dpY2FsSGVpZ2h0
KCk7CiAgICAgUmVuZGVyUmVnaW9uKiBjdXJyZW50UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNl
dChsb2dpY2FsSGVpZ2h0KTsKICAgICBpZiAoY3VycmVudFJlZ2lvbikKLSAgICAgICAgZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0g
ICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8pCisgICAgICAgIHNoYXBlSW5zaWRlSW5m
byA9IGxheW91dFNoYXBlSW5zaWRlSW5mbygpOworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvKQog
ICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRVbml0IGxpbmVUb3AgPSBsb2dpY2FsSGVpZ2h0
ICsgYWJzb2x1dGVMb2dpY2FsVG9wOwpAQCAtMTY2MSwxOCArMTY2MSwxOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKiBleAogCiAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkgewogICAg
ICAgICBSZW5kZXJSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2lj
YWxIZWlnaHQgKyBsaW5lSGVpZ2h0IC0gTGF5b3V0VW5pdCgxKSk7Ci0gICAgICAgIGxpbmVUb3Ag
Kz0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCk7CisgICAgICAgIGxpbmVUb3AgKz0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3Jk
ZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgIC8vIENvbnRlbnQgaW4gYSBmbG93IHRocmVh
ZCBpcyByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aHJlYWQsIGJ1dCB0aGUgc2hh
cGUgY2FsY3VsYXRpb24gc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHJlZ2lvbi4K
ICAgICAgICAgaWYgKGN1cnJlbnRSZWdpb24gPT0gbmV4dFJlZ2lvbikKICAgICAgICAgICAgIGxp
bmVUb3AgLT0gY3VycmVudFJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCk7
CiAgICAgfQogCiAgICAgLy8gRklYTUU6IEJ1ZyA5NTM2MTogSXQgaXMgcG9zc2libGUgZm9yIGEg
bGluZSB0byBncm93IGJleW9uZCBsaW5lSGVpZ2h0LCBpbiB3aGljaCBjYXNlIHRoZXNlIHNlZ21l
bnRzIG1heSBiZSBpbmNvcnJlY3QuCi0gICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5jb21w
dXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpOworICAgIHNoYXBlSW5zaWRl
SW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKIAogICAg
IC8vIFRoZSBvdmVyZmxvdyBzaG91bGQgYmUgcHVzaGVkIGJlbG93IHRoZSBjb250ZW50IGJveAot
ICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgPSBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8tPnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KCk7Ci0gICAgaWYgKCFleGNs
dXNpb25TaGFwZUluc2lkZUluZm8tPmxpbmVXaXRoaW5TaGFwZUJvdW5kcygpICYmICFsaW5lT3Zl
cmZsb3dzRnJvbVNoYXBlSW5zaWRlICYmIHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7Cisg
ICAgTGF5b3V0VW5pdCBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IHNoYXBlSW5zaWRlSW5m
by0+c2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5m
by0+bGluZVdpdGhpblNoYXBlQm91bmRzKCkgJiYgIWxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNp
ZGUgJiYgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQpIHsKICAgICAgICAgbGluZU92ZXJmbG93
c0Zyb21TaGFwZUluc2lkZSA9IHRydWU7CiAgICAgICAgIExheW91dFVuaXQgbmV3TG9naWNhbEhl
aWdodCA9IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0OwogCkBAIC0xNjg0LDkgKzE2ODQsOSBA
QCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleAogICAgICAgICAgICAgbmV3TG9naWNhbEhlaWdodCA9
IGxvZ2ljYWxIZWlnaHQgKyBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCAtIGxpbmVUb3AgLSBj
dXJyZW50UmVnaW9uLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAKICAgICAgICAgICAgIFJl
bmRlclJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobmV3TG9naWNhbEhl
aWdodCk7Ci0gICAgICAgICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIG5leHRTaGFwZUlu
Zm8gPSAwOworICAgICAgICAgICAgU2hhcGVJbnNpZGVJbmZvKiBuZXh0U2hhcGVJbmZvID0gMDsK
ICAgICAgICAgICAgIGlmIChuZXh0UmVnaW9uKQotICAgICAgICAgICAgICAgIG5leHRTaGFwZUlu
Zm8gPSBuZXh0UmVnaW9uLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgICAg
ICAgICBuZXh0U2hhcGVJbmZvID0gbmV4dFJlZ2lvbi0+c2hhcGVJbnNpZGVJbmZvKCk7CiAKICAg
ICAgICAgICAgIC8vIFRoZSBvdmVyZmxvdyBmbG93cyBpbnRvIGFub3RoZXIgcmVnaW9uIHdpdGgg
c2hhcGUtaW5zaWRlCiAgICAgICAgICAgICBpZiAoY3VycmVudFJlZ2lvbiAhPSBuZXh0UmVnaW9u
ICYmIG5leHRTaGFwZUluZm8pIHsKQEAgLTE2OTUsNyArMTY5NSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yRXhjbHVzaW9ucyhFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8qIGV4CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBuZXh0U2hhcGVJ
bmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSAtIG5leHRSZWdpb24tPmJvcmRlckFuZFBhZGRpbmdCZWZv
cmUoKTsKICAgICAgICAgICAgICAgICBuZXh0U2hhcGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JM
aW5lKG9mZnNldCwgbGluZUhlaWdodCk7CiAKLSAgICAgICAgICAgICAgICBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8gPSBuZXh0U2hhcGVJbmZvOworICAgICAgICAgICAgICAgIHNoYXBlSW5zaWRl
SW5mbyA9IG5leHRTaGFwZUluZm87CiAgICAgICAgICAgICAgICAgbGluZU92ZXJmbG93c0Zyb21T
aGFwZUluc2lkZSA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzAzLDkg
KzE3MDMsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1
c2lvbnMoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleAogICAgIH0KIH0KIAotYm9vbCBSZW5k
ZXJCbG9jazo6YWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIExheW91dFVu
aXQgYWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSwgSW5saW5lSXRlcmF0b3ImIGVuZCwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1l
YXN1cmVtZW50cykKK2Jvb2wgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9n
aWNhbEhlaWdodElmTmVlZGVkKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvLCBMYXlv
dXRVbml0IGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwg
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZy
b21QcmV2aW91c0xpbmUsIElubGluZUl0ZXJhdG9yJiBlbmQsIFdvcmRNZWFzdXJlbWVudHMmIHdv
cmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgTGF5b3V0VW5pdCBhZGp1c3RlZExvZ2ljYWxMaW5lVG9w
ID0gYWRqdXN0TG9naWNhbExpbmVUb3AoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCByZXNvbHZl
ci5wb3NpdGlvbigpLCBlbmQsIHdvcmRNZWFzdXJlbWVudHMpOworICAgIExheW91dFVuaXQgYWRq
dXN0ZWRMb2dpY2FsTGluZVRvcCA9IGFkanVzdExvZ2ljYWxMaW5lVG9wKHNoYXBlSW5zaWRlSW5m
bywgcmVzb2x2ZXIucG9zaXRpb24oKSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKTsKICAgICBpZiAo
IWFkanVzdGVkTG9naWNhbExpbmVUb3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTcz
MCwyMSArMTczMCwyMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5S
YW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogCiAgICAgTGluZUJyZWFr
ZXIgbGluZUJyZWFrZXIodGhpcyk7CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYg
RU5BQkxFKENTU19TSEFQRVMpCiAgICAgTGF5b3V0VW5pdCBhYnNvbHV0ZUxvZ2ljYWxUb3A7Ci0g
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBs
YXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKSB7Ci0gICAgICAgIEFTU0VSVChleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPm93
bmVyKCkgPT0gdGhpcyB8fCBhbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkp
OwotICAgICAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICE9IHRoaXMtPmV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbygpKSB7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUlu
Zm8gPSBsYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKSB7
CisgICAgICAgIEFTU0VSVChzaGFwZUluc2lkZUluZm8tPm93bmVyKCkgPT0gdGhpcyB8fCBhbGxv
d3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpOworICAgICAgICBpZiAoc2hhcGVJbnNpZGVJbmZv
ICE9IHRoaXMtPnNoYXBlSW5zaWRlSW5mbygpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcg
MTAwMjg0OiBJZiBzdWJzZXF1ZW50IExheW91dFN0YXRlcyBhcmUgcHVzaGVkLCB3ZSB3aWxsIGhh
dmUgdG8gYWRkCiAgICAgICAgICAgICAvLyB0aGVpciBvZmZzZXRzIGZyb20gdGhlIG9yaWdpbmFs
IHNoYXBlLWluc2lkZSBjb250YWluZXIuCiAgICAgICAgICAgICBhYnNvbHV0ZUxvZ2ljYWxUb3Ag
PSBsb2dpY2FsVG9wKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gQmVnaW4gbGF5b3V0IGF0IHRo
ZSBsb2dpY2FsIHRvcCBvZiBvdXIgc2hhcGUgaW5zaWRlLgotICAgICAgICBpZiAobG9naWNhbEhl
aWdodCgpICsgYWJzb2x1dGVMb2dpY2FsVG9wIDwgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5z
aGFwZUxvZ2ljYWxUb3AoKSkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
ID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSAtIGFic29sdXRl
TG9naWNhbFRvcDsKKyAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQoKSArIGFic29sdXRlTG9naWNh
bFRvcCA8IHNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkpIHsKKyAgICAgICAgICAg
IExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IHNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2Fs
VG9wKCkgLSBhYnNvbHV0ZUxvZ2ljYWxUb3A7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUu
Zmxvd1RocmVhZCgpKQotICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CisgICAg
ICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBzaGFwZUluc2lkZUluZm8tPm93bmVyKCktPmJv
cmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9n
aWNhbEhlaWdodCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzcxLDggKzE3NzEsOCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBJbmxpbgogICAgICAgICBib29sIGlzTmV3VUJBUGFyYWdyYXBoID0gbGF5
b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKTsKICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAoY29udGFpbnNGbG9h
dHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpIDogMDsKIAotI2lmIEVOQUJM
RShDU1NfRVhDTFVTSU9OUykKLSAgICAgICAgdXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNp
b25zKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dpY2FsVG9wLCBsYXlvdXRT
dGF0ZSwgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSk7CisjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCisgICAgICAgIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yU2hhcGVzKHNoYXBlSW5zaWRlSW5m
bywgYWJzb2x1dGVMb2dpY2FsVG9wLCBsYXlvdXRTdGF0ZSwgbGluZU92ZXJmbG93c0Zyb21TaGFw
ZUluc2lkZSk7CiAjZW5kaWYKICAgICAgICAgV29yZE1lYXN1cmVtZW50cyB3b3JkTWVhc3VyZW1l
bnRzOwogICAgICAgICBlbmQgPSBsaW5lQnJlYWtlci5uZXh0TGluZUJyZWFrKHJlc29sdmVyLCBs
YXlvdXRTdGF0ZS5saW5lSW5mbygpLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJlbWVudHMpOwpA
QCAtMTc4Nyw4ICsxNzg3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0
c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgICAg
IGlmIChhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChleGNsdXNp
b25TaGFwZUluc2lkZUluZm8sIGFic29sdXRlTG9naWNhbFRvcCwgbGF5b3V0U3RhdGUsIHJlc29s
dmVyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBlbmQsIHdvcmRNZWFzdXJlbWVudHMpKQor
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgICAgICBpZiAoYWRqdXN0TG9naWNhbExpbmVUb3BB
bmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoc2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2ljYWxU
b3AsIGxheW91dFN0YXRlLCByZXNvbHZlciwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgZW5k
LCB3b3JkTWVhc3VyZW1lbnRzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAg
ICAgIEFTU0VSVChlbmQgIT0gcmVzb2x2ZXIucG9zaXRpb24oKSk7CkBAIC0yNzM4LDMyICsyNzM4
LDMyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpyZXNldCgpCiAKIElubGluZUl0
ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRp
UmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lSW5mbyYgbGluZUluZm8sIFJlbmRlclRleHRJbmZvJiBy
ZW5kZXJUZXh0SW5mbywgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUs
IHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCBXb3JkTWVhc3VyZW1lbnRzJiB3
b3JkTWVhc3VyZW1lbnRzKQogewotI2lmICFFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgIUVO
QUJMRShDU1NfU0hBUEVTKQogICAgIHJldHVybiBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBs
aW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNl
Y3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKICNlbHNlCi0gICAgRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBtX2Jsb2Nr
LT5sYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8q
IHNoYXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogCi0g
ICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgIWV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby0+bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5m
byB8fCAhc2hhcGVJbnNpZGVJbmZvLT5saW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQogICAgICAg
ICByZXR1cm4gbmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRleHRJ
bmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5l
cywgd29yZE1lYXN1cmVtZW50cyk7CiAKICAgICAvLyBJbiBsYXlvdXRSdW5zQW5kRmxvYXRzSW5S
YW5nZSB3ZSBoYXZlIHRvIHVzZSBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpIHRvIGRldGVybWlu
ZSB0aGUgbGluZSBzZWdtZW50cyBzaW5jZSBzaGFwZS1vdXRzaWRlJ3MgY29kZXBhdGhzIHVzZXMg
dGhlIHNhbWUgY29kZSB0byBkZXRlcm1pbmUgaXRzIHNlZ21lbnRzLiBUaGUgbGluZSBjb250YWlu
aW5nIGlzIG5vdCBhIHJlcXVpcmVtZW50IGZvciBzaGFwZS1vdXRzaWRlLAogICAgIC8vIHNvIGlu
IHRoaXMgY2FzZSB3ZSBjYW4gZW5kIHVwIHdpdGggc29tZSBleHRyYSBzZWdtZW50cyBmb3IgdGhl
IG92ZXJmbG93aW5nIGNvbnRlbnQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFwcGx5IHRoZSBzZWdt
ZW50cyBmb3IgdGhlIG92ZXJmbG93aW5nIGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gcmVzZXQgaXQu
Ci0gICAgaWYgKCFtX2Jsb2NrLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgJiYgIWV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby0+bGluZVdpdGhpblNoYXBlQm91bmRzKCkpIHsKLSAgICAgICAg
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5jbGVhclNlZ21lbnRzKCk7CisgICAgaWYgKCFtX2Js
b2NrLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgJiYgIXNoYXBlSW5zaWRlSW5mby0+bGlu
ZVdpdGhpblNoYXBlQm91bmRzKCkpIHsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5jbGVhclNl
Z21lbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5l
SW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0
aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKICAgICB9CiAKICAgICBJbmxp
bmVJdGVyYXRvciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwogICAgIElubGluZUl0ZXJhdG9y
IG9sZEVuZCA9IGVuZDsKIAotICAgIGlmICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5oYXNT
ZWdtZW50cygpKSB7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsK
ICAgICAgICAgZW5kID0gbmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRl
clRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0
ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9u
SWdub3JpbmdOZXN0ZWRJc29sYXRlcyhvbGRFbmQpOwogICAgICAgICByZXR1cm4gb2xkRW5kOwog
ICAgIH0KIAotICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50cyA9IGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+c2VnbWVudHMoKTsKLSAgICBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFu
Z2VzID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50UmFuZ2VzKCk7CisgICAgY29u
c3QgU2VnbWVudExpc3QmIHNlZ21lbnRzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOwor
ICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBzaGFwZUluc2lkZUluZm8tPnNl
Z21lbnRSYW5nZXMoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWdtZW50cy5z
aXplKCkgJiYgIWVuZC5hdEVuZCgpOyBpKyspIHsKICAgICAgICAgSW5saW5lSXRlcmF0b3Igc2Vn
bWVudFN0YXJ0ID0gcmVzb2x2ZXIucG9zaXRpb24oKTsKQEAgLTM0MDAsOCArMzQwMCw4IEBAIElu
bGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCcmVhayhJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlCiAgICAgICAgIGxCcmVhay5jbGVhcigpOwogCiAgZW5kOgot
I2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IHNoYXBlSW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwor
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbmZvID0g
bV9ibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgYm9vbCBzZWdtZW50QWxsb3dz
T3ZlcmZsb3cgPSAhc2hhcGVJbmZvIHx8ICFzaGFwZUluZm8tPmhhc1NlZ21lbnRzKCk7CiAjZWxz
ZQogICAgIGJvb2wgc2VnbWVudEFsbG93c092ZXJmbG93ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZDdkOGM3Mjk3MTZkZGY2M2IyNWE3Mjg2YTlkNDFm
YjczM2I1YWY0Yi4uOTAwYTI1YTQ3YjM2YWM3NWJjZDYxNmIzNzJhMGNkYzUyYTlmNTVjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTE2Miw4ICsxNjIsOCBAQCB2
b2lkIFJlbmRlckJveDo6d2lsbEJlRGVzdHJveWVkKCkKIAogICAgIFJlbmRlckJsb2NrOjpyZW1v
dmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudElmTmVlZGVkKHRoaXMpOwogCi0jaWYgRU5BQkxFKENT
U19FWENMVVNJT05TKQotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8o
dGhpcyk7CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgU2hhcGVPdXRzaWRlSW5mbzo6cmVt
b3ZlSW5mbyh0aGlzKTsKICNlbmRpZgogCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OndpbGxC
ZURlc3Ryb3llZCgpOwpAQCAtMzE0LDIzICszMTQsMjMgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUKICAgICAgICAgZnJhbWUoKS0+dmlldygpLT5yZWNhbGN1bGF0ZVNjcm9sbGJhck92ZXJsYXlT
dHlsZSgpOwogICAgIH0KIAotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICB1cGRhdGVF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShzdHlsZSgpLT5zaGFwZU91
dHNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVPdXRzaWRlKCkgOiAwKTsKKyNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKKyAgICB1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZShzdHlsZSgpLT5zaGFwZU91dHNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVP
dXRzaWRlKCkgOiAwKTsKICNlbmRpZgogfQogCi0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQot
dm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxl
Q2hhbmdlKGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwgY29uc3QgRXhj
bHVzaW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKQorI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQordm9pZCBSZW5kZXJCb3g6OnVwZGF0ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdl
KGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwgY29uc3QgU2hhcGVWYWx1ZSogb2xkU2hh
cGVPdXRzaWRlKQogewogICAgIC8vIEZJWE1FOiBBIGZ1dHVyZSBvcHRpbWl6YXRpb24gd291bGQg
ZG8gYSBkZWVwIGNvbXBhcmlzb24gZm9yIGVxdWFsaXR5LiAoYnVnIDEwMDgxMSkKICAgICBpZiAo
c2hhcGVPdXRzaWRlID09IG9sZFNoYXBlT3V0c2lkZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHNoYXBlT3V0c2lkZSkgewotICAgICAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBl
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvID0gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6ZW5z
dXJlSW5mbyh0aGlzKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby0+ZGlydHlT
aGFwZVNpemUoKTsKKyAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5mbyA9
IFNoYXBlT3V0c2lkZUluZm86OmVuc3VyZUluZm8odGhpcyk7CisgICAgICAgIHNoYXBlT3V0c2lk
ZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CisgICAgICAgIFNoYXBlT3V0c2lkZUlu
Zm86OnJlbW92ZUluZm8odGhpcyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCmluZGV4IGE0OGI5MTk1N2IzOGMzOWU3ZWM5Zjk4N2ZiOTZjNGJmNjU1ZjBhNzYu
LmE3ZmMxZWNlY2ZkM2M4MDYxY2ExYjZkZjBjMDNkNzRjOThiNjY5MWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJSZW5kZXJC
b3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlck92ZXJmbG93LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVHlwZXMuaCIKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0jaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIgorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorI2luY2x1
ZGUgIlNoYXBlT3V0c2lkZUluZm8uaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01NzYsMTAgKzU3NiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1NhbWVEaXJlY3Rpb25B
cyhjb25zdCBSZW5kZXJCb3gqIG9iamVjdCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+ZGlyZWN0
aW9uKCkgPT0gb2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKTsgfQogCi0jaWYgRU5BQkxFKENT
U19FWENMVVNJT05TKQotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIGV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8oKSBjb25zdAorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIFNoYXBl
T3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIGlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYgRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpID8gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6aW5m
byh0aGlzKSA6IDA7CisgICAgICAgIHJldHVybiBpc0Zsb2F0aW5nV2l0aFNoYXBlT3V0c2lkZSgp
ICYmIFNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcih0aGlzKSA/IFNoYXBlT3V0c2lkZUlu
Zm86OmluZm8odGhpcykgOiAwOwogICAgIH0KICNlbmRpZgogCkBAIC02MjMsOCArNjIzLDggQEAg
cHJvdGVjdGVkOgogICAgIFJlbmRlck9iamVjdCogc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENo
aWxkKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUo
Q1NTX0VYQ0xVU0lPTlMpCi0gICAgdm9pZCB1cGRhdGVFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZv
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUs
IGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNoYXBlT3V0c2lkZSk7CisjaWYgRU5BQkxF
KENTU19TSEFQRVMpCisgICAgdm9pZCB1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZShjb25zdCBTaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNvbnN0IFNoYXBlVmFsdWUqIG9s
ZFNoYXBlT3V0c2lkZSk7CiAjZW5kaWYKIAogICAgIGJvb2wgZml4ZWRFbGVtZW50TGF5c091dFJl
bGF0aXZlVG9GcmFtZShGcmFtZSosIEZyYW1lVmlldyopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYjA4Y2QxMTAz
ZTQyMzI1NmI4YWMxODU5YWNhYzNmYTczOGRlMDEyZC4uYWJhZDViNzJhMzk0MjdhMzA0OGU1MWJm
NDlhZmNmYTUzZjA0MWU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02MjUsOSArNjI1LDkgQEAgTGF5b3V0U2l6ZSBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRPZmZzZXQoKSBjb25zdAogewogICAgIExheW91dFNpemUg
b2Zmc2V0ID0gb2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKTsKIAotI2lmIEVOQUJMRShDU1NfRVhD
TFVTSU9OUykKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBpZiAoaXNCb3goKSAmJiBpc0Zs
b2F0aW5nKCkpCi0gICAgICAgIGlmIChFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91
dHNpZGUgPSB0b1JlbmRlckJveCh0aGlzKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKQor
ICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gdG9SZW5kZXJCb3go
dGhpcyktPnNoYXBlT3V0c2lkZUluZm8oKSkKICAgICAgICAgICAgIG9mZnNldCAtPSBzaGFwZU91
dHNpZGUtPnNoYXBlTG9naWNhbE9mZnNldCgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDlmMDRiOWZlYWI4ODYxZjZlOWZlZmYyMGI1Yzhi
YjVhNGExMDg2YWEuLjFlMWIyODE3OGY5MGU4ZTcwODViMGZhMmJlZWEzMmFjY2ExODA4ZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNTk2Nyw3ICs1OTY3
LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0CiAj
ZW5kaWYKICAgICAgICAgICAgICYmICFpc1RyYW5zcGFyZW50KCkKICAgICAgICAgICAgICYmICFu
ZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKQotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKKyNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgICAgICYmICFyZW5kZXJlcigpLT5pc0Zsb2F0
aW5nV2l0aFNoYXBlT3V0c2lkZSgpCiAjZW5kaWYKICAgICAgICAgICAgIDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBhNjkyYmQxOGZmNjg4ZjA4MThkMWQ1MmJj
ZjVkMjE5Yjk4NWYzMjg0Li45MzU3YWM1ZmQ1OTJkNmY1ODkxNTZjNjgwYTc3ZmZjODMwNGQ1YjEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC01NDUsNyArNTQ1
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGFpbnRPZmZzZXQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgYm9vbCBwb3NpdGlvbmVkID0gaXNJbkZsb3dQb3NpdGlvbmVkKCk7Ci0jaWYgRU5BQkxF
KENTU19FWENMVVNJT05TKQorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICAvLyBTaGFw
ZSBvdXRzaWRlIG9uIGEgZmxvYXQgY2FuIHJlcG9zaXRpb24gdGhlIGZsb2F0IGluIG11Y2ggdGhl
CiAgICAgICAgIC8vIHNhbWUgd2F5IGFzIHJlbGF0aXZlIHBvc2l0aW9uaW5nLCBzbyB0cmVhdCBp
dCBhcyBzdWNoLgogICAgICAgICBwb3NpdGlvbmVkID0gcG9zaXRpb25lZCB8fCBpc0Zsb2F0aW5n
V2l0aFNoYXBlT3V0c2lkZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5k
ZXggMGQxOWIyYTdmMDlhNmYwYjlmYWY4YjVkNjc0NmE4MDE2ODA0MDVkOC4uYWU1NDM0ZmM1OTdl
OGE0YmZkNjkwNGMzNDEzYjA2YmJjNTZkNmRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCkBAIC0yNDgsOSArMjQ4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgcHVz
aCBMYXlvdXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQg
c3RvcmVzIGxheW91dERlbHRhIHRvby4KICAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkg
fHwgbV9sYXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygp
IHx8IHJlbmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAgICAgIHx8
IG1fbGF5b3V0U3RhdGUtPmxpbmVHcmlkKCkgfHwgKHJlbmRlcmVyLT5zdHlsZSgpLT5saW5lR3Jp
ZCgpICE9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUdyaWQoKSAmJiByZW5kZXJlci0+aXNCbG9j
a0Zsb3coKSkKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAgICAgICAgICB8fCAocmVu
ZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+ZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKCkpCi0gICAgICAgICAgICB8fCAobV9sYXlvdXRTdGF0ZS0+ZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgJiYgcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiAh
dG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1No
YXJpbmcoKSkKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAgICAgICAgIHx8IChyZW5kZXJl
ci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5zaGFwZUluc2lk
ZUluZm8oKSkKKyAgICAgICAgICAgIHx8IChtX2xheW91dFN0YXRlLT5zaGFwZUluc2lkZUluZm8o
KSAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICF0b1JlbmRlckJsb2NrKHJlbmRlcmVy
KS0+YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQogI2VuZGlmCiAgICAgICAgICAgICAp
IHsKICAgICAgICAgICAgIHB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKHJlbmRl
cmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdv
blNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMjEyNGZkNTYwNzMzNTYzYjRhMGM4NzhhMzg2ZmQ0NDBjYTUyODMx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5
Z29uU2hhcGUuY3BwCkBAIC0wLDAgKzEsNTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsK
KyAgICBOb3JtYWwsCisgICAgVmVydGV4TWluWSwKKyAgICBWZXJ0ZXhNYXhZLAorICAgIFZlcnRl
eFlCb3RoCit9OworCitzdHJ1Y3QgRWRnZUludGVyc2VjdGlvbiB7CisgICAgY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSogZWRnZTsKKyAgICBGbG9hdFBvaW50IHBvaW50OworICAgIEVkZ2VJbnRlcnNl
Y3Rpb25UeXBlIHR5cGU7Cit9OworCitzdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0
IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiAoKHBvaW50LngoKSAtIHZlcnRleDEueCgp
KSAqICh2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkgLSAoKHZlcnRleDIueCgpIC0gdmVydGV4
MS54KCkpICogKHBvaW50LnkoKSAtIHZlcnRleDEueSgpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1JlZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCit7CisgICAg
cmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAwOworfQor
CitzdGF0aWMgYm9vbCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdl
KiBlZGdlUG9pbnRlciwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQoreworICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CisKKyAgICBpZiAo
ZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOworICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKKyAgICBmbG9hdCBk
eSA9IHZlcnRleDIueSgpIC0gdmVydGV4MS55KCk7CisKKyAgICBmbG9hdCBpbnRlcnNlY3Rpb25Y
OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7CisKKyAgICBpZiAo
IWR5KSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKKyAgICAgICAg
aW50ZXJzZWN0aW9uWCA9IGVkZ2UubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1p
blkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKKyAgICAgICAg
aW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgp
IDogdmVydGV4Mi54KCk7CisgICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7CisgICAg
ICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNYXhZOworICAgICAgICBpbnRlcnNlY3Rpb25Y
ID0gKHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOworICAg
ICAgICBpbnRlcnNlY3Rpb25YID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0g
dmVydGV4MS54KCkpIC8gZHkpICsgdmVydGV4MS54KCk7CisgICAgfQorCisgICAgcmVzdWx0LmVk
Z2UgPSBlZGdlUG9pbnRlcjsKKyAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7Cisg
ICAgcmVzdWx0LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBpbndhcmRFZGdlTm9ybWFsKGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UmIGVkZ2UpCit7CisgICAgRmxvYXRTaXplIGVkZ2VEZWx0YSA9IGVkZ2Uu
dmVydGV4MigpIC0gZWRnZS52ZXJ0ZXgxKCk7CisgICAgaWYgKCFlZGdlRGVsdGEud2lkdGgoKSkK
KyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgoZWRnZURlbHRhLmhlaWdodCgpID4gMCA/IC0xIDog
MSksIDApOworICAgIGlmICghZWRnZURlbHRhLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gRmxv
YXRTaXplKDAsIChlZGdlRGVsdGEud2lkdGgoKSA+IDAgPyAxIDogLTEpKTsKKyAgICBmbG9hdCBl
ZGdlTGVuZ3RoID0gZWRnZURlbHRhLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgcmV0dXJuIEZsb2F0
U2l6ZSgtZWRnZURlbHRhLmhlaWdodCgpIC8gZWRnZUxlbmd0aCwgZWRnZURlbHRhLndpZHRoKCkg
LyBlZGdlTGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFNpemUgb3V0d2FyZEVkZ2VO
b3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKK3sKKyAgICByZXR1cm4gLWlud2Fy
ZEVkZ2VOb3JtYWwoZWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBcmMoVmVj
dG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNlcywgY29uc3QgRmxvYXRQb2ludCYgYXJjQ2VudGVyLCBm
bG9hdCBhcmNSYWRpdXMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0QXJjVmVydGV4LCBjb25zdCBG
bG9hdFBvaW50JiBlbmRBcmNWZXJ0ZXgsIGJvb2wgcGFkZGluZykKK3sKKyAgICBmbG9hdCBzdGFy
dEFuZ2xlID0gYXRhbjIoc3RhcnRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgc3RhcnRB
cmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7CisgICAgZmxvYXQgZW5kQW5nbGUgPSBhdGFu
MihlbmRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgZW5kQXJjVmVydGV4LngoKSAtIGFy
Y0NlbnRlci54KCkpOworICAgIGNvbnN0IGZsb2F0IHR3b1BJID0gcGlGbG9hdCAqIDI7CisgICAg
aWYgKHN0YXJ0QW5nbGUgPCAwKQorICAgICAgICBzdGFydEFuZ2xlICs9IHR3b1BJOworICAgIGlm
IChlbmRBbmdsZSA8IDApCisgICAgICAgIGVuZEFuZ2xlICs9IHR3b1BJOworICAgIGZsb2F0IGFu
Z2xlID0gKHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSA6
IChzdGFydEFuZ2xlICsgdHdvUEkgLSBlbmRBbmdsZSk7CisgICAgY29uc3QgZmxvYXQgYXJjU2Vn
bWVudENvdW50ID0gNjsgLy8gQW4gZXZlbiBudW1iZXIgc28gdGhhdCBvbmUgYXJjIHZlcnRleCB3
aWxsIGJlIGVhY3RseSBhcmNSYWRpdXMgZnJvbSBhcmNDZW50ZXIuCisgICAgZmxvYXQgYXJjU2Vn
bWVudEFuZ2xlID0gICgocGFkZGluZykgPyAtYW5nbGUgOiB0d29QSSAtIGFuZ2xlKSAvIGFyY1Nl
Z21lbnRDb3VudDsKKworICAgIHZlcnRpY2VzLmFwcGVuZChzdGFydEFyY1ZlcnRleCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyY1NlZ21lbnRDb3VudDsgKytpKSB7CisgICAgICAg
IGZsb2F0IGFuZ2xlID0gc3RhcnRBbmdsZSArIGFyY1NlZ21lbnRBbmdsZSAqIGk7CisgICAgICAg
IHZlcnRpY2VzLmFwcGVuZChhcmNDZW50ZXIgKyBGbG9hdFBvaW50KGNvcyhhbmdsZSkgKiBhcmNS
YWRpdXMsIHNpbihhbmdsZSkgKiBhcmNSYWRpdXMpKTsKKyAgICB9CisgICAgdmVydGljZXMuYXBw
ZW5kKGVuZEFyY1ZlcnRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmFwVmVydGljZXNU
b0xheW91dFVuaXRHcmlkKFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnRpY2VzLnNpemUoKTsgKytpKQorICAgICAgICB2ZXJ0
aWNlc1tpXS5zZXQoTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS54KCkpLnRvRmxvYXQoKSwgTGF5b3V0
VW5pdCh2ZXJ0aWNlc1tpXS55KCkpLnRvRmxvYXQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUGFz
c093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMoY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBwYWRkaW5nLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sK
KyAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gcGFkZGVkVmVydGljZXMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkpOworICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9u
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygp
OyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5
Z29uLmVkZ2VBdChpKTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2Ug
PSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsKKyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhp
c09mZnNldEVkZ2UodGhpc0VkZ2UsIGlud2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogcGFkZGlu
Zyk7CisgICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBp
bndhcmRFZGdlTm9ybWFsKHByZXZFZGdlKSAqIHBhZGRpbmcpOworCisgICAgICAgIGlmIChwcmV2
T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCisg
ICAgICAgICAgICBwYWRkZWRWZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgICAg
IGVsc2UgaWYgKGlzUmVmbGV4VmVydGV4KHByZXZFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2UudmVy
dGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgyKCkpKQorICAgICAgICAgICAgYXBwZW5kQXJjKCpwYWRk
ZWRWZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgpLCBwYWRkaW5nLCBwcmV2T2Zmc2V0RWRnZS52
ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgdHJ1ZSk7CisgICAgfQorCisgICAg
c25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgqcGFkZGVkVmVydGljZXMpOworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKHBhZGRlZFZlcnRpY2VzLnJlbGVhc2UoKSwgZmls
bFJ1bGUpKTsKK30KKworc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29t
cHV0ZVNoYXBlTWFyZ2luQm91bmRzKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQg
bWFyZ2luLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9p
bnQ+ID4gbWFyZ2luVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkp
OworICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9uOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxv
YXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKKyAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsK
KyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIG91dHdh
cmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIG1hcmdpbik7CisgICAgICAgIE9mZnNldFBvbHlnb25F
ZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBvdXR3YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkg
KiBtYXJnaW4pOworCisgICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhp
c09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCisgICAgICAgICAgICBtYXJnaW5WZXJ0aWNlcy0+
YXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZEFy
YygqbWFyZ2luVmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgbWFyZ2luLCBwcmV2T2Zmc2V0
RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgZmFsc2UpOworICAgIH0K
KworICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKm1hcmdpblZlcnRpY2VzKTsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbihtYXJnaW5WZXJ0aWNlcy5yZWxlYXNl
KCksIGZpbGxSdWxlKSk7Cit9CisKK2NvbnN0IEZsb2F0UG9seWdvbiYgUG9seWdvblNoYXBlOjpz
aGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAoreworICAgIEFTU0VSVChzaGFwZVBhZGRpbmcoKSA+
PSAwKTsKKyAgICBpZiAoIXNoYXBlUGFkZGluZygpKQorICAgICAgICByZXR1cm4gbV9wb2x5Z29u
OworCisgICAgaWYgKCFtX3BhZGRpbmdCb3VuZHMpCisgICAgICAgIG1fcGFkZGluZ0JvdW5kcyA9
IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMobV9wb2x5Z29uLCBzaGFwZVBhZGRpbmcoKSwgbV9w
b2x5Z29uLmZpbGxSdWxlKCkpOworCisgICAgcmV0dXJuICptX3BhZGRpbmdCb3VuZHM7Cit9CisK
K2NvbnN0IEZsb2F0UG9seWdvbiYgUG9seWdvblNoYXBlOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHNoYXBlTWFyZ2luKCkgPj0gMCk7CisgICAgaWYgKCFzaGFwZU1h
cmdpbigpKQorICAgICAgICByZXR1cm4gbV9wb2x5Z29uOworCisgICAgaWYgKCFtX21hcmdpbkJv
dW5kcykKKyAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMo
bV9wb2x5Z29uLCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7CisKKyAgICBy
ZXR1cm4gKm1fbWFyZ2luQm91bmRzOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZ2V0VmVydGV4
SW50ZXJzZWN0aW9uVmVydGljZXMoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9u
LCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBGbG9hdFBvaW50JiB0aGlzVmVydGV4LCBGbG9hdFBv
aW50JiBuZXh0VmVydGV4KQoreworICAgIGlmIChpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhN
aW5ZICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1heFkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEFTU0VSVChpbnRlcnNlY3Rpb24uZWRnZSAmJiBpbnRlcnNlY3Rpb24uZWRn
ZS0+cG9seWdvbigpKTsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSAqKGludGVy
c2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRo
aXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7CisKKyAgICBpZiAoKGludGVyc2VjdGlvbi50
eXBlID09IFZlcnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPCB0aGlzRWRnZS52
ZXJ0ZXgyKCkueSgpKSkKKyAgICAgICAgfHwgKGludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1h
eFkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpKSkp
IHsKKyAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UucHJldmlv
dXNFZGdlKCkudmVydGV4SW5kZXgxKCkpOworICAgICAgICB0aGlzVmVydGV4ID0gcG9seWdvbi52
ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAgIG5leHRWZXJ0ZXggPSBw
b2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRl
eDEoKSk7CisgICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZl
cnRleEluZGV4MigpKTsKKyAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhp
c0VkZ2UubmV4dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcHBlbmRJbnRlcnZhbFgoZmxvYXQgeCwgYm9v
bCBpbnNpZGUsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcmVzdWx0KQoreworICAgIGlmICghaW5z
aWRlKQorICAgICAgICByZXN1bHQuYXBwZW5kKFNoYXBlSW50ZXJ2YWwoeCkpOworICAgIGVsc2UK
KyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54MiA9IHg7CisKKyAgICByZXR1cm4g
IWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKGNvbnN0
IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24m
IGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQgeDEgPSBpbnRlcnNlY3Rpb24xLnBvaW50Lngo
KTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIucG9pbnQueCgpOworICAgIHJldHVybiAo
eDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwgaW50ZXJzZWN0aW9uMi50eXBlIDogeDEg
PCB4MjsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGNvbnN0IEZsb2F0
UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxTaGFwZUludGVy
dmFsPiYgcmVzdWx0KQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRn
ZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRnZXMpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9u
czsKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGNvbXB1dGVYSW50
ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2VjdGlvbi50eXBl
ICE9IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBlbmQoaW50ZXJz
ZWN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdpbigpLCBpbnRl
cnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOworCisg
ICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOworICAgIGJvb2wg
aW5zaWRlID0gZmFsc2U7CisKKyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNpemUo
KSkgeworICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJzZWN0aW9uID0g
aW50ZXJzZWN0aW9uc1tpbmRleF07CisgICAgICAgIGlmIChpbmRleCArIDEgPCBpbnRlcnNlY3Rp
b25zLnNpemUoKSkgeworICAgICAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgbmV4dElu
dGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXggKyAxXTsKKyAgICAgICAgICAgIGlmICgo
dGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4dEludGVyc2VjdGlvbi5wb2ludC54KCkp
ICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSB8fCB0aGlzSW50ZXJzZWN0
aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpc0ludGVy
c2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJlIFZlcnRl
eE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0ZXhNaW5ZLgorICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBh
cmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRleE1heFksVmVydGV4TWluWSB3aXRoIG9u
ZSBpbnRlcnNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0lu
dGVyc2VjdGlvbi5lZGdlOworICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9ICF3aW5kQ291
bnQ7CisKKyAgICAgICAgaWYgKHBvbHlnb24uZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsK
KyAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0VkZ2UudmVydGV4MigpLnkoKSA+IHRoaXNF
ZGdlLnZlcnRleDEoKS55KCkpID8gMSA6IC0xOworICAgICAgICAgICAgZXZlbk9kZENyb3NzaW5n
ID0gZXZlbk9kZENyb3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZXZlbk9kZENyb3NzaW5nKSB7CisgICAgICAgICAgICBib29sIGVkZ2VDcm9zc2luZyA9IHRo
aXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWw7CisgICAgICAgICAgICBpZiAoIWVkZ2VDcm9z
c2luZykgeworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleDsKKyAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50IHRoaXNWZXJ0ZXg7CisgICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCBuZXh0VmVydGV4OworCisgICAgICAgICAgICAgICAgaWYgKGdldFZlcnRleEludGVyc2VjdGlv
blZlcnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZWZXJ0ZXgsIHRoaXNWZXJ0ZXgsIG5leHRW
ZXJ0ZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4LnkoKSA9PSB5KQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWluWSkgPyBwcmV2VmVy
dGV4LnkoKSA+IHkgOiBwcmV2VmVydGV4LnkoKSA8IHk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHByZXZWZXJ0ZXgueSgpID09IHkpCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdl
Q3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IG5leHRWZXJ0ZXgueSgpID4geSA6IG5leHRWZXJ0ZXgueSgp
IDwgeTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWRnZUNyb3NzaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZWRnZUNyb3NzaW5nKQorICAgICAgICAgICAgICAgIGluc2lkZSA9IGFw
cGVuZEludGVydmFsWCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSwgaW5zaWRlLCByZXN1bHQp
OworICAgICAgICB9CisKKyAgICAgICAgKytpbmRleDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcmVzdWx0
KQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYg
KCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBlZGdlcykpCisgICAgICAgIHJldHVy
bjsKKworICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGbG9hdFBv
bHlnb25FZGdlICplZGdlID0gZWRnZXNbaV07CisgICAgICAgIGZsb2F0IHgxOworICAgICAgICBm
bG9hdCB4MjsKKworICAgICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEpIHsKKyAgICAgICAgICAg
IGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAg
ICAgeDEgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHgxID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPCBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVk
Z2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisgICAgICAgIGlmIChl
ZGdlLT5tYXhZKCkgPiB5MikgeworICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRn
ZSwgeTIsIGludGVyc2VjdGlvbik7CisgICAgICAgICAgICB4MiA9IGludGVyc2VjdGlvbi5wb2lu
dC54KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeDIgPSAoZWRnZS0+dmVydGV4MSgp
LnkoKSA+IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2Ut
PnZlcnRleDIoKS54KCk7CisKKyAgICAgICAgaWYgKHgxID4geDIpCisgICAgICAgICAgICBzdGQ6
OnN3YXAoeDEsIHgyKTsKKworICAgICAgICBpZiAoeDIgPiB4MSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoU2hhcGVJbnRlcnZhbCh4MSwgeDIpKTsKKyAgICB9CisKKyAgICBzb3J0U2hhcGVJ
bnRlcnZhbHMocmVzdWx0KTsKK30KKwordm9pZCBQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50
ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBT
ZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9s
eWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7CisgICAgaWYgKHBvbHlnb24uaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQg
eTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKKworICAgIFZlY3RvcjxTaGFwZUludGVy
dmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21wdXRlWEludGVyc2VjdGlv
bnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNl
Y3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxT
aGFwZUludGVydmFsPiBtZXJnZWRJbnRlcnZhbHM7CisgICAgbWVyZ2VTaGFwZUludGVydmFscyh5
MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKKworICAgIFZlY3Rv
cjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVPdmVybGFwcGluZ0Vk
Z2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKKworICAgIFZl
Y3RvcjxTaGFwZUludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJnZVNoYXBlSW50
ZXJ2YWxzKG1lcmdlZEludGVydmFscywgZWRnZUludGVydmFscywgZXhjbHVkZWRJbnRlcnZhbHMp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWwgPSBleGNsdWRlZEludGVy
dmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwg
aW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK3ZvaWQgUG9seWdvblNoYXBlOjpnZXRJbmNsdWRl
ZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFBvbHlnb24m
IHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAocG9seWdvbi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBm
bG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgVmVjdG9yPFNoYXBl
SW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVj
dG9yPFNoYXBlSW50ZXJ2YWw+IGNvbW1vbkludGVydmFsczsKKyAgICBpbnRlcnNlY3RTaGFwZUlu
dGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgY29tbW9uSW50ZXJ2YWxzKTsKKwor
ICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVPdmVy
bGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsK
KworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBpbmNsdWRlZEludGVydmFsczsKKyAgICBzdWJ0
cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5jbHVk
ZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluY2x1ZGVkSW50
ZXJ2YWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWwgPSBp
bmNsdWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChp
bnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEsIHVuc2lnbmVkIG9m
ZnNldEVkZ2VJbmRleDIpCit7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBl
ZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhyZWN0LnkoKSwgcmVjdC5t
YXhZKCksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5
Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOworICAgICAgICBpZiAoZWRnZS0+ZWRnZUluZGV4KCkg
IT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5k
ZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChyZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFi
b3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwgY29uc3QgRmxvYXRSZWN0JiByMikK
K3sKKyAgICBpZiAocjEueSgpIDwgcjIueSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAocjEueSgpID09IHIyLnkoKSkKKyAgICAgICAgcmV0dXJuIHIxLngoKSA8IHIyLngoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9seWdvblNoYXBlOjpmaXJzdEluY2x1ZGVkSW50
ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBM
YXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNv
bnN0Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7
CisgICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhl
aWdodCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplLndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZVBh
ZGRpbmdCb3VuZHMoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBwb2x5Z29u
LmJvdW5kaW5nQm94KCk7CisgICAgaWYgKG1pbkludGVydmFsV2lkdGggPiBib3VuZGluZ0JveC53
aWR0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBtaW5ZID0gc3RkOjpt
YXgoYm91bmRpbmdCb3gueSgpLCBtaW5JbnRlcnZhbFRvcCk7CisgICAgZmxvYXQgbWF4WSA9IG1p
blkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKworICAgIGlmIChtYXhZID4gYm91bmRpbmdCb3gubWF4
WSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5
Z29uRWRnZSo+IGVkZ2VzOworICAgIHBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhtaW5JbnRlcnZh
bFRvcCwgYm91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7CisKKyAgICBmbG9hdCBkeCA9IG1pbklu
dGVydmFsV2lkdGggLyAyOworICAgIGZsb2F0IGR5ID0gbWluSW50ZXJ2YWxIZWlnaHQgLyAyOwor
ICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZXM7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxv
YXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOworICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXgxKCk7CisgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKKyAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOworICAgICAgICBWZWN0b3I8T2Zm
c2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VCdWZmZXI7CisKKyAgICAgICAgaWYgKHZlcnRleDIu
eSgpID4gdmVydGV4MS55KCkgPyB2ZXJ0ZXgyLngoKSA+PSB2ZXJ0ZXgxLngoKSA6IHZlcnRleDEu
eCgpID49IHZlcnRleDIueCgpKSB7CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVu
ZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgsIC1keSkpKTsKKyAgICAgICAg
ICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0
U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb2Zmc2V0RWRn
ZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKGR4LCBkeSkp
KTsKKyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIC1keSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c1JlZmxleFZlcnRleCh2ZXJ0ZXgwLCB2ZXJ0ZXgxLCB2ZXJ0ZXgyKSkgeworICAgICAgICAgICAg
aWYgKHZlcnRleDIueCgpIDw9IHZlcnRleDEueCgpICYmIHZlcnRleDAueCgpIDw9IHZlcnRleDEu
eCgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZShkeCwgLWR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueCgpID49IHZlcnRleDEueCgpICYmIHZlcnRl
eDAueCgpID49IHZlcnRleDEueCgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIu
YXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZs
b2F0U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICAgICAgaWYgKHZlcnRleDIueSgpIDw9IHZlcnRl
eDEueSgpICYmIHZlcnRleDAueSgpIDw9IHZlcnRleDEueSgpKQorICAgICAgICAgICAgICAgIG9m
ZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6
ZSgtZHgsIGR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZl
cnRleDIueSgpID49IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpID49IHZlcnRleDEueSgpKQor
ICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0U2l6ZShkeCwgLWR5KSkpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG9mZnNldEVkZ2VCdWZm
ZXIuc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpZiAob2Zmc2V0RWRnZUJ1ZmZlcltqXS5tYXhZ
KCkgPj0gbWluWSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdlcy5hcHBlbmQob2Zmc2V0RWRn
ZUJ1ZmZlcltqXSk7CisgICAgfQorCisgICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHBvbHlnb24sIG1pbkludGVydmFsVG9wLCBGbG9hdFNpemUoMCwgZHkpKSk7CisKKyAg
ICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uOworICAgIEZsb2F0UmVjdCBmaXJz
dEZpdFJlY3Q7CisgICAgYm9vbCBmaXJzdEZpdEZvdW5kID0gZmFsc2U7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlc1tpXS5pbnRlcnNlY3Rpb24ob2Zmc2V0RWRnZXNb
al0sIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKSkgeworICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbihvZmZzZXRFZGdlc0ludGVyc2VjdGlvbi54KCkg
LSBkeCwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueSgpIC0gZHkpOworICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QocG90ZW50aWFsRmlyc3RGaXRMb2NhdGlv
biwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKChvZmZzZXRF
ZGdlc1tpXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCisgICAgICAgICAg
ICAgICAgICAgIHx8IG9mZnNldEVkZ2VzW2pdLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6
OkxpbmVUb3AKKyAgICAgICAgICAgICAgICAgICAgfHwgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlv
bi55KCkgPj0gbWluSW50ZXJ2YWxUb3ApCisgICAgICAgICAgICAgICAgICAgICYmICghZmlyc3RG
aXRGb3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgZmlyc3RG
aXRSZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgcG9seWdvbi5jb250YWlucyhvZmZzZXRF
ZGdlc0ludGVyc2VjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRSZWN0SW5Q
b2x5Z29uKHBvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRnZXNbaV0uZWRn
ZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkgeworICAgICAgICAgICAgICAg
ICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRS
ZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmaXJzdEZpdEZvdW5kKQorICAgICAg
ICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGZpcnN0Rml0UmVjdC55KCkpOworICAgIHJldHVy
biBmaXJzdEZpdEZvdW5kOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Mjhh
YzNhZGQwNjU2ZDY3M2IxMjdkNjg4OGJmMGU4NjAyYjYxODBjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaApAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICog
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgUG9seWdvblNoYXBlX2gKKyNkZWZpbmUgUG9seWdvblNo
YXBlX2gKKworI2luY2x1ZGUgIkZsb2F0UG9seWdvbi5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisj
aW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IE9mZnNldFBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBhaXIgeworcHVibGljOgorICAgIGVu
dW0gQmFzaXMgeworICAgICAgICBFZGdlLAorICAgICAgICBWZXJ0ZXgsCisgICAgICAgIExpbmVU
b3AKKyAgICB9OworCisgICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSYgZWRnZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAgICAgIDogbV92ZXJ0ZXgxKGVk
Z2UudmVydGV4MSgpICsgb2Zmc2V0KQorICAgICAgICAsIG1fdmVydGV4MihlZGdlLnZlcnRleDIo
KSArIG9mZnNldCkKKyAgICAgICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRleCgpKQorICAg
ICAgICAsIG1fYmFzaXMoRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgT2Zmc2V0UG9seWdvbkVk
Z2UoY29uc3QgRmxvYXRQb2ludCYgcmVmbGV4VmVydGV4LCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dDEsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MikKKyAgICAgICAgOiBtX3ZlcnRleDEocmVmbGV4
VmVydGV4ICsgb2Zmc2V0MSkKKyAgICAgICAgLCBtX3ZlcnRleDIocmVmbGV4VmVydGV4ICsgb2Zm
c2V0MikKKyAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKKyAgICAgICAgLCBtX2Jhc2lzKFZlcnRl
eCkKKyAgICB7CisgICAgfQorCisgICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5
Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0KQorICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHlnb24uYm91bmRp
bmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCisgICAgICAgICwg
bV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLm1heFgoKSwgbWluTG9n
aWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKKyAg
ICAgICAgLCBtX2Jhc2lzKExpbmVUb3ApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGV4
MTsgfQorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdmVydGV4MjsgfQorICAgIGludCBlZGdlSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2VkZ2VJbmRleDsgfQorICAgIEJhc2lzIGJhc2lzKCkgY29uc3QgeyByZXR1cm4gbV9i
YXNpczsgfQorCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgxOworICAgIEZsb2F0
UG9pbnQgbV92ZXJ0ZXgyOworICAgIGludCBtX2VkZ2VJbmRleDsKKyAgICBCYXNpcyBtX2Jhc2lz
OworfTsKKworY2xhc3MgUG9seWdvblNoYXBlIDogcHVibGljIFNoYXBlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQb2x5Z29uU2hhcGUpOworcHVibGljOgorICAgIFBvbHlnb25TaGFwZShQ
YXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVs
ZSkKKyAgICAgICAgOiBTaGFwZSgpCisgICAgICAgICwgbV9wb2x5Z29uKHZlcnRpY2VzLCBmaWxs
UnVsZSkKKyAgICAgICAgLCBtX21hcmdpbkJvdW5kcyhudWxscHRyKQorICAgICAgICAsIG1fcGFk
ZGluZ0JvdW5kcyhudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIExheW91dFJl
Y3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpLmJvdW5kaW5nQm94
KCkpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGlu
Z0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNo
YXBlUGFkZGluZ0JvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BvbHlnb24uaXNFbXB0eSgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChM
YXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9n
aWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRl
OgorICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdDsKKyAg
ICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0OworCisgICAg
RmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKKyAgICBtdXRhYmxlIE93blB0cjxGbG9hdFBvbHlnb24+
IG1fbWFyZ2luQm91bmRzOworICAgIG11dGFibGUgT3duUHRyPEZsb2F0UG9seWdvbj4gbV9wYWRk
aW5nQm91bmRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUG9s
eWdvblNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
UmVjdGFuZ2xlU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0
YW5nbGVTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUyN2ZjZmE3MmFmM2M5MzAwNTVlNTkzYjlmNTRj
NzQ3YTQxNzBhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlY3RhbmdsZVNoYXBlLmgiCisKKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUg
ZmxvYXQgZWxsaXBzZVhJbnRlcmNlcHQoZmxvYXQgeSwgZmxvYXQgcngsIGZsb2F0IHJ5KQorewor
ICAgIEFTU0VSVChyeSA+IDApOworICAgIHJldHVybiByeCAqIHNxcnQoMSAtICh5ICogeSkgLyAo
cnkgKiByeSkpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VZSW50ZXJjZXB0KGZs
b2F0IHgsIGZsb2F0IHJ4LCBmbG9hdCByeSkKK3sKKyAgICBBU1NFUlQocnggPiAwKTsKKyAgICBy
ZXR1cm4gcnkgKiBzcXJ0KDEgLSAoeCAqIHgpIC8gKHJ4ICogcngpKTsKK30KKworRmxvYXRSb3Vu
ZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjpwYWRkaW5nQm91bmRzKGZsb2F0IHBhZGRpbmcpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHBhZGRpbmcgPj0gMCk7CisgICAgaWYgKCFwYWRkaW5nIHx8IGlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgZmxvYXQgYm91bmRzWCA9IHgo
KSArIHN0ZDo6bWluKHdpZHRoKCkgLyAyLCBwYWRkaW5nKTsKKyAgICBmbG9hdCBib3VuZHNZID0g
eSgpICsgc3RkOjptaW4oaGVpZ2h0KCkgLyAyLCBwYWRkaW5nKTsKKyAgICBmbG9hdCBib3VuZHNX
aWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgLSBwYWRkaW5nICogMik7CisgICAgZmxvYXQg
Ym91bmRzSGVpZ2h0ID0gc3RkOjptYXgoMC4wZiwgaGVpZ2h0KCkgLSBwYWRkaW5nICogMik7Cisg
ICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHN0ZDo6bWF4KDAuMGYsIHJ4KCkgLSBwYWRkaW5nKTsK
KyAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gc3RkOjptYXgoMC4wZiwgcnkoKSAtIHBhZGRpbmcp
OworICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZ
LCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwgRmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJv
dW5kc1JhZGl1c1kpKTsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0Ojpt
YXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdAoreworICAgIEFTU0VSVChtYXJnaW4gPj0g
MCk7CisgICAgaWYgKCFtYXJnaW4pCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGZsb2F0
IGJvdW5kc1ggPSB4KCkgLSBtYXJnaW47CisgICAgZmxvYXQgYm91bmRzWSA9IHkoKSAtIG1hcmdp
bjsKKyAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHdpZHRoKCkgKyBtYXJnaW4gKiAyOworICAgIGZs
b2F0IGJvdW5kc0hlaWdodCA9IGhlaWdodCgpICsgbWFyZ2luICogMjsKKyAgICBmbG9hdCBib3Vu
ZHNSYWRpdXNYID0gcngoKSArIG1hcmdpbjsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gcnko
KSArIG1hcmdpbjsKKyAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJlY3QoYm91bmRz
WCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6ZShib3VuZHNS
YWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Cit9CisKK0Zsb2F0UG9pbnQgRmxvYXRSb3VuZGVkUmVj
dDo6Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lkdGhBdEludGVyY2VwdCkgY29uc3QK
K3sKKyAgICBmbG9hdCB4aSA9ICh3aWR0aCgpIC0gd2lkdGhBdEludGVyY2VwdCkgLyAyOworICAg
IGZsb2F0IHlpID0gcnkoKSAtIGVsbGlwc2VZSW50ZXJjZXB0KHJ4KCkgLSB4aSwgcngoKSwgcnko
KSk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoeGksIHlpKTsKK30KKworRmxvYXRSb3VuZGVkUmVj
dCBSZWN0YW5nbGVTaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcykgeworICAgICAgICBtX2hhdmVJbml0aWFs
aXplZFBhZGRpbmdCb3VuZHMgPSB0cnVlOworICAgICAgICBtX3BhZGRpbmdCb3VuZHMgPSBtX2Jv
dW5kcy5wYWRkaW5nQm91bmRzKHNoYXBlUGFkZGluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIG1f
cGFkZGluZ0JvdW5kczsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBSZWN0YW5nbGVTaGFwZTo6c2hh
cGVNYXJnaW5Cb3VuZHMoKSBjb25zdAoreworICAgIGlmICghbV9oYXZlSW5pdGlhbGl6ZWRNYXJn
aW5Cb3VuZHMpIHsKKyAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMgPSB0cnVl
OworICAgICAgICBtX21hcmdpbkJvdW5kcyA9IG1fYm91bmRzLm1hcmdpbkJvdW5kcyhzaGFwZU1h
cmdpbigpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWFyZ2luQm91bmRzOworfQorCit2b2lkIFJl
Y3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sK
KyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZU1hcmdpbkJvdW5kcygp
OworICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9h
dCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodDsKKworICAgIGlmICh5MiA8IGJvdW5kcy55KCkgfHwgeTEgPj0gYm91bmRzLm1heFkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeDEgPSBib3VuZHMueCgpOworICAgIGZsb2F0
IHgyID0gYm91bmRzLm1heFgoKTsKKworICAgIGlmIChib3VuZHMucnkoKSA+IDApIHsKKyAgICAg
ICAgaWYgKHkyIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpKSB7CisgICAgICAgICAgICBmbG9h
dCB5aSA9IHkyIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOworICAgICAgICAgICAgZmxvYXQg
eGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAg
ICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7CisgICAgICAgICAg
ICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOworICAgICAgICB9IGVsc2Ug
aWYgKHkxID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKSB7CisgICAgICAgICAgICBmbG9h
dCB5aSA9ICB5MSAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOworICAgICAgICAgICAg
ZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgp
KTsKKyAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7CisgICAg
ICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKK30KKwor
dm9pZCBSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNv
bnN0Cit7CisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5n
Qm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBs
b2dpY2FsSGVpZ2h0OworCisgICAgaWYgKHkxIDwgYm91bmRzLnkoKSB8fCB5MiA+IGJvdW5kcy5t
YXhZKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHgxID0gYm91bmRzLngoKTsKKyAg
ICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7CisKKyAgICBpZiAoYm91bmRzLnJ5KCkgPiAwKSB7
CisgICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29ybmVyID0geTEgPCBib3VuZHMueSgpICsgYm91
bmRzLnJ5KCk7CisgICAgICAgIGJvb2wgeTJJbnRlcmNlcHRzQ29ybmVyID0geTIgPiBib3VuZHMu
bWF4WSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgIGZsb2F0IHhpID0gMDsKKworICAgICAgICBp
ZiAoeTFJbnRlcmNlcHRzQ29ybmVyICYmIHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAg
ICAgaWYgICh5MSA8IGJvdW5kcy5oZWlnaHQoKSArIDIgKiBib3VuZHMueSgpIC0geTIpIHsKKyAg
ICAgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwor
ICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBi
b3VuZHMucnkoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsb2F0
IHlpID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7CisgICAgICAgICAgICAg
ICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHNDb3JuZXIpIHsK
KyAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7Cisg
ICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRz
LnJ5KCkpOworICAgICAgICB9IGVsc2UgaWYgKHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAg
ICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKKyAg
ICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMu
cnkoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyIHx8IHky
SW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRz
LnJ4KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgp
ICsgeGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50
KHgxLCB4MikpOworfQorCitib29sIFJlY3RhbmdsZVNoYXBlOjpmaXJzdEluY2x1ZGVkSW50ZXJ2
YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlv
dXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7Cisg
ICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhlaWdo
dCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXpl
LndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZVBh
ZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSB8fCBtaW5JbnRlcnZhbFdp
ZHRoID4gYm91bmRzLndpZHRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0
IG1pblkgPSBzdGQ6Om1heChib3VuZHMueSgpLCBtaW5JbnRlcnZhbFRvcCk7CisgICAgZmxvYXQg
bWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKworICAgIGlmIChtYXhZID4gYm91bmRz
Lm1heFkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpbnRlcnZhbE92ZXJs
YXBzTWluQ29ybmVyID0gbWluWSA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKTsKKyAgICBib29s
IGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgPSBtYXhZID4gYm91bmRzLm1heFkoKSAtIGJvdW5k
cy5yeSgpOworCisgICAgaWYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyICYmICFpbnRlcnZh
bE92ZXJsYXBzTWF4Q29ybmVyKSB7CisgICAgICAgIHJlc3VsdCA9IG1pblk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91
bmRzLmhlaWdodCgpIC8gMjsKKyAgICBib29sIG1pbkNvcm5lckRlZmluZXNYID0gZmFicyhjZW50
ZXJZIC0gbWluWSkgPiBmYWJzKGNlbnRlclkgLSBtYXhZKTsKKyAgICBib29sIGludGVydmFsRml0
c1dpdGhpbkNvcm5lcnMgPSBtaW5JbnRlcnZhbFdpZHRoICsgMiAqIGJvdW5kcy5yeCgpIDw9IGJv
dW5kcy53aWR0aCgpOworICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0ID0gYm91bmRzLmNv
cm5lckludGVyY2VwdEZvcldpZHRoKG1pbkludGVydmFsV2lkdGgpOworCisgICAgaWYgKGludGVy
dmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyIHx8IG1p
bkNvcm5lckRlZmluZXNYKSkgeworICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVy
cyB8fCBib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSA8IG1pblkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IG1pblk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobWluSW50ZXJ2YWxIZWlnaHQgPCBib3VuZHMuaGVpZ2h0KCkgLSAoMiAqIGNv
cm5lckludGVyY2VwdC55KCkpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBjZWlsZWRMYXlvdXRV
bml0KGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGludGVydmFsT3ZlcmxhcHNNYXhD
b3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyIHx8ICFtaW5Db3JuZXJEZWZpbmVz
WCkpIHsKKyAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgbWluWSA8PSAg
Ym91bmRzLm1heFkoKSAtIGNvcm5lckludGVyY2VwdC55KCkgLSBtaW5JbnRlcnZhbEhlaWdodCkg
eworICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jl
Y3RhbmdsZVNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3Rhbmds
ZVNoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTllY2YwNTA0YmI5OTNjOTExMDM5MDYzNDkzNDVlZTQyOTQ0
NmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
UmVjdGFuZ2xlU2hhcGUuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWN0YW5n
bGVTaGFwZV9oCisjZGVmaW5lIFJlY3RhbmdsZVNoYXBlX2gKKworI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNp
bmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0Um91bmRl
ZFJlY3QgOiBwdWJsaWMgRmxvYXRSZWN0IHsKK3B1YmxpYzoKKyAgICBGbG9hdFJvdW5kZWRSZWN0
KCkgeyB9CisgICAgRmxvYXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29u
c3QgRmxvYXRTaXplJiByYWRpaSkKKyAgICAgICAgOiBGbG9hdFJlY3QoYm91bmRzKQorICAgICAg
ICAsIG1fcmFkaWkocmFkaWkpCisgICAgeworICAgIH0KKworICAgIGZsb2F0IHJ4KCkgY29uc3Qg
eyByZXR1cm4gbV9yYWRpaS53aWR0aCgpOyB9CisgICAgZmxvYXQgcnkoKSBjb25zdCB7IHJldHVy
biBtX3JhZGlpLmhlaWdodCgpOyB9CisgICAgRmxvYXRSb3VuZGVkUmVjdCBtYXJnaW5Cb3VuZHMo
ZmxvYXQgbWFyZ2luKSBjb25zdDsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHBhZGRpbmdCb3VuZHMo
ZmxvYXQgcGFkZGluZykgY29uc3Q7CisgICAgRmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHRGb3JX
aWR0aChmbG9hdCB3aWR0aCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRmxvYXRTaXplIG1fcmFk
aWk7Cit9OworCitjbGFzcyBSZWN0YW5nbGVTaGFwZSA6IHB1YmxpYyBTaGFwZSB7CitwdWJsaWM6
CisgICAgUmVjdGFuZ2xlU2hhcGUoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0
U2l6ZSYgcmFkaWkpCisgICAgICAgIDogU2hhcGUoKQorICAgICAgICAsIG1fYm91bmRzKGJvdW5k
cywgcmFkaWkpCisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMoZmFsc2Up
CisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKGZhbHNlKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRp
bmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0Pihz
aGFwZU1hcmdpbkJvdW5kcygpKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRp
bmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxU
b3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3Ao
TGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxv
Z2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3Q7CisgICAg
RmxvYXRSb3VuZGVkUmVjdCBzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdDsKKworICAgIEZsb2F0
Um91bmRlZFJlY3QgbV9ib3VuZHM7CisgICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRSZWN0IG1fbWFy
Z2luQm91bmRzOworICAgIG11dGFibGUgRmxvYXRSb3VuZGVkUmVjdCBtX3BhZGRpbmdCb3VuZHM7
CisgICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzIDogMTsKKyAg
ICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzIDogMTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlY3RhbmdsZVNoYXBlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc5MjBj
YzllNDg4MTM2ODkxNzQ4NWNiMDMzNzhlOWY0MDAwMmYzYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0wLDAgKzEsMTk0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklH
SFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisKKyNpbmNs
dWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5j
bHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCisjaW5j
bHVkZSAiUmVjdGFuZ2xlU2hhcGUuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NPd25Q
dHI8U2hhcGU+IGNyZWF0ZVJlY3RhbmdsZVNoYXBlKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBj
b25zdCBGbG9hdFNpemUmIHJhZGlpKQoreworICAgIEFTU0VSVChib3VuZHMud2lkdGgoKSA+PSAw
ICYmIGJvdW5kcy5oZWlnaHQoKSA+PSAwICYmIHJhZGlpLndpZHRoKCkgPj0gMCAmJiByYWRpaS5o
ZWlnaHQoKSA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlY3RhbmdsZVNoYXBlKGJv
dW5kcywgcmFkaWkpKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0ZVNoYXBl
Q2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzKQoreworICAgIEFT
U0VSVChyYWRpdXMgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWN0YW5nbGVTaGFw
ZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywgcmFk
aXVzKjIsIHJhZGl1cyoyKSwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSkpOworfQorCitzdGF0
aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRlU2hhcGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQm
IGNlbnRlciwgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKK3sKKyAgICBBU1NFUlQocmFkaWkud2lk
dGgoKSA+PSAwICYmIHJhZGlpLmhlaWdodCgpID49IDApOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUmVjdGFuZ2xlU2hhcGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpaS53aWR0aCgpLCBj
ZW50ZXIueSgpIC0gcmFkaWkuaGVpZ2h0KCksIHJhZGlpLndpZHRoKCkqMiwgcmFkaWkuaGVpZ2h0
KCkqMiksIHJhZGlpKSk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVQb2x5
Z29uU2hhcGUoUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1
bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQb2x5Z29uU2hhcGUodmVy
dGljZXMsIGZpbGxSdWxlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IHBoeXNpY2Fs
UmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxvZ2ljYWxCb3hIZWln
aHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiByZWN0OworICAgIGlmIChpc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBGbG9h
dFJlY3QocmVjdC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSByZWN0Lm1heFgoKSwgcmVjdC5oZWln
aHQoKSwgcmVjdC53aWR0aCgpKTsKKyAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwor
fQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworICAgIGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KHBvaW50Lnko
KSwgbG9naWNhbEJveEhlaWdodCAtIHBvaW50LngoKSk7CisgICAgcmV0dXJuIHBvaW50LnRyYW5z
cG9zZWRQb2ludCgpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBwaHlzaWNhbFNpemVU
b0xvZ2ljYWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkK
K3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAg
ICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOworfQorCitQ
YXNzT3duUHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29uc3QgQmFzaWNTaGFwZSogYmFz
aWNTaGFwZSwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZykKK3sKKyAgICBBU1NFUlQo
YmFzaWNTaGFwZSk7CisKKyAgICBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSA9IGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKKyAgICBmbG9hdCBib3hXaWR0aCA9IGhvcml6
b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLndpZHRoKCkgOiBsb2dpY2FsQm94U2l6
ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBib3hIZWlnaHQgPSBob3Jpem9udGFsV3JpdGluZ01vZGUg
PyBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSA6IGxvZ2ljYWxCb3hTaXplLndpZHRoKCk7CisgICAg
T3duUHRyPFNoYXBlPiBzaGFwZTsKKworICAgIHN3aXRjaCAoYmFzaWNTaGFwZS0+dHlwZSgpKSB7
CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVSZWN0YW5nbGVUeXBlOiB7CisgICAg
ICAgIGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcygKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT54KCks
IGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT55
KCksIGJveEhlaWdodCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3Rhbmds
ZS0+d2lkdGgoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChy
ZWN0YW5nbGUtPmhlaWdodCgpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgTGVuZ3RoIHJhZGl1c1hM
ZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKKyAgICAgICAgTGVuZ3RoIHJhZGl1
c1lMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKKyAgICAgICAgRmxvYXRTaXpl
IGNvcm5lclJhZGlpKAorICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8g
MCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAorICAgICAg
ICAgICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5n
dGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7CisgICAgICAgIEZsb2F0UmVjdCBsb2dpY2Fs
Qm91bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVp
Z2h0KCksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVJlY3RhbmdsZVNo
YXBlKGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3Jp
dGluZ01vZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBl
OjpCYXNpY1NoYXBlQ2lyY2xlVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlQ2lyY2xl
KiBjaXJjbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4oYmFzaWNTaGFw
ZSk7CisgICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+
Y2VudGVyWCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOworICAgICAgICBmbG9hdCBy
YWRpdXMgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWluKGJv
eEhlaWdodCwgYm94V2lkdGgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0g
cGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dp
Y2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNoYXBlID0gY3Jl
YXRlU2hhcGVDaXJjbGUobG9naWNhbENlbnRlciwgcmFkaXVzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlRWxsaXBzZVR5cGU6IHsKKyAg
ICAgICAgY29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2UgPSBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY1NoYXBlRWxsaXBzZSo+KGJhc2ljU2hhcGUpOworICAgICAgICBmbG9hdCBjZW50ZXJY
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKKyAg
ICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVy
WSgpLCBib3hIZWlnaHQpOworICAgICAgICBmbG9hdCByYWRpdXNYID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxvYXQgcmFkaXVz
WSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWSgpLCBib3hIZWlnaHQpOwor
ICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2Fs
KEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3
cml0aW5nTW9kZSk7CisgICAgICAgIEZsb2F0U2l6ZSBsb2dpY2FsUmFkaWkgPSBwaHlzaWNhbFNp
emVUb0xvZ2ljYWwoRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpLCB3cml0aW5nTW9kZSk7CisK
KyAgICAgICAgc2hhcGUgPSBjcmVhdGVTaGFwZUVsbGlwc2UobG9naWNhbENlbnRlciwgbG9naWNh
bFJhZGlpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpC
YXNpY1NoYXBlUG9seWdvblR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZVBvbHlnb24q
IHBvbHlnb24gPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUG9seWdvbio+KGJhc2ljU2hh
cGUpOworICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3RoPiYgdmFsdWVzID0gcG9seWdvbi0+dmFs
dWVzKCk7CisgICAgICAgIHNpemVfdCB2YWx1ZXNTaXplID0gdmFsdWVzLnNpemUoKTsKKyAgICAg
ICAgQVNTRVJUKCEodmFsdWVzU2l6ZSAlIDIpKTsKKyAgICAgICAgT3duUHRyPFZlY3RvcjxGbG9h
dFBvaW50PiA+IHZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50Pih2YWx1
ZXNTaXplIC8gMikpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzU2l6
ZTsgaSArPSAyKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50IHZlcnRleCgKKyAgICAgICAgICAg
ICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgpLAorICAgICAg
ICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkgKyAxKSwgYm94SGVpZ2h0
KSk7CisgICAgICAgICAgICAoKnZlcnRpY2VzKVtpIC8gMl0gPSBwaHlzaWNhbFBvaW50VG9Mb2dp
Y2FsKHZlcnRleCwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHNoYXBlID0gY3JlYXRlUG9seWdvblNoYXBlKHZlcnRpY2VzLnJlbGVh
c2UoKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTogeworICAgICAg
ICBjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0
PGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSo+KGJhc2ljU2hhcGUpOworICAgICAgICBm
bG9hdCBsZWZ0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmxlZnQoKSwgYm94V2lk
dGgpOworICAgICAgICBmbG9hdCB0b3AgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+
dG9wKCksIGJveEhlaWdodCk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMoCisgICAgICAgICAg
ICBsZWZ0LAorICAgICAgICAgICAgdG9wLAorICAgICAgICAgICAgYm94V2lkdGggLSBsZWZ0IC0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnJpZ2h0KCksIGJveFdpZHRoKSwKKyAgICAg
ICAgICAgIGJveEhlaWdodCAtIHRvcCAtIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5i
b3R0b20oKSwgYm94SGVpZ2h0KSk7CisgICAgICAgIExlbmd0aCByYWRpdXNYTGVuZ3RoID0gcmVj
dGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7CisgICAgICAgIExlbmd0aCByYWRpdXNZTGVuZ3RoID0g
cmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7CisgICAgICAgIEZsb2F0U2l6ZSBjb3JuZXJSYWRp
aSgKKyAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwKKyAgICAgICAgICAgIHJhZGl1
c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1lM
ZW5ndGgsIGJveEhlaWdodCkpOworICAgICAgICBGbG9hdFJlY3QgbG9naWNhbEJvdW5kcyA9IHBo
eXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0
aW5nTW9kZSk7CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVSZWN0YW5nbGVTaGFwZShsb2dpY2Fs
Qm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVyUmFkaWksIHdyaXRpbmdNb2RlKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNoYXBlLT5tX3dyaXRpbmdNb2RlID0gd3JpdGlu
Z01vZGU7CisgICAgc2hhcGUtPm1fbWFyZ2luID0gZmxvYXRWYWx1ZUZvckxlbmd0aChtYXJnaW4s
IDApOworICAgIHNoYXBlLT5tX3BhZGRpbmcgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHBhZGRpbmcs
IDApOworCisgICAgcmV0dXJuIHNoYXBlLnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBkOWVjZmQ3MjBiZDBkZDUzODA0MTMxOGM5ODI1YmYzMzcxMWU1ODcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmgKQEAgLTAsMCArMSw4
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAor
ICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor
ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVfaAorI2RlZmluZSBTaGFwZV9oCisKKyNpbmNsdWRl
ICJCYXNpY1NoYXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJXcml0
aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBMaW5lU2VnbWVudCB7Cisg
ICAgTGluZVNlZ21lbnQoZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCkKKyAg
ICAgICAgOiBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAgICAgLCBsb2dpY2FsUmlnaHQo
bG9naWNhbFJpZ2h0KQorICAgIHsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
OworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0OworfTsKKwordHlwZWRlZiBWZWN0b3I8TGlu
ZVNlZ21lbnQ+IFNlZ21lbnRMaXN0OworCisKKy8vIEEgcmVwcmVzZW50YXRpb24gb2YgYSBCYXNp
Y1NoYXBlIHRoYXQgZW5hYmxlcyBsYXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGJyZWFr
IGEgbGluZSB1cCBpbnRvIHNlZ21lbnRzCisvLyB0aGF0IHdpbGwgZml0IHdpdGhpbiBvciBhcm91
bmQgYSBzaGFwZS4gVGhlIGxpbmUgaXMgZGVmaW5lZCBieSBhIHBhaXIgb2YgbG9naWNhbCBZIGNv
b3JkaW5hdGVzIGFuZCB0aGUKKy8vIGNvbXB1dGVkIHNlZ21lbnRzIGFyZSByZXR1cm5lZCBhcyBw
YWlycyBvZiBsb2dpY2FsIFggY29vcmRpbmF0ZXMuIFRoZSBCYXNpY1NoYXBlIGl0c2VsZiBpcyBk
ZWZpbmVkIGluCisvLyBwaHlzaWNhbCBjb29yZGluYXRlcy4KKworY2xhc3MgU2hhcGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVTaGFwZShjb25zdCBCYXNp
Y1NoYXBlKiwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlLCBM
ZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZyk7CisKKyAgICB2aXJ0dWFsIH5TaGFwZSgpIHsg
fQorCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2Fs
Qm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQg
bG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExh
eW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dp
Y2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0ID0gMDsKKworcHJvdGVj
dGVkOgorICAgIGZsb2F0IHNoYXBlTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0K
KyAgICBmbG9hdCBzaGFwZVBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0KKwor
cHJpdmF0ZToKKyAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOworICAgIGZsb2F0IG1fbWFy
Z2luOworICAgIGZsb2F0IG1fcGFkZGluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE1NTgzMjFjY2Y4ZmUwYzI4MDI3YTQ1ZmM3YjIz
NmE1NzU3ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZUluZm8uY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlSW5mby5oIgorCisj
aWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1
ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
dGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hh
cGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVu
aXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+Citjb25zdCBTaGFwZSogU2hhcGVJ
bmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVkU2hh
cGUoKSBjb25zdAoreworICAgIGlmIChTaGFwZSogc2hhcGUgPSBtX3NoYXBlLmdldCgpKQorICAg
ICAgICByZXR1cm4gc2hhcGU7CisKKyAgICBTaGFwZVZhbHVlKiBzaGFwZVZhbHVlID0gKG1fcmVu
ZGVyZXItPnN0eWxlKCktPipzaGFwZUdldHRlcikoKTsKKyAgICBCYXNpY1NoYXBlKiBzaGFwZSA9
IChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSkg
PyBzaGFwZVZhbHVlLT5zaGFwZSgpIDogMDsKKworICAgIEFTU0VSVChzaGFwZSk7CisKKyAgICBt
X3NoYXBlID0gU2hhcGU6OmNyZWF0ZVNoYXBlKHNoYXBlLCBMYXlvdXRTaXplKG1fc2hhcGVMb2dp
Y2FsV2lkdGgsIG1fc2hhcGVMb2dpY2FsSGVpZ2h0KSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+d3Jp
dGluZ01vZGUoKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVNYXJnaW4oKSwgbV9yZW5kZXJl
ci0+c3R5bGUoKS0+c2hhcGVQYWRkaW5nKCkpOworICAgIEFTU0VSVChtX3NoYXBlKTsKKyAgICBy
ZXR1cm4gbV9zaGFwZS5nZXQoKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hh
cGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBl
OjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0Jikg
Y29uc3Q+Citib29sIFNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwgaW50ZXJ2YWxH
ZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lSGVpZ2h0KQoreworICAgIEFTU0VSVChsaW5lSGVpZ2h0ID49IDApOworICAgIG1f
c2hhcGVMaW5lVG9wID0gbGluZVRvcCAtIGxvZ2ljYWxUb3BPZmZzZXQoKTsKKyAgICBtX2xpbmVI
ZWlnaHQgPSBsaW5lSGVpZ2h0OworICAgIG1fc2VnbWVudHMuY2xlYXIoKTsKKworICAgIGlmIChs
aW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQorICAgICAgICAoY29tcHV0ZWRTaGFwZSgpLT4qaW50
ZXJ2YWxHZXR0ZXIpKG1fc2hhcGVMaW5lVG9wLCBzdGQ6Om1pbihtX2xpbmVIZWlnaHQsIHNoYXBl
TG9naWNhbEJvdHRvbSgpIC0gbGluZVRvcCksIG1fc2VnbWVudHMpOworCisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdE9mZnNldCA9IHRoaXMtPmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3NlZ21lbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIG1f
c2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNhbExlZnRPZmZzZXQ7CisgICAgICAgIG1f
c2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0OworICAgIH0KKwor
ICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKK30KKwordGVtcGxhdGUgY2xhc3MgU2hhcGVJ
bmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZTaGFw
ZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+OwordGVtcGxhdGUgY2xhc3MgU2hhcGVJbmZvPFJlbmRl
ckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRl
cnZhbHM+OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZTEzZDMyYTVkNjA5NWY1ZDJmMDk4ZThmYjA5MGE2MTJjNTRl
MzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUluZm8uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyogICAgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSICJBUyBJUyIgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLAorKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisqIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgor
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyogU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFNoYXBlSW5mb19oCisjZGVm
aW5lIFNoYXBlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgSW5mb1R5cGU+CitjbGFz
cyBNYXBwZWRJbmZvIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSW5mb1R5cGUqIGVuc3VyZUluZm8o
Y29uc3QgS2V5VHlwZSoga2V5KQorICAgIHsKKyAgICAgICAgSW5mb01hcCYgaW5mb01hcCA9IE1h
cHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7CisgICAgICAgIGlmIChJbmZv
VHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCisgICAgICAgICAgICByZXR1cm4gaW5mbzsK
KyAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGluZm9NYXAuYWRk
KGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7CisgICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmZv
KGNvbnN0IEtleVR5cGUqIGtleSkgeyBpbmZvTWFwKCkucmVtb3ZlKGtleSk7IH0KKyAgICBzdGF0
aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IHJldHVybiBpbmZvTWFwKCku
Z2V0KGtleSk7IH0KK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEtleVR5cGUq
LCBPd25QdHI8SW5mb1R5cGU+ID4gSW5mb01hcDsKKyAgICBzdGF0aWMgSW5mb01hcCYgaW5mb01h
cCgpCisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9NYXAsIHN0YXRpY0lu
Zm9NYXAsICgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY0luZm9NYXA7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hh
cGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVu
aXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+CitjbGFzcyBTaGFwZUluZm8gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1YWwgflNoYXBl
SW5mbygpIHsgfQorCisgICAgdm9pZCBzZXRTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCkKKyAgICB7CisgICAgICAgIGlmIChtX3JlbmRl
cmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgeworICAgICAgICAgICAg
bG9naWNhbFdpZHRoIC09IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NoYXBlTG9n
aWNhbFdpZHRoID09IGxvZ2ljYWxXaWR0aCAmJiBtX3NoYXBlTG9naWNhbEhlaWdodCA9PSBsb2dp
Y2FsSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkaXJ0eVNoYXBlU2l6ZSgp
OworICAgICAgICBtX3NoYXBlTG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoOworICAgICAgICBt
X3NoYXBlTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQ7CisgICAgfQorCisgICAgdmlydHVh
bCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVIZWlnaHQpOworICAgIHZvaWQgY2xlYXJTZWdtZW50cygpIHsgbV9zZWdtZW50cy5j
bGVhcigpOyB9CisKKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0
dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dpY2FsVG9wT2Zm
c2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0
dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBsb2dpY2FsVG9w
T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBjb25zdCB7IHJl
dHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9naWNhbExlZnRP
ZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJl
dHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsgbG9naWNhbExl
ZnRPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7
IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgoKTsgfQorICAg
IExheW91dFVuaXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRT
aGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBsb2dpY2FsVG9w
T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBtX2xpbmVIZWlnaHQgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7
IH0KKworICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKSBjb25zdCB7
IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gp
ID8gKG1fc2hhcGVMb2dpY2FsSGVpZ2h0ICsgbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxIZWlnaHQoKSkgOiBtX3NoYXBlTG9naWNhbEhlaWdodDsgfQorCisgICAgYm9vbCBsaW5l
T3ZlcmxhcHNTaGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMaW5lVG9wKCkgPCBz
aGFwZUxvZ2ljYWxCb3R0b20oKSAmJiBzaGFwZUxvZ2ljYWxUb3AoKSA8PSBsb2dpY2FsTGluZUJv
dHRvbSgpOyB9CisgICAgYm9vbCBsaW5lV2l0aGluU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYmIChsb2dpY2FsTGluZUJvdHRvbSgpIDw9IHNo
YXBlTG9naWNhbEJvdHRvbSgpKTsgfQorCisgICAgdm9pZCBkaXJ0eVNoYXBlU2l6ZSgpIHsgbV9z
aGFwZS5jbGVhcigpOyB9CisgICAgYm9vbCBzaGFwZVNpemVEaXJ0eSgpIHsgcmV0dXJuICFtX3No
YXBlLmdldCgpOyB9CisgICAgY29uc3QgUmVuZGVyVHlwZSogb3duZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICBTaGFwZUluZm8oY29uc3QgUmVuZGVy
VHlwZSogcmVuZGVyZXIpOiBtX3JlbmRlcmVyKHJlbmRlcmVyKSB7IH0KKworICAgIGNvbnN0IFNo
YXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisKKyAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLT5zdHlsZSgpLT5i
b3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdC
ZWZvcmUoKSA6IExheW91dFVuaXQoKTsgfTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09
IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLT5pc1JlbmRlclJlZ2lvbigpKSA/IG1fcmVuZGVy
ZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpIDogTGF5b3V0VW5pdCgpOyB9CisKKyAgICBMYXlv
dXRVbml0IG1fc2hhcGVMaW5lVG9wOworICAgIExheW91dFVuaXQgbV9saW5lSGVpZ2h0OworICAg
IFNlZ21lbnRMaXN0IG1fc2VnbWVudHM7CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBPd25QdHI8
U2hhcGU+IG1fc2hhcGU7CisKKyAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2FsV2lkdGg7Cisg
ICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbEhlaWdodDsKKyAgICBjb25zdCBSZW5kZXJUeXBl
KiBtX3JlbmRlcmVyOworfTsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDEy
OTVkMDNlZGIyNzNmYWU3YmFiZWNkMWM0YmFlMDllYWFjZTBkZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcApAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5j
b3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAq
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCisKKyNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKKworI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMaW5lU2VnbWVudFJhbmdlOjpMaW5l
U2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRl
cmF0b3ImIGVuZCkKKyAgICA6IHN0YXJ0KHN0YXJ0LnJvb3QoKSwgc3RhcnQub2JqZWN0KCksIHN0
YXJ0Lm9mZnNldCgpKQorICAgICwgZW5kKGVuZC5yb290KCksIGVuZC5vYmplY3QoKSwgZW5kLm9m
ZnNldCgpKQorICAgIHsKKyAgICB9CisKK2Jvb2wgU2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRG
b3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQoreworICAgIFNoYXBlVmFsdWUqIHNoYXBl
VmFsdWUgPSByZW5kZXJlci0+c3R5bGUoKS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpOworICAgIGlm
ICghc2hhcGVWYWx1ZSB8fCBzaGFwZVZhbHVlLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gc2hhcGVW
YWx1ZS0+c2hhcGUoKTsKKyAgICByZXR1cm4gc2hhcGUgJiYgc2hhcGUtPnR5cGUoKSAhPSBCYXNp
Y1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOworfQorCitib29sIFNoYXBlSW5z
aWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVudFdpZHRoKQorewor
ICAgIGNvbnN0IFNoYXBlKiBzaGFwZSA9IGNvbXB1dGVkU2hhcGUoKTsKKyAgICBpZiAoIXNoYXBl
IHx8IG1fbGluZUhlaWdodCA8PSAwIHx8IGxvZ2ljYWxMaW5lVG9wKCkgPiBzaGFwZUxvZ2ljYWxC
b3R0b20oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTGF5b3V0VW5pdCBuZXdMaW5l
VG9wOworICAgIGlmIChzaGFwZS0+Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChtX3No
YXBlTGluZVRvcCwgTGF5b3V0U2l6ZShtaW5TZWdtZW50V2lkdGgsIG1fbGluZUhlaWdodCksIG5l
d0xpbmVUb3ApKSB7CisgICAgICAgIGlmIChuZXdMaW5lVG9wID4gbV9zaGFwZUxpbmVUb3ApIHsK
KyAgICAgICAgICAgIG1fc2hhcGVMaW5lVG9wID0gbmV3TGluZVRvcDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5z
aWRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1ZGM4NmI3MzE3NTEyMmVhZGI5YThlYjk5M2E4MDc4MzU5
Y2YyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU2hhcGVJbnNpZGVJbmZvX2gKKyNkZWZpbmUgU2hhcGVJbnNpZGVJ
bmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiU2hhcGVJbmZvLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5saW5lSXRlcmF0b3I7CitjbGFzcyBSZW5k
ZXJCbG9jazsKK2NsYXNzIFJlbmRlck9iamVjdDsKKworc3RydWN0IExpbmVTZWdtZW50SXRlcmF0
b3IgeworICAgIFJlbmRlck9iamVjdCogcm9vdDsKKyAgICBSZW5kZXJPYmplY3QqIG9iamVjdDsK
KyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvcihSZW5kZXJPYmpl
Y3QqIHJvb3QsIFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAg
IDogcm9vdChyb290KQorICAgICAgICAsIG9iamVjdChvYmplY3QpCisgICAgICAgICwgb2Zmc2V0
KG9mZnNldCkKKyAgICB7CisgICAgfQorfTsKKworc3RydWN0IExpbmVTZWdtZW50UmFuZ2Ugewor
ICAgIExpbmVTZWdtZW50SXRlcmF0b3Igc3RhcnQ7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvciBl
bmQ7CisgICAgTGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnQsIGNv
bnN0IElubGluZUl0ZXJhdG9yJiBlbmQpOworfTsKKwordHlwZWRlZiBWZWN0b3I8TGluZVNlZ21l
bnRSYW5nZT4gU2VnbWVudFJhbmdlTGlzdDsKKworY2xhc3MgU2hhcGVJbnNpZGVJbmZvIDogcHVi
bGljIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5z
aWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8U2hhcGVJbnNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNoYXBlSW5zaWRlSW5mbyhyZW5kZXJl
cikpOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQmxvY2sq
IHJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFuZWVkc1JlbW92YWwoKSk7CisgICAgICAgIG1fc2VnbWVudFJhbmdl
cy5jbGVhcigpOworICAgICAgICByZXR1cm4gU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVy
U3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+
Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpOworICAgIH0KKwor
ICAgIGJvb2wgaGFzU2VnbWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxpbmVP
dmVybGFwc1NoYXBlQm91bmRzKCkgJiYgbV9zZWdtZW50cy5zaXplKCk7CisgICAgfQorICAgIGNv
bnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aGFzU2VnbWVudHMoKSk7CisgICAgICAgIHJldHVybiBtX3NlZ21lbnRzOworICAgIH0KKyAgICBT
ZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzKCkgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2Vz
OyB9CisgICAgY29uc3QgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdlcygpIGNvbnN0IHsg
cmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQorICAgIGNvbnN0IExpbmVTZWdtZW50KiBjdXJyZW50
U2VnbWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc1NlZ21lbnRzKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQVNTRVJUKG1fc2VnbWVudFJhbmdlcy5zaXplKCkg
PCBtX3NlZ21lbnRzLnNpemUoKSk7CisgICAgICAgIHJldHVybiAmbV9zZWdtZW50c1ttX3NlZ21l
bnRSYW5nZXMuc2l6ZSgpXTsKKyAgICB9CisgICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcChm
bG9hdCBtaW5TZWdtZW50V2lkdGgpOworCisgICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIHZh
bHVlKSB7IG1fbmVlZHNMYXlvdXQgPSB2YWx1ZTsgfQorICAgIGJvb2wgbmVlZHNMYXlvdXQoKSB7
IHJldHVybiBtX25lZWRzTGF5b3V0OyB9CisKKyAgICB2b2lkIHNldE5lZWRzUmVtb3ZhbChib29s
IHZhbHVlKSB7IG1fbmVlZHNSZW1vdmFsID0gdmFsdWU7IH0KKyAgICBib29sIG5lZWRzUmVtb3Zh
bCgpIHsgcmV0dXJuIG1fbmVlZHNSZW1vdmFsOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS0+c2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5n
Qm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBTaGFwZUluc2lkZUluZm8oY29uc3QgUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyKQorICAgIDogU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6
OnJlc29sdmVkU2hhcGVJbnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IChyZW5k
ZXJlcikKKyAgICAsIG1fbmVlZHNMYXlvdXQoZmFsc2UpCisgICAgLCBtX25lZWRzUmVtb3ZhbChm
YWxzZSkKKyAgICB7IH0KKworICAgIFNlZ21lbnRSYW5nZUxpc3QgbV9zZWdtZW50UmFuZ2VzOwor
ICAgIGJvb2wgbV9uZWVkc0xheW91dDoxOworICAgIGJvb2wgbV9uZWVkc1JlbW92YWw6MTsKK307
CisKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZUludGVydmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTU4MDM4YjI0N2MzYzg3NTcyZTU4
NjBmMDhjODE5MmIyMWJhNDUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
KyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgiCisKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJ
bnRlcnZhbFgxQ29tcGFyYXRvciB7CisgICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBTaGFwZUlu
dGVydmFsJiBpMSwgY29uc3QgU2hhcGVJbnRlcnZhbCYgaTIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaTEueDEgPCBpMi54MTsKKyAgICB9Cit9OworCitib29sIFNoYXBlSW50ZXJ2YWw6
OmludGVyc2VjdChjb25zdCBTaGFwZUludGVydmFsJiBpLCBTaGFwZUludGVydmFsJiBydikgY29u
c3QKK3sKKyAgICBpZiAoeDIgPCBpLngxIHx8IHgxID4gaS54MikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJ2LngxID0gc3RkOjptYXgoeDEsIGkueDEpOworICAgIHJ2LngyID0gc3RkOjpt
aW4oeDIsIGkueDIpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIHNvcnRTaGFwZUludGVy
dmFscyhWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYpCit7CisgICAgc3RkOjpzb3J0KHYuYmVnaW4o
KSwgdi5lbmQoKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7Cit9CisKK3ZvaWQgbWVyZ2VTaGFw
ZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8
U2hhcGVJbnRlcnZhbD4mIHYyLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJ2KQoreworICAgIGlm
ICghdjEuc2l6ZSgpKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2Mi5iZWdpbigpLCB2Mi5lbmQo
KSk7CisgICAgZWxzZSBpZiAoIXYyLnNpemUoKSkKKyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEu
YmVnaW4oKSwgdjEuZW5kKCkpOworICAgIGVsc2UgeworICAgICAgICBWZWN0b3I8U2hhcGVJbnRl
cnZhbD4gdih2MS5zaXplKCkgKyB2Mi5zaXplKCkpOworICAgICAgICBTaGFwZUludGVydmFsKiBp
bnRlcnZhbCA9IDA7CisKKyAgICAgICAgc3RkOjptZXJnZSh2MS5iZWdpbigpLCB2MS5lbmQoKSwg
djIuYmVnaW4oKSwgdjIuZW5kKCksIHYuYmVnaW4oKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7
CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAoIWludGVydmFsKQorICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07
CisgICAgICAgICAgICBlbHNlIGlmICh2W2ldLngxID49IGludGVydmFsLT54MSAmJiB2W2ldLngx
IDw9IGludGVydmFsLT54MikgLy8gRklYTUU6IDFzdCA8PSB0ZXN0IG5vdCBuZWVkZWQ/CisgICAg
ICAgICAgICAgICAgaW50ZXJ2YWwtPngyID0gc3RkOjptYXgoaW50ZXJ2YWwtPngyLCB2W2ldLngy
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2
YWwpOworICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaW50ZXJ2YWwpCisgICAgICAgICAgICBydi5hcHBlbmQo
KmludGVydmFsKTsKKyAgICB9Cit9CisKK3ZvaWQgaW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMoY29u
c3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+
JiB2MiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBydikKK3sKKyAgICBzaXplX3QgdjFTaXplID0g
djEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAgICBpZiAoIXYx
U2l6ZSB8fCAhdjJTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFwZUludGVydmFsIGlu
dGVydmFsOworICAgIGJvb2wgb3ZlcmxhcCA9IGZhbHNlOworICAgIHNpemVfdCBpMSA9IDA7Cisg
ICAgc2l6ZV90IGkyID0gMDsKKworICAgIHdoaWxlIChpMSA8IHYxU2l6ZSAmJiBpMiA8IHYyU2l6
ZSkgeworICAgICAgICBTaGFwZUludGVydmFsIHYxMjsKKyAgICAgICAgaWYgKHYxW2kxXS5pbnRl
cnNlY3QodjJbaTJdLCB2MTIpKSB7CisgICAgICAgICAgICBpZiAoIW92ZXJsYXAgfHwgIXYxMi5p
bnRlcnNlY3QoaW50ZXJ2YWwsIGludGVydmFsKSkgeworICAgICAgICAgICAgICAgIGlmIChvdmVy
bGFwKQorICAgICAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworICAgICAgICAg
ICAgICAgIGludGVydmFsID0gdjEyOworICAgICAgICAgICAgICAgIG92ZXJsYXAgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHYxW2kxXS54MiA8IHYyW2kyXS54MikKKyAg
ICAgICAgICAgICAgICBpMSsrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGky
Kys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAg
ICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworICAgICAgICAgICAgb3ZlcmxhcCA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKHYxW2kxXS54MSA8IHYyW2kyXS54MSkKKyAgICAgICAgICAgICAg
ICBpMSsrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGkyKys7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgcnYuYXBwZW5kKGludGVydmFs
KTsKK30KKwordm9pZCBzdWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFw
ZUludGVydmFsPiYgcnYpCit7CisgICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKKyAgICBz
aXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOworCisgICAgaWYgKCF2MVNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghdjJTaXplKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdp
bigpLCB2MS5lbmQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCBpMSA9IDAsIGkyID0g
MDsKKyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworCisgICAg
ICAgIHdoaWxlIChpMSA8IHJ2LnNpemUoKSAmJiBpMiA8IHYyU2l6ZSkgeworICAgICAgICAgICAg
U2hhcGVJbnRlcnZhbCYgaW50ZXJ2YWwxID0gcnZbaTFdOworICAgICAgICAgICAgY29uc3QgU2hh
cGVJbnRlcnZhbCYgaW50ZXJ2YWwyID0gdjJbaTJdOworCisgICAgICAgICAgICBpZiAoaW50ZXJ2
YWwyLngxIDw9IGludGVydmFsMS54MSAmJiBpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwxLngyKQor
ICAgICAgICAgICAgICAgIHJ2LnJlbW92ZShpMSk7CisgICAgICAgICAgICBlbHNlIGlmIChpbnRl
cnZhbDIueDIgPCBpbnRlcnZhbDEueDEpCisgICAgICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGludGVydmFsMS54MikKKyAgICAgICAgICAg
ICAgICBpMSArPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2
YWwxLngxICYmIGludGVydmFsMi54MiA8IGludGVydmFsMS54MikgeworICAgICAgICAgICAgICAg
IHJ2Lmluc2VydChpMSwgU2hhcGVJbnRlcnZhbChpbnRlcnZhbDEueDEsIGludGVydmFsMi54MSkp
OworICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54MjsKKyAgICAgICAg
ICAgICAgICBpMiArPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlcnZhbDIueDEgPD0g
aW50ZXJ2YWwxLngxKSB7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwy
LngyOworICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICB9IGVsc2UgIHsgLy8g
KGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwx
LngyID0gaW50ZXJ2YWwyLngxOworICAgICAgICAgICAgICAgIGkxICs9IDE7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGZmMTRkOGE1YTcyMzJkOTJlZGEzZGZkOTM3NzhhOTJjZDY5NTQ0MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlSW50ZXJ2YWxfaAorI2RlZmluZSBT
aGFwZUludGVydmFsX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdHJ1Y3QgU2hhcGVJbnRlcnZhbCB7CitwdWJsaWM6CisgICAgZmxvYXQgeDE7
CisgICAgZmxvYXQgeDI7CisKKyAgICBTaGFwZUludGVydmFsKGZsb2F0IHgxID0gMCwgZmxvYXQg
eDIgPSAwKQorICAgICAgICA6IHgxKHgxKQorICAgICAgICAsIHgyKHgyKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGludGVyc2VjdChjb25zdCBTaGFwZUludGVydmFsJiwgU2hhcGVJbnRlcnZh
bCYpIGNvbnN0OworfTsKKwordm9pZCBzb3J0U2hhcGVJbnRlcnZhbHMoVmVjdG9yPFNoYXBlSW50
ZXJ2YWw+Jik7Cit2b2lkIG1lcmdlU2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50
ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgVmVjdG9yPFNoYXBlSW50ZXJ2
YWw+Jik7Cit2b2lkIGludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVy
dmFsPiYpOwordm9pZCBzdWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVy
dmFsPiYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFwZUludGVy
dmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVP
dXRzaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0
c2lkZUluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxOTJmNjUwNWQ4MjEyODM5MjgyZmFkOTNlNmUyNjNi
MGRhZDIxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQorCisjaW5jbHVkZSAiU2hhcGVPdXRzaWRlSW5mby5oIgorCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Jvb2wgU2hhcGVPdXRzaWRlSW5mbzo6
aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCogYm94KQoreworICAgIFNoYXBlVmFsdWUqIHZh
bHVlID0gYm94LT5zdHlsZSgpLT5zaGFwZU91dHNpZGUoKTsKKyAgICByZXR1cm4gYm94LT5pc0Zs
b2F0aW5nV2l0aFNoYXBlT3V0c2lkZSgpICYmIHZhbHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6
U2hhcGUgJiYgdmFsdWUtPnNoYXBlKCk7Cit9CisKK2Jvb2wgU2hhcGVPdXRzaWRlSW5mbzo6Y29t
cHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhl
aWdodCkKK3sKKyAgICBpZiAoc2hhcGVTaXplRGlydHkoKSB8fCBtX2xpbmVUb3AgIT0gbGluZVRv
cCB8fCBtX2xpbmVIZWlnaHQgIT0gbGluZUhlaWdodCkgeworICAgICAgICBpZiAoU2hhcGVJbmZv
PFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVk
ZWRJbnRlcnZhbHM+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQp
KSB7CisgICAgICAgICAgICBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9z
ZWdtZW50c1swXS5sb2dpY2FsTGVmdCAtIHNoYXBlTG9naWNhbExlZnQoKTsKKyAgICAgICAgICAg
IG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1ttX3NlZ21l
bnRzLnNpemUoKS0xXS5sb2dpY2FsUmlnaHQgLSBzaGFwZUxvZ2ljYWxSaWdodCgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YSA9IDA7CisgICAgICAgICAgICBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgbV9saW5lVG9wID0gbGluZVRvcDsKKyAgICB9CisKKyAg
ICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jYmU1OTA1NmNjMWVkN2QwMjQ2MmVmNGE0NzE2Y2QzOTdiYmVhM2QzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
CisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTaGFwZU91dHNpZGVJbmZvX2gKKyNkZWZpbmUgU2hhcGVPdXRzaWRlSW5mb19oCisKKyNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRlICJT
aGFwZUluZm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJCb3g7CisK
K2NsYXNzIFNoYXBlT3V0c2lkZUluZm8gOiBwdWJsaWMgU2hhcGVJbmZvPFJlbmRlckJveCwgJlJl
bmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+LCBw
dWJsaWMgTWFwcGVkSW5mbzxSZW5kZXJCb3gsIFNoYXBlT3V0c2lkZUluZm8+IHsKK3B1YmxpYzoK
KyAgICBMYXlvdXRTaXplIHNoYXBlTG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIExheW91
dFNpemUoc2hhcGVMb2dpY2FsTGVmdCgpLCBzaGFwZUxvZ2ljYWxUb3AoKSk7IH0KKworICAgIExh
eW91dFVuaXQgbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVy
biBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOyB9CisgICAgTGF5b3V0VW5pdCBy
aWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0
U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsgfQorCisgICAgdmlydHVhbCBib29sIGNvbXB1
dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWln
aHQpIE9WRVJSSURFOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGVPdXRzaWRlSW5mbz4g
Y3JlYXRlSW5mbyhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihu
ZXcgU2hhcGVPdXRzaWRlSW5mbyhyZW5kZXJlcikpOyB9CisgICAgc3RhdGljIGJvb2wgaXNFbmFi
bGVkRm9yKGNvbnN0IFJlbmRlckJveCopOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlv
dXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBjb21wdXRlZFNoYXBlKCktPnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCk7
IH0KKworcHJpdmF0ZToKKyAgICBTaGFwZU91dHNpZGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVu
ZGVyZXIpIDogU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUs
ICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+KHJlbmRlcmVyKSB7IH0KKworICAgIExheW91
dFVuaXQgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsKKyAgICBMYXlvdXRVbml0
IG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOworICAgIExheW91dFVuaXQgbV9s
aW5lVG9wOworfTsKKworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5MTlkMzk1NzMyMzgyZjNiMjc2YWM1Njc2YTYyZGIxNmYwN2ZlY2I4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICog
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhj
bHVzaW9uU2hhcGVWYWx1ZV9oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlVmFsdWVfaAotCi0jaW5j
bHVkZSAiQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJTdHlsZUltYWdlLmgiCi0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFeGNsdXNp
b25TaGFwZVZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gewot
cHVibGljOgotICAgIGVudW0gRXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgewotICAgICAgICAvLyBU
aGUgQXV0byB2YWx1ZSBpcyBkZWZpbmVkIGJ5IGEgbnVsbCBFeGNsdXNpb25TaGFwZVZhbHVlKgot
ICAgICAgICBTaGFwZSwKLSAgICAgICAgT3V0c2lkZSwKLSAgICAgICAgSW1hZ2UKLSAgICB9Owot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gY3JlYXRlU2hhcGVW
YWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBFeGNsdXNpb25TaGFwZVZhbHVlKHNoYXBlKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gY3JlYXRlT3V0c2lkZVZhbHVl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhjbHVzaW9uU2hhcGVWYWx1
ZShPdXRzaWRlKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hh
cGVWYWx1ZT4gY3JlYXRlSW1hZ2VWYWx1ZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGNsdXNpb25TaGFwZVZhbHVlKGlt
YWdlKSk7Ci0gICAgfQotCi0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIEJhc2ljU2hhcGUqIHNoYXBlKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFwZS5nZXQoKTsgfQotICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0SW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ltYWdlICE9IGltYWdlKQotICAgICAg
ICAgICAgbV9pbWFnZSA9IGltYWdlOwotICAgIH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RXhjbHVzaW9uU2hhcGVWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhl
ci50eXBlKCk7IH0KLQotcHJpdmF0ZToKLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKFBhc3NSZWZQ
dHI8QmFzaWNTaGFwZT4gc2hhcGUpCi0gICAgICAgIDogbV90eXBlKFNoYXBlKQotICAgICAgICAs
IG1fc2hhcGUoc2hhcGUpCi0gICAgewotICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKEV4
Y2x1c2lvblNoYXBlVmFsdWVUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAg
ewotICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
aW1hZ2UpCi0gICAgICAgIDogbV90eXBlKEltYWdlKQotICAgICAgICAsIG1faW1hZ2UoaW1hZ2Up
Ci0gICAgewotICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlVHlwZSBtX3R5cGU7Ci0gICAg
UmVmUHRyPEJhc2ljU2hhcGU+IG1fc2hhcGU7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1faW1h
Z2U7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggOTBmOWVjNzY0Mzk4YzhlYzkyYzMwZjhkYjAxYjlhNzA1
ODE4OGY5Zi4uYTQwMzdjMjU5MjEwNTkwZGM0NDBhMjhiZGVkYzhjNDA4ZmJiMGY5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC00NjIs
NyArNDYyLDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoY29uc3Qg
UmVuZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25lZCYgY2hhbmcKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisjaWYgRU5BQkxFKENT
U19TSEFQRVMpCiAgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZUluc2lk
ZSAhPSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVJbnNpZGUpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgpAQCAtMTczMyw5ICsxNzMzLDkgQEAgdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQoTGVuZ3RoQm94IG91dHNldCkKICAgICBzdXJy
b3VuZC5hY2Nlc3MoKS0+Ym9yZGVyLm1faW1hZ2Uuc2V0T3V0c2V0KG91dHNldCk7CiB9CiAKLUV4
Y2x1c2lvblNoYXBlVmFsdWUqIFJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGUoKQorU2hh
cGVWYWx1ZSogUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZSgpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4sIHNPdXRzaWRlVmFsdWUs
IChFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPFNoYXBlVmFsdWU+LCBzT3V0c2lkZVZhbHVlLCAoU2hhcGVW
YWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpKTsKICAgICByZXR1cm4gc091dHNpZGVWYWx1ZS5n
ZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAppbmRleCBlZDllMzM1MGEwZWY2NDZkOWU3MWYxYTAxOTdlNmU4Y2E5YjJmODg0Li44M2ZlMDIz
OGQyNGE1YmI1MWZhNGI0NWUyZmEwNGM1ODNkOTM4M2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUg
IkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb3VudGVyRGlyZWN0aXZlcy5oIgogI2luY2x1ZGUg
IkRhdGFSZWYuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCiAjaW5jbHVkZSAi
Rm9udEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlcy5oIgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJTaGFkb3dE
YXRhLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgIlN0eWxlQmFja2dyb3Vu
ZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZUJveERhdGEuaCIKICNpbmNsdWRlICJTdHlsZURlcHJl
Y2F0ZWRGbGV4aWJsZUJveERhdGEuaCIKQEAgLTQ2Myw3ICs0NjMsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBoYXNQYWludE9mZnNldCgpIGNvbnN0CiAgICAgewogICAgICAgICBib29sIHBhaW50T2Zm
c2V0ID0gaGFzSW5GbG93UG9zaXRpb24oKTsKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCisj
aWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgICAgIHBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQg
fHwgKGlzRmxvYXRpbmcoKSAmJiBzaGFwZU91dHNpZGUoKSk7CiAjZW5kaWYKICAgICAgICAgcmV0
dXJuIHBhaW50T2Zmc2V0OwpAQCAtMTQ3MCwzMSArMTQ3MCwzMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRLZXJuaW5nKFNWR0xlbmd0aCBrKSB7IGFjY2Vzc1NWR1N0eWxlKCktPnNldEtlcm5pbmco
ayk7IH0KICNlbmRpZgogCi0gICAgdm9pZCBzZXRTaGFwZUluc2lkZShQYXNzUmVmUHRyPEV4Y2x1
c2lvblNoYXBlVmFsdWU+IHZhbHVlKQorICAgIHZvaWQgc2V0U2hhcGVJbnNpZGUoUGFzc1JlZlB0
cjxTaGFwZVZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9zaGFwZUluc2lkZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fc2hhcGVJbnNpZGUgPSB2YWx1ZTsK
ICAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUoKSBjb25zdCB7IHJl
dHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZUluc2lkZS5nZXQoKTsgfQotICAgIEV4
Y2x1c2lvblNoYXBlVmFsdWUqIHJlc29sdmVkU2hhcGVJbnNpZGUoKSBjb25zdAorICAgIFNoYXBl
VmFsdWUqIHNoYXBlSW5zaWRlKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fc2hhcGVJbnNpZGUuZ2V0KCk7IH0KKyAgICBTaGFwZVZhbHVlKiByZXNvbHZlZFNoYXBlSW5z
aWRlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlSW5z
aWRlID0gdGhpcy0+c2hhcGVJbnNpZGUoKTsKLSAgICAgICAgaWYgKHNoYXBlSW5zaWRlICYmIHNo
YXBlSW5zaWRlLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6T3V0c2lkZSkKKyAgICAg
ICAgU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUgPSB0aGlzLT5zaGFwZUluc2lkZSgpOworICAgICAg
ICBpZiAoc2hhcGVJbnNpZGUgJiYgc2hhcGVJbnNpZGUtPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpP
dXRzaWRlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXBlT3V0c2lkZSgpOwogICAgICAgICByZXR1
cm4gc2hhcGVJbnNpZGU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTaGFwZU91dHNpZGUoUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFNoYXBlT3V0c2lk
ZShQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fc2hhcGVPdXRz
aWRlID0gdmFsdWU7CiAgICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlT3V0c2lk
ZSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZS5n
ZXQoKTsgfQorICAgIFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSgpIGNvbnN0IHsgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZS5nZXQoKTsgfQogCi0gICAgc3RhdGlj
IEV4Y2x1c2lvblNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZUluc2lkZSgpOwotICAgIHN0YXRpYyBF
eGNsdXNpb25TaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVPdXRzaWRlKCkgeyByZXR1cm4gMDsgfQor
ICAgIHN0YXRpYyBTaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVJbnNpZGUoKTsKKyAgICBzdGF0aWMg
U2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlT3V0c2lkZSgpIHsgcmV0dXJuIDA7IH0KIAogICAgIHZv
aWQgc2V0Q2xpcFBhdGgoUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gb3BlcmF0aW9uKQog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY3NGFlZWIyOWY4MjVjYmE1OTM4NTdiMTA5YTlkMWFiNDQ0OWNiMGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oCkBA
IC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFw
ZVZhbHVlX2gKKyNkZWZpbmUgU2hhcGVWYWx1ZV9oCisKKyNpbmNsdWRlICJCYXNpY1NoYXBlcy5o
IgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXBlVmFsdWUgOiBwdWJsaWMgUmVmQ291
bnRlZDxTaGFwZVZhbHVlPiB7CitwdWJsaWM6CisgICAgZW51bSBTaGFwZVZhbHVlVHlwZSB7Cisg
ICAgICAgIC8vIFRoZSBBdXRvIHZhbHVlIGlzIGRlZmluZWQgYnkgYSBudWxsIFNoYXBlVmFsdWUq
CisgICAgICAgIFNoYXBlLAorICAgICAgICBPdXRzaWRlLAorICAgICAgICBJbWFnZQorICAgIH07
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBjcmVhdGVTaGFwZVZhbHVlKFBh
c3NSZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNoYXBlVmFsdWUoc2hhcGUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTaGFwZVZhbHVlPiBjcmVhdGVPdXRzaWRlVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTaGFwZVZhbHVlKE91dHNpZGUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBjcmVhdGVJbWFnZVZhbHVlKFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXBlVmFs
dWUoaW1hZ2UpKTsKKyAgICB9CisKKyAgICBTaGFwZVZhbHVlVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisgICAgQmFzaWNTaGFwZSogc2hhcGUoKSBjb25zdCB7IHJldHVybiBt
X3NoYXBlLmdldCgpOyB9CisgICAgU3R5bGVJbWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X2ltYWdlLmdldCgpOyB9CisgICAgdm9pZCBzZXRJbWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IGltYWdlKQorICAgIHsKKyAgICAgICAgaWYgKG1faW1hZ2UgIT0gaW1hZ2UpCisgICAgICAgICAg
ICBtX2ltYWdlID0gaW1hZ2U7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFw
ZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKTsgfQor
Citwcml2YXRlOgorICAgIFNoYXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZSkK
KyAgICAgICAgOiBtX3R5cGUoU2hhcGUpCisgICAgICAgICwgbV9zaGFwZShzaGFwZSkKKyAgICB7
CisgICAgfQorICAgIFNoYXBlVmFsdWUoU2hhcGVWYWx1ZVR5cGUgdHlwZSkKKyAgICAgICAgOiBt
X3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIFNoYXBlVmFsdWUoUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBpbWFnZSkKKyAgICAgICAgOiBtX3R5cGUoSW1hZ2UpCisgICAgICAgICwgbV9pbWFn
ZShpbWFnZSkKKyAgICB7CisgICAgfQorICAgIFNoYXBlVmFsdWVUeXBlIG1fdHlwZTsKKyAgICBS
ZWZQdHI8QmFzaWNTaGFwZT4gbV9zaGFwZTsKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFn
ZTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCAwYTNjN2E4Y2Fj
MWJjMjBhMGU0NDVkOTczM2Q3MDVhNjA1YmQxMWNjLi4wNzY3YWQ4YzMxZmM3ZGY4ZGZhZDljOGFk
YTk0OTliZTBjOWY0OWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTMwLDEwICszMCwxMCBA
QAogI2luY2x1ZGUgIkNvdW50ZXJEaXJlY3RpdmVzLmgiCiAjaW5jbHVkZSAiQ3Vyc29yRGF0YS5o
IgogI2luY2x1ZGUgIkRhdGFSZWYuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgi
CiAjaW5jbHVkZSAiRmlsbExheWVyLmgiCiAjaW5jbHVkZSAiTGluZUNsYW1wVmFsdWUuaCIKICNp
bmNsdWRlICJOaW5lUGllY2VJbWFnZS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC0xMzYsOCArMTM2LDggQEAgcHVibGljOgogCiAgICAgTGVuZ3Ro
U2l6ZSBtX3BhZ2VTaXplOwogCi0gICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IG1fc2hh
cGVJbnNpZGU7Ci0gICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IG1fc2hhcGVPdXRzaWRl
OworICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBtX3NoYXBlSW5zaWRlOworICAgIFJlZlB0cjxTaGFw
ZVZhbHVlPiBtX3NoYXBlT3V0c2lkZTsKICAgICBMZW5ndGggbV9zaGFwZU1hcmdpbjsKICAgICBM
ZW5ndGggbV9zaGFwZVBhZGRpbmc7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuY3BwCmluZGV4IDJjMWM3OTg5YWZiMWNhMzgxOWM1OTRhNDU4ZmM5ZjMxYWEwZWEx
MmMuLjY0M2FjMGUzYzNiYTA1NTkwMzRkZWUxZjkwMzU1OTY3YjZlYmFjNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcApAQCAtNjYsNyArNjYsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbnRlcm5hbFNldHRpbmdzOjpCYWNrdXA6OkJhY2t1cChT
ZXR0aW5ncyogc2V0dGluZ3MpCi0gICAgOiBtX29yaWdpbmFsQ1NTRXhjbHVzaW9uc0VuYWJsZWQo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6Y3NzRXhjbHVzaW9uc0VuYWJsZWQoKSkKKyAgICA6IG1f
b3JpZ2luYWxDU1NTaGFwZXNFbmFibGVkKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmNzc1NoYXBl
c0VuYWJsZWQoKSkKICAgICAsIG1fb3JpZ2luYWxDU1NWYXJpYWJsZXNFbmFibGVkKHNldHRpbmdz
LT5jc3NWYXJpYWJsZXNFbmFibGVkKCkpCiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgLCBt
X29yaWdpbmFsU2hhZG93RE9NRW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFkb3dE
T01FbmFibGVkKCkpCkBAIC0xMDMsNyArMTAzLDcgQEAgSW50ZXJuYWxTZXR0aW5nczo6QmFja3Vw
OjpCYWNrdXAoU2V0dGluZ3MqIHNldHRpbmdzKQogCiB2b2lkIEludGVybmFsU2V0dGluZ3M6OkJh
Y2t1cDo6cmVzdG9yZVRvKFNldHRpbmdzKiBzZXR0aW5ncykKIHsKLSAgICBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzZXRDU1NFeGNsdXNpb25zRW5hYmxlZChtX29yaWdpbmFsQ1NTRXhjbHVzaW9u
c0VuYWJsZWQpOworICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldENTU1NoYXBlc0VuYWJs
ZWQobV9vcmlnaW5hbENTU1NoYXBlc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRDU1NWYXJp
YWJsZXNFbmFibGVkKG1fb3JpZ2luYWxDU1NWYXJpYWJsZXNFbmFibGVkKTsKICNpZiBFTkFCTEUo
U0hBRE9XX0RPTSkKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRTaGFkb3dET01FbmFi
bGVkKG1fb3JpZ2luYWxTaGFkb3dET01FbmFibGVkKTsKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lk
IEludGVybmFsU2V0dGluZ3M6OnNldFRleHRBdXRvc2l6aW5nRm9udFNjYWxlRmFjdG9yKGZsb2F0
IGZvbnRTY2FsZUZhY3RvciwgRQogdm9pZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRDU1NFeGNsdXNp
b25zRW5hYmxlZChib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q1NTRXhjbHVzaW9u
c0VuYWJsZWQoZW5hYmxlZCk7CisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0Q1NTU2hh
cGVzRW5hYmxlZChlbmFibGVkKTsKIH0KIAogdm9pZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRDU1NW
YXJpYWJsZXNFbmFibGVkKGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCmluZGV4IGY3YTBiYmQ0ZGZmMjkzYmMy
ZTQxOTk5MTc2Njg3ZTIzNjNkNTM4ZmQuLmMwN2Q0NzIxOTU0Zjg5YjZmMzUwYjU0YTljNjcxMDMy
ZmI2ODNiNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0
aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCkBA
IC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgQmFja3VwKFNldHRpbmdz
Kik7CiAgICAgICAgIHZvaWQgcmVzdG9yZVRvKFNldHRpbmdzKik7CiAKLSAgICAgICAgYm9vbCBt
X29yaWdpbmFsQ1NTRXhjbHVzaW9uc0VuYWJsZWQ7CisgICAgICAgIGJvb2wgbV9vcmlnaW5hbENT
U1NoYXBlc0VuYWJsZWQ7CiAgICAgICAgIGJvb2wgbV9vcmlnaW5hbENTU1ZhcmlhYmxlc0VuYWJs
ZWQ7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgICAgIGJvb2wgbV9vcmlnaW5hbFNoYWRv
d0RPTUVuYWJsZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203894</attachid>
            <date>2013-06-05 17:34:44 -0700</date>
            <delta_ts>2013-06-06 11:19:00 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-117162-20130605173313.patch</filename>
            <type>text/plain</type>
            <size>285593</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTlhZGM5M2U4YjRhNDM5
MjIzNzc0YmU4ZTc1N2IzYTcyNjUyZjczMC4uMjNhODQ0NTAyOTFkODNhMTlkZTdjOTY1ZTgwODkx
MTZhYjcwOWJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIxNCBAQAogMjAxMy0wNi0wNSAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSBz
cGxpdCBiZXR3ZWVuIHRoZSBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9ucywKKyAgICAgICAgc29tZSByZW5hbWluZyBpcyBuZWNlc3NhcnkuIEluIGdlbmVyYWwsIHRo
aXMgcGF0Y2ggcmVtb3ZlcyAnRXhjbHVzaW9uJyBmcm9tCisgICAgICAgIGFueSBTaGFwZXMgY29k
ZSwgbW9zdGx5IHJlbmFtaW5nIEV4Y2x1c2lvblNoYXBlIC0+IFNoYXBlLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAg
ICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
cHJvcGVydHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAg
ICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVNoYXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5U2hhcGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVNoYXBlOjpjcmVhdGVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVu
Yyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFw
cGVyU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmVuc3Vy
ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlv
dXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2hhcGVJbnNpZGVJbmZv
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVTaGFwZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0
ZXJDaGlsZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0Rmxv
YXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dp
Y2FsTG9jYXRpb25Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9z
aXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5zdXJlU2hhcGVJbnNpZGVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaGFwZUluc2lkZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNldFNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnlQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRTaGFwZUluc2lkZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpMaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rp
b25Qb3NpdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5z
Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMb2dpY2FsTGluZVRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5k
TG9naWNhbEhlaWdodElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6d2lsbEJlRGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJT
dHlsZUNoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzaGFwZU91dHNpZGVJbmZvKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50T2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmll
dy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JlZmxleFZlcnRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjppbndhcmRFZGdlTm9ybWFsKToKKyAgICAgICAgKFdlYkNvcmU6Om91dHdhcmRFZGdlTm9ybWFs
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
VmVydGljZXNUb0xheW91dFVuaXRHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTaGFw
ZVBhZGRpbmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNoYXBlTWFyZ2luQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVF
ZGdlSW50ZXJzZWN0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdl
YkNvcmU6OmFib3ZlT3JUb1RoZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBl
OjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1BvbHlnb25TaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25F
ZGdlOjpPZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29u
RWRnZTo6ZWRnZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpi
YXNpcyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OlBvbHlnb25TaGFwZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlw
c2VZSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OnBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2Vw
dEZvcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBlTWFyZ2lu
Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZElu
dGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJ
bnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFu
Z2xlU2hhcGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OkZsb2F0
Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cngpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVjdGFuZ2xlU2hhcGU6OlJlY3RhbmdsZVNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWN0YW5nbGVTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9seWdv
blNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUmVjdFRvTG9naWNhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6
OnBoeXNpY2FsU2l6ZVRvTG9naWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRl
U2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oLgorICAgICAgICAoV2Vi
Q29yZTo6TGluZVNlZ21lbnQ6OkxpbmVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
Ojp+U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlTWFyZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpzaGFwZVBhZGRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wdXRlZFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hcHBlZEluZm86OmVuc3VyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6
cmVtb3ZlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjppbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcHBlZEluZm86OmluZm9NYXApOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVJbmZvOjp+U2hhcGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2V0U2hh
cGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6Y2xlYXJTZWdtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJ
bmZvOjpzaGFwZUxvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNo
YXBlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dp
Y2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExpbmVUb3Ap
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGluZUJvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsaW5lV2l0aGluU2hhcGVCb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpkaXJ0eVNoYXBlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlU2l6ZURpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5m
bzo6b3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpTaGFwZUluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsVG9wT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6TGluZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZVNlZ21lbnRJdGVyYXRvcjo6TGluZVNlZ21lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJ
bnNpZGVJbmZvOjpoYXNTZWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUlu
Zm86OnNlZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2VnbWVu
dFJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OmN1cnJlbnRTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2V0TmVlZHNMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpuZWVkc0xheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OlNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUludGVydmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFNoYXBl
SW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlU2hhcGVJbnRlcnZhbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6c3VidHJhY3RTaGFwZUludGVydmFscyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUludGVydmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uSW50ZXJ2YWwuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW50ZXJ2YWw6OlNoYXBl
SW50ZXJ2YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjppc0Vu
YWJsZWRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNl
Z21lbnRzRm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJ
bmZvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hh
cGVMb2dpY2FsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86Omxl
ZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
T3V0c2lkZUluZm86OnJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlT3V0c2lkZUluZm86OlNoYXBlT3V0c2lkZUluZm8pOgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6aW5pdGlhbFNoYXBlSW5zaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUu
aC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcGVWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpzaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZVZhbHVlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVl
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OlNoYXBlVmFsdWUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6
CisKKzIwMTMtMDYtMDUgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgorCiAgICAg
ICAgIFtDU1MgRXhjbHVzaW9uc11bQ1NTIFNoYXBlc10gU3BsaXQgQ1NTIEV4Y2x1c2lvbnMgJiBT
aGFwZXMgY29tcGlsZSAmIHJ1bnRpbWUgZmxhZ3MKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzE3MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDhl
ODM3MzU5YzkzNTY2ZGM1NTZhNGUzZjI4NzljYzZiNzk3MjFlZmQuLjNlOGM3YmE1YTc2YjVmMzJk
YzE3Yjc2NDIxZWQ5MWZmYmU1NzcwMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMDkzLDEz
ICsyMDkzLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNw
cAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAKICAgICByZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcAotICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmNwcAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUu
Y3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcAotICAgIHJlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluZm8uY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAKICAgICBy
ZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiAgICAgcmVuZGVyaW5nL0ZpeGVkVGFi
bGVMYXlvdXQuY3BwCiAgICAgcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAt
MjIwMCw2ICsyMTkzLDEzIEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvUmVu
ZGVyV29yZEJyZWFrLmNwcAogICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAogICAgIHJl
bmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25T
aGFwZS5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcAorICAgIHJl
bmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8u
Y3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwCisgICAgcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVP
dXRzaWRlSW5mby5jcHAKICAgICByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKICAgICByZW5k
ZXJpbmcvYnJlYWtfbGluZXMuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDg0MWE1NDE5NTA0Yjg2MDdlYzI0YWE0M2YxN2M5NjE5MjZmNWNiZjEuLjQ3MDkwY2VmY2U1Mjhk
ZWMwYWYyYjJmZTA1MzFkNTcwY2NhMTg2MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtNDM4NSwyMCArNDM4NSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblJlY3RhbmdsZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBcCi0JU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBcCi0JU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKQEAgLTQ2MTAsNiArNDU5NiwyMCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
c2l6ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1ZlcnRpY2FsUG9zaXRpb25DYWNo
ZS5oIFwKQEAgLTQ2NDYsNyArNDY0Niw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1cnNvckRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0RhdGFSZWYuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1
c2lvblNoYXBlVmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxM
YXllci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oIFwKQEAgLTQ2
NjMsNiArNDY2Miw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TaGFkb3dEYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1No
YWRvd0RhdGEuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0
YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRhLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCAwYjRhNGZkOWQwNmRkZDg1M2YyMDZjMTUyYjA3ZGMwMmMyZjJhNjc5
Li4wN2JhOGJkOTc3YWY3ODNmZDExNWYzMGNkNjFkYzRlZjI0ZDg0YjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
QEAgLTExNDUsMTMgKzExNDUsNiBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvQmlkaVJ1
bi5jcHAgXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAgXAogICAgIHJlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAot
ICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1
c2lvblJlY3RhbmdsZS5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAgXAot
ICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm8uY3BwIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
IFwKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXAogICAgIHJlbmRlcmluZy9G
bG93VGhyZWFkQ29udHJvbGxlci5jcHAgXApAQCAtMTI0NSw2ICsxMjM4LDEzIEBAIFNPVVJDRVMg
Kz0gXAogICAgIHJlbmRlcmluZy9SZW5kZXJXb3JkQnJlYWsuY3BwIFwKICAgICByZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAgXAor
ICAgIHJlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBcCisgICAgcmVuZGVyaW5nL3No
YXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3Bw
IFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgXAorICAgIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
dGVydmFsLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBc
CiAgICAgcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0
eWxlL0NvbnRlbnREYXRhLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3Rp
dmVzLmNwcCBcCkBAIC0yNDAzLDEzICsyNDAzLDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVy
aW5nL2JyZWFrX2xpbmVzLmggXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5oIFwKICAgICBy
ZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFs
LmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotICAgIHJlbmRlcmluZy9F
eGNsdXNpb25SZWN0YW5nbGUuaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggXAot
ICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5oIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBcCiAgICAg
cmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaCBcCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZS5oIFwKQEAgLTI1MTMsMTggKzI1MDYsMjUgQEAgSEVBREVSUyArPSBcCiAg
ICAgcmVuZGVyaW5nL1JlbmRlcldvcmRCcmVhay5oIFwKICAgICByZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5oIFwKICAgICByZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCBcCisgICAgcmVuZGVyaW5n
L3NoYXBlcy9Qb2x5Z29uU2hhcGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVT
aGFwZS5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggXAorICAgIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbmZvLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZv
LmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwKKyAgICByZW5kZXJp
bmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Jhc2lj
U2hhcGVzLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5oIFwKICAgICByZW5k
ZXJpbmcvc3R5bGUvQ291bnRlckRpcmVjdGl2ZXMuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1
cnNvckRhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3QuaCBcCi0gICAgcmVu
ZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxl
L0ZpbGxMYXllci5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmggXAogICAg
IHJlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUv
UXVvdGVzRGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBcCiAgICAg
cmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaCBcCisgICAgcmVuZGVyaW5nL3N0eWxlL1NoYXBl
VmFsdWUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaCBcCiAg
ICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlQm94RGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUv
U3R5bGVDYWNoZWRJbWFnZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCmluZGV4IGU4MDcyMDFiNDExMGI5Y2FjZTc1ZjBlMTYwNzRkMzJkMmVj
MGQ3NjkuLjBkOTVhMjI5MmNmNTBlMGE3Y2U1NTdmOTZlMmJiMjA0YjQ0NjIwMjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNTQyMiwx
MiArNTQyMiw2IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGUuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIj4KICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19X
aW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtNjMwNiw2ICs2MzAw
LDEyIEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8u
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFw
ZUludGVydmFsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcU2hhcGVPdXRzaWRlSW5mby5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc3ZnXFNWR1BhdGhEYXRhLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4z
MiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTEyMTA5LDExICsxMjEwOSw2IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcYnJlYWtfbGluZXMuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xDb3VudGVyTm9kZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVsbGlwc2lzQm94LmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29u
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hh
cGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaXhlZFRhYmxlTGF5b3V0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmxvd1RocmVhZENvbnRyb2xsZXIuaCIgLz4KQEAg
LTEyMTk3LDYgKzEyMTkyLDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcUmVuZGVyU2VsZWN0aW9uSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXFJlbmRlclNsaWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXFJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUlu
Zm8uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hh
cGVJbnRlcnZhbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNo
YXBlc1xTaGFwZU91dHNpZGVJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0Jsb2NrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0NvbnRhaW5lci5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCIgLz4K
QEAgLTEyMjY5LDcgKzEyMjcwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdHlsZVxDdXJzb3JEYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcc3R5bGVcQ3Vyc29yTGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXHN0eWxlXERhdGFSZWYuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xzdHlsZVxFeGNsdXNpb25TaGFwZVZhbHVlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRmlsbExheWVyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcR3JpZFBvc2l0aW9uLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcR3JpZFRyYWNrU2l6ZS5o
IiAvPgpAQCAtMTIyODAsNiArMTIyODAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHN0eWxlXFJlbmRlclN0eWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc3R5bGVcUmVuZGVyU3R5bGVDb25zdGFudHMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFkb3dEYXRhLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU2hhcGVWYWx1ZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxlQmFja2dyb3Vu
ZERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxT
dHlsZUJveERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
dHlsZVxTdHlsZUNhY2hlZEltYWdlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZjVlODcyMzhjN2Yy
MDhiNzU4YTBmZDcxNjE4ZDAyZjRkMjJkYzcwMy4uNWUyY2UwOWVhNGY0YzNmODUzMmE4YjJjZGEz
MWFkMmU2NDA4M2ExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMjQzMiwyMyArMjQzMiwyMyBAQAogICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVsbGlw
c2lzQm94LmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbklu
dGVydmFsLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVz
XFBvbHlnb25TaGFwZS5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25Qb2x5Z29uLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
c2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xFeGNsdXNpb25TaGFwZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVy
aW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCI+CisgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50
ZXJ2YWwuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHNoYXBlc1xTaGFwZU91dHNpZGVJbmZvLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCI+CkBAIC05MTIwLDE5ICs5MTIwLDIyIEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRWxsaXBzaXNCb3guaCI+CiAg
ICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbkludGVydmFsLmgiPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hhcGUuaCI+
CisgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5o
Ij4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIj4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuaCI+CiAg
ICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmgiPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uaCI+
CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJ
bnRlcnZhbC5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcU2hhcGVPdXRzaWRlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCI+CkBAIC05NTg4LDkgKzk1OTEsNiBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXERhdGFSZWYuaCI+CiAgICAgICA8
RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEV4Y2x1c2lvblNoYXBlVmFsdWUu
aCI+Ci0gICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEZpbGxMYXll
ci5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CkBAIC05NjIxLDYgKzk2MjEsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHN0eWxlXFNoYWRvd0RhdGEuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xz
dHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXHN0eWxlXFNoYXBlVmFsdWUuaCI+CisgICAgICA8RmlsdGVyPnJlbmRlcmlu
Z1xzdHlsZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxlQmFja2dyb3VuZERhdGEuaCI+CiAgICAgICA8Rmls
dGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTUxODQs
NCArMTUxODcsNCBAQAogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0N1
c3RvbUJ1aWxkU3RlcD4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ1MGYyYzVmNWJkNjQwNGNmZmNkNzk5NWU2
NmE3ZmRmOTM1NGY5ODcuLjRjNDg3ZWE1M2ExNTM5ZDBkOGFkOGUzNTM3YWM3ZTk3MTExZTI4ZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTE4MzUsMTQgKzE4MzUsNiBAQAogCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVu
R0wuY3BwICovOyB9OwogCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNE
T3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi87IH07CiAJ
CTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKLQkJNkU4Nzk4QkExNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvbkludGVydmFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZh
bC5jcHAgKi87IH07Ci0JCTZFODc5OEJCMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRl
cnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4
Nzk4QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkU4Nzk4QkMxNUY4MUU0QTAw
QkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uUmVjdGFuZ2xlLmNwcCAqLzsgfTsKLQkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblJlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5o
ICovOyB9OwotCQk2RTg3OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4Qjgx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsKLQkJNkU4Nzk4QkYx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk2RUFGMzQwRjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRDE2
MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi87IH07Ci0JCTZFQUYzNDEw
MTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5oICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyog
SlNGbG9hdDY0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAq
LzsgfTsKIAkJNkVCQzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1
MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2
MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4
dHVyZUZsb2F0LmNwcCAqLzsgfTsKQEAgLTMyNjMsOCArMzI1NSw2IEBACiAJCTk4Q0U0MzJBMTI5
RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xvYWRl
ci5oICovOyB9OwogCQk5OEVCMUY5NTEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4RUIxRjk0
MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlBMUI2Rjk3MTU4ODY5QzgwMDExQThDNCAv
KiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5n
TGlzdEN1c3RvbS5jcHAgKi87IH07Ci0JCTlBOUNFRjhEMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlBOUNFRjhCMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmNwcCAqLzsgfTsKLQkJOUE5Q0VGOEUxNjNCM0VBMTAwREU3RUZFIC8qIEV4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlBOUNFRjhDMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOUIxQUIwN0MxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIxQUIwN0IxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb25DdXN0b20uY3BwICovOyB9OwogCQk5QjI0REU4RTE1MTk0Qjk1MDBDNTlDMjcgLyog
SFRNTEJESUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovOyB9
OwogCQk5QjJEOEE3OTE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMkQ4QTc4MTQ5OTdDQ0YwMEVDRUYz
RSAvKiBVbmRvU3RlcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01NzM5LDcgKzU3MjksNyBAQAogCQlGRDA2REZBNTEzNEE0REVGMDA2RjVEN0Qg
LyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDZERkEzMTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICovOyB9OwogCQlGRDA2REZBNjEzNEE0REVGMDA2
RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA2REZBNDEzNEE0REVGMDA2RjVEN0QgLyog
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi87IH07CiAJCUZEMTY2MEE1MTM3ODdDNkQw
MDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDE2NjBBNDEzNzg3QzZEMDAxRkZBN0IgLyogRGVub3JtYWxE
aXNhYmxlci5oICovOyB9OwotCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogRXhjbHVzaW9u
U2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDFBRjE1MDE2
NTZGMTUxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFs
dWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RDIzQTEyNTEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyM0Ex
MjMxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAq
LzsgfTsKIAkJRkQyM0ExMjYxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDIzQTEyNDEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuaCAqLzsgfTsKIAkJRkQyREJGMTIxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQyREJGMEUxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3b3JrICovOyB9OwpA
QCAtNTg1Niw2ICs1ODQ2LDIwIEBACiAJCUZEMzE2MEMwMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRG
cmFtZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDMxNjBCQTEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3BwICovOyB9OwogCQlG
RDM1OTE4RjEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzU5MThEMTM4REIyMjAw
MEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwICovOyB9OwogCQlGRDM1OTE5MDEzOERC
MjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDM1OTE4RTEzOERCMjIwMDBFMUVCRUMgLyogQXVk
aW9QYXJhbVRpbWVsaW5lLmggKi87IH07CisJCUZENDVBOTRGMTc1RDNGM0UwMEMyMUVDOCAvKiBT
aGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQw
OEE4N0YxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTAxNzVEM0YzRTAwQzIxRUM4IC8qIFNo
YXBlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQwOEE4ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTUxMTc1RDNGM0UwMEMyMUVD
OCAvKiBTaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZEMDhBODgzMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1
QTk1MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlT3V0c2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1MzE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0UxNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIx
RUM4IC8qIFNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLzsg
fTsKKwkJRkQ0NUE5NTUxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4MjE3NUQz
OTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NTYxNzVE
M0ZCODAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8qIFNo
YXBlT3V0c2lkZUluZm8uY3BwICovOyB9OworCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFFQzggLyog
UG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTgxNzVENDE0
QzAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xl
U2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlGRDQ1QTk1OTE3NUQ0MTcxMDBDMjFFQzggLyogUG9seWdvblNoYXBlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdBMTc1RDM5MjYwMDJD
RDM2MCAvKiBQb2x5Z29uU2hhcGUuY3BwICovOyB9OworCQlGRDQ1QTk1QTE3NUQ0MTcxMDBDMjFF
QzggLyogUmVjdGFuZ2xlU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBl
LmNwcCAqLzsgfTsKKwkJRkQ0NUE5NUIxNzVENDFFRTAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2YWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODg1
MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NUMxNzVENDIwRDAwQzIxRUM4IC8q
IFNoYXBlSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQwOEE4ODQxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuY3BwICov
OyB9OwogCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTAxMzdCNjUxODAw
MDA4RENFIC8qIFplcm9Qb2xlLmNwcCAqLzsgfTsKIAkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENF
IC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRDUzNzM1MTEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCAqLzsgfTsKIAkJRkQ1
MzczNTYxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1NDEzN0I2
NTNCMDAwMDhEQ0UgLyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCAqLzsgfTsKQEAgLTU4
NzgsOCArNTg4Miw2IEBACiAJCUZENkVEMkM4MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0Nv
bXByZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZENkVEMkM2MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuaCAqLzsgfTsK
IAkJRkQ2RjI1MkMxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZG
MjUyOTEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAq
LzsgfTsKIAkJRkQ2RjI1MkQxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQ2RjI1MkExM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
ICovOyB9OwotCQlGRDc0OEFCRjE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZENzQ4QUJEMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3Bw
ICovOyB9OwotCQlGRDc0OEFDMDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RDc0OEFCRTE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkQ3ODY4Qjkx
MzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc4NjhCNzEzNkI5OTkyMDBE
NDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLzsgfTsKIAkJRkQ3ODY4QkEx
MzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3ODY4QjgxMzZCOTk5MjAwRDQw
M0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovOyB9OwogCQlGRDdGMjk5MTEzRDRD
MENCMDBBRDk1MzUgLyogV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDdGMjk4QTEzRDRDMENCMDBBRDk1MzUgLyog
V2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgKi87IH07CkBAIC01OTQwLDggKzU5NDIsNiBAQAogCQlG
REIwNTJFMDE1NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjA1MkRFMTU2MUE0MkMw
MEI1MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oICovOyB9OwogCQlGREIxNzAwNTE0QTJC
QUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjE3MDAzMTRBMkJBQjIwMEEyQjVEOSAv
KiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwICovOyB9OwogCQlGREIxNzAwNjE0QTJCQUIyMDBB
MkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREIxNzAwNDE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlD
aGFubmVsUmVzYW1wbGVyLmggKi87IH07Ci0JCUZEQjhEMURBMTZCMEMwRDcwMDM0MEYxMCAvKiBF
eGNsdXNpb25TaGFwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZEQjhEMUQ5MTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGREI4
RDFFNTE2QjBDQzk3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjhEMURCMTZCMEMwRjYwMDM0
MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwICovOyB9OwogCQlGREJEMURGQzE2N0ZFMjdE
MDA1MUExMUUgLyogSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREJEMURGQjE2N0ZFMjdEMDA1MUExMUUgLyog
SlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgKi87IH07CiAJCUZEQkQ0ODBDMTU5QkM2ODcwMDkz
RUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQ0ODBBMTU5QkM2ODcwMDkzRUI0RiAv
KiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCAqLzsgfTsKIAkJRkRCRDQ4MEQxNTlC
QzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQ0ODBCMTU5QkM2ODcwMDkz
RUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmggKi87IH07CkBAIC04MjI4LDE0
ICs4MjI4LDYgQEAKIAkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25z
M0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBNTEyODBF
OEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk2RTg3OThCNDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50
ZXJ2YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9u
SW50ZXJ2YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNTE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXhjbHVzaW9uSW50ZXJ2YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkU4Nzk4QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25SZWN0YW5nbGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNzE1RjgxRTRBMDBCRkU0
QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2x1c2lvblJlY3RhbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2
RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9u
U2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1
IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhjbHVzaW9uUG9seWdvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJh
eS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5LmlkbDsgcGF0aCA9IGNh
bnZhcy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJD
NUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MDYsOCArOTY5OCw2IEBACiAJCTk4Q0U0
MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExpbmtMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlBMUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01TdHJp
bmdMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUE5Q0VGOEIx
NjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlBOUNFRjhDMTYzQjNFQTEwMERFN0VG
RSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUIxQUIwNzkxNjQ4QzY5RDAwNTFGM0YyIC8qIEhUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMUFCMDdCMTY0OEM3QzQwMDUxRjNGMiAvKiBKU0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjI0REU4QzE1MTk0Qjk1MDBDNTlDMjcgLyog
SFRNTEJESUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEJE
SUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTgwLDggKzEyNTcw
LDIyIEBACiAJCUZEMDBEN0EzMTRBM0Y2MTkwMDczNDAxMSAvKiBTaW5jUmVzYW1wbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbmNSZXNhbXBsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwNkRGQTMxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRDA2REZBNDEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3
QTE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHlnb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZEMDhBODdCMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seWdvblNoYXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdDMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVT
aGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWN0YW5nbGVT
aGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdEMTc1RDM5MjYw
MDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZWN0YW5nbGVTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4
QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RDA4QTg3RjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4
ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaGFwZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRDA4QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRDA4QTg4MjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlSW5zaWRlSW5mby5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgzMTc1RDM5MjYwMDJDRDM2MCAv
KiBTaGFwZUluc2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hh
cGVJbnNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg0MTc1
RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNoYXBlSW50ZXJ2YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRDA4QTg4NTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZUludGVydmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg2MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNp
ZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlT3V0
c2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4NzE3NUQz
OTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlbm9ybWFsRGlzYWJsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIEV4Y2x1c2lv
blNoYXBlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRXhjbHVzaW9u
U2hhcGVWYWx1ZS5oOyBwYXRoID0gc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogU2hhcGVW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaGFwZVZhbHVlLmg7IHBh
dGggPSBzdHlsZS9TaGFwZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZE
MjNBMTIzMTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMjNBMTI0
MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDJEQkYwRTEyQjA0OEEzMDBFRDk4
QzYgLyogQWNjZWxlcmF0ZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEFjY2VsZXJhdGUu
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5m
cmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC0xMjc0Miw4ICsxMjc0
Niw2IEBACiAJCUZENkYyNTI5MTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkQ2RjI1MkExM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ2RjI1MkIxM0Y1RUYwRTAw
NjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkQ3NDhBQkQxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RDc0OEFCRTE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDc4NjhCNzEzNkI5OTkyMDBENDAzREYg
LyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEN0YyOThB
MTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4MDcsOCArMTI4MDksNiBAQAogCQlGREIwNTJERTE1
NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9TdW1taW5nSnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkRCMTcwMDMxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJl
c2FtcGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdWx0aUNo
YW5uZWxSZXNhbXBsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREIxNzAw
NDE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGREI4RDFEOTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9u
U2hhcGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNo
YXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGREI4RDFEQjE2QjBDMEY2
MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZEQkQxREZCMTY3RkUyN0QwMDUxQTExRSAvKiBKU09zY2lsbGF0b3JOb2Rl
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT3NjaWxs
YXRvck5vZGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREJENDgw
QTE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCRDQ4MEIxNTlCQzY4
NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg5MjIsNyArMTg5MjIsNiBAQAogCQkJCUJDMjI3
MkExMEU4MkU4N0MwMEU3Rjk3NSAvKiBDdXJzb3JEYXRhLmggKi8sCiAJCQkJQkMyMjcyQUMwRTgy
RThGMzAwRTdGOTc1IC8qIEN1cnNvckxpc3QuaCAqLywKIAkJCQlCQzIyNzQ2RTBFODM2NjQ1MDBF
N0Y5NzUgLyogRGF0YVJlZi5oICovLAotCQkJCUZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBF
eGNsdXNpb25TaGFwZVZhbHVlLmggKi8sCiAJCQkJQkM1RUI2OUMwRTgxREFFQjAwQjI1OTY1IC8q
IEZpbGxMYXllci5jcHAgKi8sCiAJCQkJQkM1RUI2OUQwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxM
YXllci5oICovLAogCQkJCUExMjcwNUMyMTY1NkJENjUwMEMyRTI3QyAvKiBHcmlkUG9zaXRpb24u
aCAqLywKQEAgLTE4OTQwLDYgKzE4OTM5LDcgQEAKIAkJCQlCQzVFQjY2NzBFODFDQjcxMDBCMjU5
NjUgLyogUmVuZGVyU3R5bGVDb25zdGFudHMuaCAqLywKIAkJCQlCQzVFQjhDMTBFODIwMzFCMDBC
MjU5NjUgLyogU2hhZG93RGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI4QzIwRTgyMDMxQjAwQjI1OTY1
IC8qIFNoYWRvd0RhdGEuaCAqLywKKwkJCQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogU2hh
cGVWYWx1ZS5oICovLAogCQkJCUJDNUVCNkEwMEU4MURDNEYwMEIyNTk2NSAvKiBTdHlsZUJhY2tn
cm91bmREYXRhLmNwcCAqLywKIAkJCQlCQzVFQjZBMTBFODFEQzRGMDBCMjU5NjUgLyogU3R5bGVC
YWNrZ3JvdW5kRGF0YS5oICovLAogCQkJCUJDNUVCNjdDMEU4MUQ0MjAwMEIyNTk2NSAvKiBTdHls
ZUJveERhdGEuY3BwICovLApAQCAtMTk4NzIsNiArMTk4NzIsNyBAQAogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk0MzkwNDZDMjEyREEyNUNFMDBBRjgwQTIgLyogbWF0
aG1sICovLAorCQkJCUZEMDhBODc5MTc1RDM5MjYwMDJDRDM2MCAvKiBzaGFwZXMgKi8sCiAJCQkJ
QkM4QzhGQUEwRERDRDJGMjAwQjU5MkY0IC8qIHN0eWxlICovLAogCQkJCTA4OEMyRjc0MTIzOTAw
ODAwMDNENjVDRSAvKiBzdmcgKi8sCiAJCQkJQThDRkYwNEIwQTE1NEYwOTAwMEE0MjM0IC8qIEF1
dG9UYWJsZUxheW91dC5jcHAgKi8sCkBAIC0xOTg4NSwyMCArMTk4ODYsNiBAQAogCQkJCTkzOTJG
MTRCMEFEMTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAogCQkJCUE4Q0ZGNkNBMEEx
NTYxQ0QwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5jcHAgKi8sCiAJCQkJQThDRkY2QkQwQTE1NjEx
ODAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmggKi8sCi0JCQkJNkU4Nzk4QjQxNUY4MUU0QTAwQkZF
NEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCAqLywKLQkJCQk2RTg3OThCNTE1RjgxRTRBMDBC
RkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLywKLQkJCQk2RUFGMzQwRDE2MTM4NjlBMDA4
NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi8sCi0JCQkJNkVBRjM0MEUxNjEzODY5QTAw
ODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLywKLQkJCQk2RTg3OThCNjE1RjgxRTRBMDBC
RkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCAqLywKLQkJCQk2RTg3OThCNzE1RjgxRTRB
MDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8sCi0JCQkJNkU4Nzk4QjgxNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLywKLQkJCQk2RTg3OThCOTE1RjgxRTRB
MDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAqLywKLQkJCQlGREI4RDFEQjE2QjBDMEY2MDAz
NDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCAqLywKLQkJCQlGREI4RDFEOTE2QjBDMEQ3
MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggKi8sCi0JCQkJRkQ3NDhBQkQxNUJGNzRF
RDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgKi8sCi0JCQkJRkQ3NDhB
QkUxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oICovLAotCQkJ
CTlBOUNFRjhCMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNw
cCAqLywKLQkJCQk5QTlDRUY4QzE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5oICovLAogCQkJCTMxMzEzRjYzMTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMzEzMTNGNjQxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRl
ckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJQThDRkYwNDgwQTE1NEYwOTAwMEE0MjM0IC8qIEZp
eGVkVGFibGVMYXlvdXQuY3BwICovLApAQCAtMjA1NTIsNiArMjA1MzksMjcgQEAKIAkJCXBhdGgg
PSBvcGVuZ2w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlGRDA4QTg3OTE3
NUQzOTI2MDAyQ0QzNjAgLyogc2hhcGVzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlGRDA4QTg3QTE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBl
LmNwcCAqLywKKwkJCQlGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmgg
Ki8sCisJCQkJRkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmNwcCAq
LywKKwkJCQlGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuaCAqLywK
KwkJCQlGRDA4QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovLAorCQkJCUZEMDhB
ODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovLAorCQkJCUZEMDhBODgwMTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZUluZm8uY3BwICovLAorCQkJCUZEMDhBODgxMTc1RDM5MjYwMDJDRDM2
MCAvKiBTaGFwZUluZm8uaCAqLywKKwkJCQlGRDA4QTg4MjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hh
cGVJbnNpZGVJbmZvLmNwcCAqLywKKwkJCQlGRDA4QTg4MzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hh
cGVJbnNpZGVJbmZvLmggKi8sCisJCQkJRkQwOEE4ODQxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBl
SW50ZXJ2YWwuY3BwICovLAorCQkJCUZEMDhBODg1MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUlu
dGVydmFsLmggKi8sCisJCQkJRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lk
ZUluZm8uY3BwICovLAorCQkJCUZEMDhBODg3MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNp
ZGVJbmZvLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHNoYXBlczsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCUZEMzE1RkEyMTJCMDI1QjEwMEMxQTM1OSAvKiB3ZWJhdWRpbyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTcxNiwxNCAr
MjE3MjQsNiBAQAogCQkJCTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5k
bGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2N0NFMEIxNDVBQkMxMzAwNUU2NERCIC8qIEV4
Y2VwdGlvbkhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NjdDRTBDMTQ1QUJDMTMwMDVF
NjREQiAvKiBFeGNlcHRpb25JbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTg3OThC
QjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovLAot
CQkJCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk2RTg3OThCRDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFu
Z2xlLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTg3OThCRjE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uU2hhcGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUZEQjhEMURBMTZCMEMwRDcwMDM0MEYx
MCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCUZENzQ4QUMwMTVC
Rjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICov
LAotCQkJCTlBOUNFRjhFMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogRXhj
bHVzaW9uU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTAyNDU3NTIxNkNFQUEyNzAw
MEU1NjcxIC8qIEVYVERyYXdCdWZmZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEy
ODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3
RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAq
LywKQEAgLTIyOTg3LDYgKzIyOTg3LDcgQEAKIAkJCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5Qzkg
LyogUG9pbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcwNTk5NzgxMDdEOTc1
MjAwQTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzA1OTk3
QTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkQ0NUE5NTcxNzVENDE0QzAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE3NEUyMEExMEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA2NjhFMThCMEFERDk2MjQwMDQxMjhFMCAvKiBQb3B1cE1lbnUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFCQzEyODc3MEIzM0FBNkQwMEM2OTNENSAvKiBQb3B1cE1lbnVDbGll
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjMwMjgsNiArMjMwMjksNyBAQAogCQkJCUE4NEQ4MjdD
MTFEMzMzRUQwMDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZEMzE2MDNDMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFsdGltZUFuYWx5c2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzQzNjhFODBDMjI2RTMyMDA1RUZCNUYgLyogUmVjdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkQ0NUE5NTgxNzVENDE0QzAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJFQTNCQjE1ODVDRjU1MDA0RkFBMjYgLyogUmVmQ291
bnRlZFN1cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk4MzFBRTRBMTU0MjI1QzkwMEZF
MjY0NCAvKiBSZWZlcnJlclBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBQjQxODIxM0Uz
NTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzI5OCw2ICsyMzMw
MCwxMiBAQAogCQkJCUJDNUVCOEM0MEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNkQxNjk2NDEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRTgwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1Zh
bHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzggLyogU2hh
cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFw
ZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTUxMTc1RDNGM0UwMEMyMUVDOCAvKiBT
aGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTVCMTc1RDQxRUUwMEMy
MUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1MjE3NUQz
RjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQx
QUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QjFGMDJGMTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJl
ZFRpbWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MzQyLDYgKzI0MzUwLDEzIEBACiAJCQlpc2Eg
PSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CiAJCQlmaWxlcyA9ICgKKwkJCQlGRDQ1QTk1QzE3NUQ0MjBEMDBDMjFFQzggLyogU2hhcGVJbnRl
cnZhbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1OTE3NUQ0MTcxMDBDMjFFQzggLyog
UG9seWdvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTVBMTc1RDQxNzEwMEMy
MUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1MzE3
NUQzRkI4MDBDMjFFQzggLyogU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTQx
NzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1
QTk1NTE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdv
cmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI5QzE2RTEzMDBDMkUyMDAyRDc5NEUgLyog
QWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc2Q0REMkYyMTEw
M0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yNDkxNywxMyArMjQ5MzIsNiBAQAogCQkJCTk3M0RDNjNGMTQ1QTk0MDkwMDI4NDJDMiAv
KiBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQUNE
QjExM0NFODc1QzAwQkJCRTNGIC8qIEV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDhBRkRBNjBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxl
cnMubW0gaW4gU291cmNlcyAqLywKLQkJCQk2RTg3OThCQTE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkVBRjM0MEYxNjEzODY5QTAw
ODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4Nzk4
QkMxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk2RTg3OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJRkRCOEQxRTUxNkIwQ0M5NzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNo
YXBlSW5mby5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGRDc0OEFCRjE1QkY3NEVEMDA1OUNGMEQg
LyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlBOUNF
RjhEMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEwMjQ1NzUxMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0
ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0REFCNUIxMTVBNjIzNTgw
MDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CmluZGV4IDNhOTRlZjg4YjMxNzJiZWMxYTE2MjAyNDVmZTY3NWU0MzcyMTM3MTYuLjRmYjQ5ZmUw
ODc2Mzk3MzViMjAyZGRhMjZiNmRhNjY1OWY4NTI3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC02Niw3ICs2Niw3IEBA
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUgIlNoYXBl
VmFsdWUuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQpAQCAtMjY5OSwyNCAr
MjY5OSwyNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpw
cm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydAogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0U2hhcGVJbnNpZGU6CiAgICAgICAgICAgICBpZiAoIXN0eWxlLT5zaGFwZUluc2lk
ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNp
ZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6Ok91dHNpZGUpCisgICAgICAgICAg
ICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpPdXRzaWRl
KQogICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVPdXRzaWRlU2hhcGUpOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFw
ZUluc2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6SW1hZ2UpIHsKKyAgICAg
ICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6Oklt
YWdlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgpLT5pbWFnZSgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUtPnNoYXBlSW5zaWRlKCktPmltYWdl
KCktPmNzc1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hh
cGVWYWx1ZTo6U2hhcGUpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZUluc2lkZSgp
LT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6U2hhcGUpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVl
Rm9yQmFzaWNTaGFwZShzdHlsZS0+c2hhcGVJbnNpZGUoKS0+c2hhcGUoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGU6CiAgICAgICAgICAgICBpZiAoIXN0eWxl
LT5zaGFwZU91dHNpZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICBpZiAoc3R5
bGUtPnNoYXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6SW1hZ2Up
IHsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBTaGFw
ZVZhbHVlOjpJbWFnZSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVPdXRzaWRl
KCktPmltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+c2hhcGVPdXRz
aWRlKCktPmltYWdlKCktPmNzc1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlwZSgpID09
IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKTsKKyAgICAgICAgICAgIEFTU0VSVChzdHlsZS0+
c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSk7CiAgICAgICAgICAg
ICByZXR1cm4gdmFsdWVGb3JCYXNpY1NoYXBlKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+c2hhcGUo
KSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5oCmluZGV4IDY3MmNhNGUxOTU1MjE5NTNkOTBmYjU4NzQ2YmQ5YThhYWJl
YmNkM2UuLjM3MmMxYjNmNDY4MDgxZjU2YzdkNGVhODE0Mzc0MzczNzJiODY1NTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCkBAIC0xMjEsNyArMTIxLDcgQEAgcHVibGlj
OgogICAgICAgICAvLyBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgY291bnRlciBuYW1lcyAo
YXMgb3Bwb3NlZCB0byBjb3VudGVyIHZhbHVlcykKICAgICAgICAgQ1NTX0NPVU5URVJfTkFNRSA9
IDExMCwKIAotICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIENTUyBFeGNsdXNpb25zIGRy
YWZ0CisgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgQ1NTIFNoYXBlcyBkcmFmdAogICAg
ICAgICBDU1NfU0hBUEUgPSAxMTEsCiAKICAgICAgICAgLy8gVXNlZCBieSBib3JkZXIgaW1hZ2Vz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCmluZGV4
IDAwZjBiZTNhNTdiMzkyNjhjMDk4Y2E1ZTNhZjM3YWJiYjc3ZGZkZTAuLmMwYzM3YjFiMmFmMDA4
MDM1NWQ0MjgwNGZjNDBhN2U0ZDNmNTBkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNs
dXNpb25TaGFwZVZhbHVlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2VuZGlmCiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xOTMzLDEwICsxOTMzLDEwIEBAIHB1YmxpYzoKIH07CiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXRlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVlKiAo
UmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiksIEV4Y2x1
c2lvblNoYXBlVmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBwbHlQcm9wZXJ0
eUV4Y2x1c2lvblNoYXBlIHsKK3RlbXBsYXRlIDxTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlv
bikoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiksIFNoYXBlVmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9u
KSgpPgorY2xhc3MgQXBwbHlQcm9wZXJ0eVNoYXBlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVW
YWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQorICAgIHN0
YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxTaGFwZVZh
bHVlPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewpAQCAtMTk0NSwyMCArMTk0NSwyMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CiAg
ICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAyNTcxOiBMYXlvdXQgZm9yIHRoZSB2YWx1ZSAnb3V0
c2lkZS1zaGFwZScgaXMgbm90IHlldCBpbXBsZW1lbnRlZAogICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPdXRzaWRlU2hhcGUpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgRXhjbHVzaW9uU2hh
cGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIFNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgp
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNp
b25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHByaW1p
dGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8U2hh
cGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVG
b3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKICAgICAgICAgICAg
ICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkg
ewotICAgICAgICAgICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVz
aW9uU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdl
KHByb3BlcnR5LCB2YWx1ZSkpOworICAgICAgICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBl
ID0gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdl
KHByb3BlcnR5LCB2YWx1ZSkpOwogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgfQogCiAgICAgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewotICAgICAgICBQcm9wZXJ0
eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFeGNsdXNpb25TaGFw
ZVZhbHVlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4s
IHNldHRlckZ1bmN0aW9uLCBFeGNsdXNpb25TaGFwZVZhbHVlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6
Y3JlYXRlSGFuZGxlcigpOworICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxTaGFwZVZhbHVlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQ
dHI8U2hhcGVWYWx1ZT4sIHNldHRlckZ1bmN0aW9uLCBTaGFwZVZhbHVlKiwgaW5pdGlhbEZ1bmN0
aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwogICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhh
bmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBs
eVZhbHVlKTsKICAgICB9CiB9OwpAQCAtMjM0Myw4ICsyMzQzLDggQEAgRGVwcmVjYXRlZFN0eWxl
QnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAjaWYgRU5BQkxFKENTU19TSEFQRVMp
CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW4sIEFw
cGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxl
OjpzZXRTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVNYXJnaW4+OjpjcmVh
dGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNo
YXBlUGFkZGluZywgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnNoYXBlUGFkZGlu
ZywgJlJlbmRlclN0eWxlOjpzZXRTaGFwZVBhZGRpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNo
YXBlUGFkZGluZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZTwm
UmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlLCBBcHBseVBy
b3BlcnR5RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJT
dHlsZTo6c2V0U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU91dHNpZGU+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdFNoYXBlSW5zaWRlLCBBcHBseVByb3BlcnR5U2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZUlu
c2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
U2hhcGVJbnNpZGU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZSwgQXBwbHlQcm9wZXJ0eVNoYXBlPCZSZW5kZXJT
dHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlT3V0c2lkZSwgJlJlbmRl
clN0eWxlOjppbml0aWFsU2hhcGVPdXRzaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICNlbmRpZgog
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PEVXaGl0ZVNwYWNlLCAmUmVuZGVyU3R5bGU6OndoaXRlU3BhY2UsIEVXaGl0ZVNw
YWNlLCAmUmVuZGVyU3R5bGU6OnNldFdoaXRlU3BhY2UsIEVXaGl0ZVNwYWNlLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxXaGl0ZVNwYWNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXaWRvd3MsIEFwcGx5UHJvcGVydHlBdXRvPHNob3J0LCAmUmVu
ZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MsICZSZW5kZXJTdHlsZTo6
aGFzQXV0b1dpZG93cywgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvV2lkb3dzPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCA1MjQ0MDAzY2QxYzA5Nzc5NjllYzBlZTE5ZDVkMTQ1
NjUwYTFlZjA5Li5mY2E2MjZmODBkNjZhMTJiMTI2YTRhODE2NTVmYmZmYzRmMmMyMzdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCkBAIC0xNDQsMTAgKzE0NCwxMCBAQCBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgQ2xpcAog
fQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1zdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RXhj
bHVzaW9uU2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBFeGNsdXNp
b25TaGFwZVZhbHVlKiBmcm9tLCBFeGNsdXNpb25TaGFwZVZhbHVlKiB0bywgZG91YmxlIHByb2dy
ZXNzKQorc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25z
dCBBbmltYXRpb25CYXNlKiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJs
ZSBwcm9ncmVzcykKIHsKICAgICAvLyBGSVhNRSBCdWcgMTAyNzIzOiBTaGFwZS1pbnNpZGUgc2hv
dWxkIGJlIGFibGUgdG8gYW5pbWF0ZSBhIHZhbHVlIG9mICdvdXRzaWRlLXNoYXBlJyB3aGVuIHNo
YXBlLW91dHNpZGUgaXMgc2V0IHRvIGEgQmFzaWNTaGFwZQotICAgIGlmIChmcm9tLT50eXBlKCkg
IT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBFeGNsdXNpb25T
aGFwZVZhbHVlOjpTaGFwZSkKKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlNo
YXBlIHx8IHRvLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUpCiAgICAgICAgIHJldHVybiB0
bzsKIAogICAgIGNvbnN0IEJhc2ljU2hhcGUqIGZyb21TaGFwZSA9IGZyb20tPnNoYXBlKCk7CkBA
IC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBl
VmFsdWU+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgRXgKICAgICBpZiAoIWZyb21T
aGFwZS0+Y2FuQmxlbmQodG9TaGFwZSkpCiAgICAgICAgIHJldHVybiB0bzsKIAotICAgIHJldHVy
biBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKHRvU2hhcGUtPmJsZW5kKGZy
b21TaGFwZSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVW
YWx1ZSh0b1NoYXBlLT5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7CiB9CiAjZW5kaWYKIApA
QCAtNDA1LDEwICs0MDUsMTAgQEAgcHVibGljOgogfTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRXhjbHVzaW9uU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcjxFeGNsdXNpb25TaGFwZVZhbHVlPiB7CitjbGFzcyBQcm9wZXJ0eVdy
YXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+
IHsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJFeGNsdXNpb25TaGFwZShDU1NQcm9wZXJ0
eUlEIHByb3AsIEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hh
cGVWYWx1ZT4pKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8RXhjbHVzaW9u
U2hhcGVWYWx1ZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgUHJvcGVydHlXcmFwcGVyU2hh
cGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShQYXNzUmVmUHRyPFNoYXBlVmFs
dWU+KSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHBy
b3AsIGdldHRlciwgc2V0dGVyKQogICAgIHsKICAgICB9CiB9OwpAQCAtMTE2NSw3ICsxMTY1LDcg
QEAgdm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6ZW5zdXJlUHJvcGVydHlNYXAoKQogICAgIGdQ
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENTU1By
b3BlcnR5V2Via2l0Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q2xpcFBhdGgpKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIGdQcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckV4Y2x1c2lvblNoYXBlKENTU1By
b3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5k
ZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUpKTsKKyAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCAm
UmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlKSk7
CiAjZW5kaWYKIAogICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9y
LCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29s
dW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9y
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2
YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUwZWY3YTk4YmFhNjgxMDlhODg5MTk1OGFi
OWM5MDE1NjNjODdjYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRv
YmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAg
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRXhjbHVzaW9uSW50ZXJ2YWwuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9y
IHsKLSAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpMSwgY29u
c3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGkyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGkx
LngxIDwgaTIueDE7Ci0gICAgfQotfTsKLQotYm9vbCBFeGNsdXNpb25JbnRlcnZhbDo6aW50ZXJz
ZWN0KGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpLCBFeGNsdXNpb25JbnRlcnZhbCYgcnYpIGNv
bnN0Ci17Ci0gICAgaWYgKHgyIDwgaS54MSB8fCB4MSA+IGkueDIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBydi54MSA9IHN0ZDo6bWF4KHgxLCBpLngxKTsKLSAgICBydi54MiA9IHN0ZDo6
bWluKHgyLCBpLngyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBzb3J0RXhjbHVzaW9u
SW50ZXJ2YWxzKFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYpCi17Ci0gICAgc3RkOjpzb3J0
KHYuYmVnaW4oKSwgdi5lbmQoKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7Ci19Ci0KLXZvaWQg
bWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYg
djEsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8RXhjbHVzaW9u
SW50ZXJ2YWw+JiBydikKLXsKLSAgICBpZiAoIXYxLnNpemUoKSkKLSAgICAgICAgcnYuYXBwZW5k
UmFuZ2UodjIuYmVnaW4oKSwgdjIuZW5kKCkpOwotICAgIGVsc2UgaWYgKCF2Mi5zaXplKCkpCi0g
ICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB2KHYxLnNpemUoKSArIHYyLnNpemUo
KSk7Ci0gICAgICAgIEV4Y2x1c2lvbkludGVydmFsKiBpbnRlcnZhbCA9IDA7Ci0KLSAgICAgICAg
c3RkOjptZXJnZSh2MS5iZWdpbigpLCB2MS5lbmQoKSwgdjIuYmVnaW4oKSwgdjIuZW5kKCksIHYu
YmVnaW4oKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWludGVydmFsKQot
ICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07Ci0gICAgICAgICAgICBlbHNlIGlmICh2
W2ldLngxID49IGludGVydmFsLT54MSAmJiB2W2ldLngxIDw9IGludGVydmFsLT54MikgLy8gRklY
TUU6IDFzdCA8PSB0ZXN0IG5vdCBuZWVkZWQ/Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwtPngy
ID0gc3RkOjptYXgoaW50ZXJ2YWwtPngyLCB2W2ldLngyKTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOwotICAgICAgICAgICAgICAgIGlu
dGVydmFsID0gJnZbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aW50ZXJ2YWwpCi0gICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MiwgVmVjdG9y
PEV4Y2x1c2lvbkludGVydmFsPiYgcnYpCi17Ci0gICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUo
KTsKLSAgICBzaXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOwotCi0gICAgaWYgKCF2MVNpemUgfHwg
IXYyU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjbHVzaW9uSW50ZXJ2YWwgaW50ZXJ2
YWw7Ci0gICAgYm9vbCBvdmVybGFwID0gZmFsc2U7Ci0gICAgc2l6ZV90IGkxID0gMDsKLSAgICBz
aXplX3QgaTIgPSAwOwotCi0gICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGkyIDwgdjJTaXplKSB7
Ci0gICAgICAgIEV4Y2x1c2lvbkludGVydmFsIHYxMjsKLSAgICAgICAgaWYgKHYxW2kxXS5pbnRl
cnNlY3QodjJbaTJdLCB2MTIpKSB7Ci0gICAgICAgICAgICBpZiAoIW92ZXJsYXAgfHwgIXYxMi5p
bnRlcnNlY3QoaW50ZXJ2YWwsIGludGVydmFsKSkgewotICAgICAgICAgICAgICAgIGlmIChvdmVy
bGFwKQotICAgICAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOwotICAgICAgICAg
ICAgICAgIGludGVydmFsID0gdjEyOwotICAgICAgICAgICAgICAgIG92ZXJsYXAgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHYxW2kxXS54MiA8IHYyW2kyXS54MikKLSAg
ICAgICAgICAgICAgICBpMSsrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGky
Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAob3ZlcmxhcCkKLSAgICAgICAg
ICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOwotICAgICAgICAgICAgb3ZlcmxhcCA9IGZhbHNl
OwotICAgICAgICAgICAgaWYgKHYxW2kxXS54MSA8IHYyW2kyXS54MSkKLSAgICAgICAgICAgICAg
ICBpMSsrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGkyKys7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAob3ZlcmxhcCkKLSAgICAgICAgcnYuYXBwZW5kKGludGVydmFs
KTsKLX0KLQotdm9pZCBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjIs
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJ2KQotewotICAgIHNpemVfdCB2MVNpemUgPSB2
MS5zaXplKCk7Ci0gICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKLQotICAgIGlmICghdjFT
aXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXYyU2l6ZSkKLSAgICAgICAgcnYuYXBw
ZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwotICAgIGVsc2UgewotICAgICAgICBzaXpl
X3QgaTEgPSAwLCBpMiA9IDA7Ci0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYx
LmVuZCgpKTsKLQotICAgICAgICB3aGlsZSAoaTEgPCBydi5zaXplKCkgJiYgaTIgPCB2MlNpemUp
IHsKLSAgICAgICAgICAgIEV4Y2x1c2lvbkludGVydmFsJiBpbnRlcnZhbDEgPSBydltpMV07Ci0g
ICAgICAgICAgICBjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYgaW50ZXJ2YWwyID0gdjJbaTJdOwot
Ci0gICAgICAgICAgICBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSAmJiBpbnRlcnZh
bDIueDIgPj0gaW50ZXJ2YWwxLngyKQotICAgICAgICAgICAgICAgIHJ2LnJlbW92ZShpMSk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDEpCi0gICAgICAg
ICAgICAgICAgaTIgKz0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGlu
dGVydmFsMS54MikKLSAgICAgICAgICAgICAgICBpMSArPSAxOwotICAgICAgICAgICAgZWxzZSBp
ZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA8IGludGVydmFs
MS54MikgewotICAgICAgICAgICAgICAgIHJ2Lmluc2VydChpMSwgRXhjbHVzaW9uSW50ZXJ2YWwo
aW50ZXJ2YWwxLngxLCBpbnRlcnZhbDIueDEpKTsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbDEu
eDEgPSBpbnRlcnZhbDIueDI7Ci0gICAgICAgICAgICAgICAgaTIgKz0gMTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSkgewotICAgICAgICAgICAg
ICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54MjsKLSAgICAgICAgICAgICAgICBpMiArPSAx
OwotICAgICAgICAgICAgfSBlbHNlICB7IC8vIChpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwxLngy
KQotICAgICAgICAgICAgICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54MTsKLSAgICAgICAg
ICAgICAgICBpMSArPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25JbnRlcnZhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDMxZmViMTgxMTNk
ZThjMWU0MzQxZTAxMDM3MDhiNzc0Y2EzNTFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRl
cnZhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot
ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhj
bHVzaW9uSW50ZXJ2YWxfaAotI2RlZmluZSBFeGNsdXNpb25JbnRlcnZhbF9oCi0KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEV4Y2x1c2lv
bkludGVydmFsIHsKLXB1YmxpYzoKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9hdCB4MjsKLQotICAg
IEV4Y2x1c2lvbkludGVydmFsKGZsb2F0IHgxID0gMCwgZmxvYXQgeDIgPSAwKQotICAgICAgICA6
IHgxKHgxKQotICAgICAgICAsIHgyKHgyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGludGVy
c2VjdChjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYsIEV4Y2x1c2lvbkludGVydmFsJikgY29uc3Q7
Ci19OwotCi12b2lkIHNvcnRFeGNsdXNpb25JbnRlcnZhbHMoVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiYpOwotdm9pZCBtZXJnZUV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVz
aW9uSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4mKTsKLXZvaWQgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNv
bnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpOwotdm9pZCBzdWJ0cmFjdEV4Y2x1
c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgY29uc3QgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uSW50ZXJ2YWxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWY5NzhmMzBiNThlMjE0Yjg0YTlkM2QxZjhkNDA4N2Fl
MGIyYTI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDUxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkV4Y2x1c2lvblBvbHlnb24uaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7Ci0gICAgTm9y
bWFsLAotICAgIFZlcnRleE1pblksCi0gICAgVmVydGV4TWF4WSwKLSAgICBWZXJ0ZXhZQm90aAot
fTsKLQotc3RydWN0IEVkZ2VJbnRlcnNlY3Rpb24gewotICAgIGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UqIGVkZ2U7Ci0gICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICBFZGdlSW50ZXJzZWN0aW9uVHlw
ZSB0eXBlOwotfTsKLQotc3RhdGljIGlubGluZSBmbG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKLXsKLSAgICByZXR1cm4gKChwb2ludC54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAodmVy
dGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKSkpIC0gKCh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEueCgpKSAq
IChwb2ludC55KCkgLSB2ZXJ0ZXgxLnkoKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNS
ZWZsZXhWZXJ0ZXgoY29uc3QgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiBuZXh0VmVydGV4KQotewotICAgIHJldHVybiBs
ZWZ0U2lkZShwcmV2VmVydGV4LCBuZXh0VmVydGV4LCB2ZXJ0ZXgpIDwgMDsKLX0KLQotc3RhdGlj
IGJvb2wgY29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZVBv
aW50ZXIsIGZsb2F0IHksIEVkZ2VJbnRlcnNlY3Rpb24mIHJlc3VsdCkKLXsKLSAgICBjb25zdCBG
bG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOwotCi0gICAgaWYgKGVkZ2UubWlu
WSgpID4geSB8fCBlZGdlLm1heFkoKSA8IHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKLSAgICBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7Ci0gICAgZmxvYXQgZHkgPSB2ZXJ0
ZXgyLnkoKSAtIHZlcnRleDEueSgpOwotCi0gICAgZmxvYXQgaW50ZXJzZWN0aW9uWDsKLSAgICBF
ZGdlSW50ZXJzZWN0aW9uVHlwZSBpbnRlcnNlY3Rpb25UeXBlOwotCi0gICAgaWYgKCFkeSkgewot
ICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4WUJvdGg7Ci0gICAgICAgIGludGVyc2Vj
dGlvblggPSBlZGdlLm1pblgoKTsKLSAgICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5taW5ZKCkpIHsK
LSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1pblk7Ci0gICAgICAgIGludGVyc2Vj
dGlvblggPSAodmVydGV4MS55KCkgPCB2ZXJ0ZXgyLnkoKSkgPyB2ZXJ0ZXgxLngoKSA6IHZlcnRl
eDIueCgpOwotICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1heFkoKSkgewotICAgICAgICBpbnRl
cnNlY3Rpb25UeXBlID0gVmVydGV4TWF4WTsKLSAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2ZXJ0
ZXgxLnkoKSA+IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4Mi54KCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IE5vcm1hbDsKLSAgICAgICAgaW50
ZXJzZWN0aW9uWCA9ICgoeSAtIHZlcnRleDEueSgpKSAqICh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEu
eCgpKSAvIGR5KSArIHZlcnRleDEueCgpOwotICAgIH0KLQotICAgIHJlc3VsdC5lZGdlID0gZWRn
ZVBvaW50ZXI7Ci0gICAgcmVzdWx0LnR5cGUgPSBpbnRlcnNlY3Rpb25UeXBlOwotICAgIHJlc3Vs
dC5wb2ludC5zZXQoaW50ZXJzZWN0aW9uWCwgeSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIGlubGluZSBGbG9hdFNpemUgaW53YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHln
b25FZGdlJiBlZGdlKQotewotICAgIEZsb2F0U2l6ZSBlZGdlRGVsdGEgPSBlZGdlLnZlcnRleDIo
KSAtIGVkZ2UudmVydGV4MSgpOwotICAgIGlmICghZWRnZURlbHRhLndpZHRoKCkpCi0gICAgICAg
IHJldHVybiBGbG9hdFNpemUoKGVkZ2VEZWx0YS5oZWlnaHQoKSA+IDAgPyAtMSA6IDEpLCAwKTsK
LSAgICBpZiAoIWVkZ2VEZWx0YS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgw
LCAoZWRnZURlbHRhLndpZHRoKCkgPiAwID8gMSA6IC0xKSk7Ci0gICAgZmxvYXQgZWRnZUxlbmd0
aCA9IGVkZ2VEZWx0YS5kaWFnb25hbExlbmd0aCgpOwotICAgIHJldHVybiBGbG9hdFNpemUoLWVk
Z2VEZWx0YS5oZWlnaHQoKSAvIGVkZ2VMZW5ndGgsIGVkZ2VEZWx0YS53aWR0aCgpIC8gZWRnZUxl
bmd0aCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIG91dHdhcmRFZGdlTm9ybWFsKGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UpCi17Ci0gICAgcmV0dXJuIC1pbndhcmRFZGdlTm9y
bWFsKGVkZ2UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kQXJjKFZlY3RvcjxGbG9h
dFBvaW50PiYgdmVydGljZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGFyY0NlbnRlciwgZmxvYXQgYXJj
UmFkaXVzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydEFyY1ZlcnRleCwgY29uc3QgRmxvYXRQb2lu
dCYgZW5kQXJjVmVydGV4LCBib29sIHBhZGRpbmcpCi17Ci0gICAgZmxvYXQgc3RhcnRBbmdsZSA9
IGF0YW4yKHN0YXJ0QXJjVmVydGV4LnkoKSAtIGFyY0NlbnRlci55KCksIHN0YXJ0QXJjVmVydGV4
LngoKSAtIGFyY0NlbnRlci54KCkpOwotICAgIGZsb2F0IGVuZEFuZ2xlID0gYXRhbjIoZW5kQXJj
VmVydGV4LnkoKSAtIGFyY0NlbnRlci55KCksIGVuZEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIu
eCgpKTsKLSAgICBjb25zdCBmbG9hdCB0d29QSSA9IHBpRmxvYXQgKiAyOwotICAgIGlmIChzdGFy
dEFuZ2xlIDwgMCkKLSAgICAgICAgc3RhcnRBbmdsZSArPSB0d29QSTsKLSAgICBpZiAoZW5kQW5n
bGUgPCAwKQotICAgICAgICBlbmRBbmdsZSArPSB0d29QSTsKLSAgICBmbG9hdCBhbmdsZSA9IChz
dGFydEFuZ2xlID4gZW5kQW5nbGUpID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgOiAoc3RhcnRB
bmdsZSArIHR3b1BJIC0gZW5kQW5nbGUpOwotICAgIGNvbnN0IGZsb2F0IGFyY1NlZ21lbnRDb3Vu
dCA9IDY7IC8vIEFuIGV2ZW4gbnVtYmVyIHNvIHRoYXQgb25lIGFyYyB2ZXJ0ZXggd2lsbCBiZSBl
YWN0bHkgYXJjUmFkaXVzIGZyb20gYXJjQ2VudGVyLgotICAgIGZsb2F0IGFyY1NlZ21lbnRBbmds
ZSA9ICAoKHBhZGRpbmcpID8gLWFuZ2xlIDogdHdvUEkgLSBhbmdsZSkgLyBhcmNTZWdtZW50Q291
bnQ7Ci0KLSAgICB2ZXJ0aWNlcy5hcHBlbmQoc3RhcnRBcmNWZXJ0ZXgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBhcmNTZWdtZW50Q291bnQ7ICsraSkgewotICAgICAgICBmbG9hdCBh
bmdsZSA9IHN0YXJ0QW5nbGUgKyBhcmNTZWdtZW50QW5nbGUgKiBpOwotICAgICAgICB2ZXJ0aWNl
cy5hcHBlbmQoYXJjQ2VudGVyICsgRmxvYXRQb2ludChjb3MoYW5nbGUpICogYXJjUmFkaXVzLCBz
aW4oYW5nbGUpICogYXJjUmFkaXVzKSk7Ci0gICAgfQotICAgIHZlcnRpY2VzLmFwcGVuZChlbmRB
cmNWZXJ0ZXgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc25hcFZlcnRpY2VzVG9MYXlvdXRV
bml0R3JpZChWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzKQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdmVydGljZXNbaV0u
c2V0KExheW91dFVuaXQodmVydGljZXNbaV0ueCgpKS50b0Zsb2F0KCksIExheW91dFVuaXQodmVy
dGljZXNbaV0ueSgpKS50b0Zsb2F0KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFBhc3NPd25QdHI8
RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hhcGVQYWRkaW5nQm91bmRzKGNvbnN0IEZsb2F0UG9seWdv
biYgcG9seWdvbiwgZmxvYXQgcGFkZGluZywgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgT3du
UHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHBhZGRlZFZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxGbG9hdFBvaW50PigpKTsKLSAgICBGbG9hdFBvaW50IGludGVyc2VjdGlvbjsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51bWJlck9mRWRnZXMoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gcG9seWdvbi5lZGdl
QXQoaSk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZFZGdlID0gdGhpc0Vk
Z2UucHJldmlvdXNFZGdlKCk7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHRoaXNPZmZzZXRF
ZGdlKHRoaXNFZGdlLCBpbndhcmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIHBhZGRpbmcpOwotICAg
ICAgICBPZmZzZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShwcmV2RWRnZSwgaW53YXJkRWRn
ZU5vcm1hbChwcmV2RWRnZSkgKiBwYWRkaW5nKTsKLQotICAgICAgICBpZiAocHJldk9mZnNldEVk
Z2UuaW50ZXJzZWN0aW9uKHRoaXNPZmZzZXRFZGdlLCBpbnRlcnNlY3Rpb24pKQotICAgICAgICAg
ICAgcGFkZGVkVmVydGljZXMtPmFwcGVuZChpbnRlcnNlY3Rpb24pOwotICAgICAgICBlbHNlIGlm
IChpc1JlZmxleFZlcnRleChwcmV2RWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDEoKSwg
dGhpc0VkZ2UudmVydGV4MigpKSkKLSAgICAgICAgICAgIGFwcGVuZEFyYygqcGFkZGVkVmVydGlj
ZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgcGFkZGluZywgcHJldk9mZnNldEVkZ2UudmVydGV4Migp
LCB0aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgxKCksIHRydWUpOwotICAgIH0KLQotICAgIHNuYXBWZXJ0
aWNlc1RvTGF5b3V0VW5pdEdyaWQoKnBhZGRlZFZlcnRpY2VzKTsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEZsb2F0UG9seWdvbihwYWRkZWRWZXJ0aWNlcy5yZWxlYXNlKCksIGZpbGxSdWxlKSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUGFzc093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1dGVTaGFw
ZU1hcmdpbkJvdW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1hcmdpbiwg
V2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IG1h
cmdpblZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50PigpKTsKLSAgICBG
bG9hdFBvaW50IGludGVyc2VjdGlvbjsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
b2x5Z29uLm51bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UmIHRoaXNFZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7Ci0gICAgICAgIGNvbnN0IEZsb2F0
UG9seWdvbkVkZ2UmIHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlvdXNFZGdlKCk7Ci0gICAgICAg
IE9mZnNldFBvbHlnb25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNFZGdlLCBvdXR3YXJkRWRnZU5v
cm1hbCh0aGlzRWRnZSkgKiBtYXJnaW4pOwotICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSBwcmV2
T2Zmc2V0RWRnZShwcmV2RWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogbWFyZ2lu
KTsKLQotICAgICAgICBpZiAocHJldk9mZnNldEVkZ2UuaW50ZXJzZWN0aW9uKHRoaXNPZmZzZXRF
ZGdlLCBpbnRlcnNlY3Rpb24pKQotICAgICAgICAgICAgbWFyZ2luVmVydGljZXMtPmFwcGVuZChp
bnRlcnNlY3Rpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRBcmMoKm1hcmdp
blZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIG1hcmdpbiwgcHJldk9mZnNldEVkZ2UudmVy
dGV4MigpLCB0aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgxKCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBz
bmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCptYXJnaW5WZXJ0aWNlcyk7Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24obWFyZ2luVmVydGljZXMucmVsZWFzZSgpLCBmaWxs
UnVsZSkpOwotfQotCi1jb25zdCBGbG9hdFBvbHlnb24mIEV4Y2x1c2lvblBvbHlnb246OnNoYXBl
UGFkZGluZ0JvdW5kcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNoYXBlUGFkZGluZygpID49IDAp
OwotICAgIGlmICghc2hhcGVQYWRkaW5nKCkpCi0gICAgICAgIHJldHVybiBtX3BvbHlnb247Ci0K
LSAgICBpZiAoIW1fcGFkZGluZ0JvdW5kcykKLSAgICAgICAgbV9wYWRkaW5nQm91bmRzID0gY29t
cHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyhtX3BvbHlnb24sIHNoYXBlUGFkZGluZygpLCBtX3BvbHln
b24uZmlsbFJ1bGUoKSk7Ci0KLSAgICByZXR1cm4gKm1fcGFkZGluZ0JvdW5kczsKLX0KLQotY29u
c3QgRmxvYXRQb2x5Z29uJiBFeGNsdXNpb25Qb2x5Z29uOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHNoYXBlTWFyZ2luKCkgPj0gMCk7Ci0gICAgaWYgKCFzaGFwZU1h
cmdpbigpKQotICAgICAgICByZXR1cm4gbV9wb2x5Z29uOwotCi0gICAgaWYgKCFtX21hcmdpbkJv
dW5kcykKLSAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMo
bV9wb2x5Z29uLCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7Ci0KLSAgICBy
ZXR1cm4gKm1fbWFyZ2luQm91bmRzOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZ2V0VmVydGV4
SW50ZXJzZWN0aW9uVmVydGljZXMoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9u
LCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBGbG9hdFBvaW50JiB0aGlzVmVydGV4LCBGbG9hdFBv
aW50JiBuZXh0VmVydGV4KQotewotICAgIGlmIChpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhN
aW5ZICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1heFkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFTU0VSVChpbnRlcnNlY3Rpb24uZWRnZSAmJiBpbnRlcnNlY3Rpb24uZWRn
ZS0+cG9seWdvbigpKTsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSAqKGludGVy
c2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOwotICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRo
aXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7Ci0KLSAgICBpZiAoKGludGVyc2VjdGlvbi50
eXBlID09IFZlcnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPCB0aGlzRWRnZS52
ZXJ0ZXgyKCkueSgpKSkKLSAgICAgICAgfHwgKGludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1h
eFkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpKSkp
IHsKLSAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UucHJldmlv
dXNFZGdlKCkudmVydGV4SW5kZXgxKCkpOwotICAgICAgICB0aGlzVmVydGV4ID0gcG9seWdvbi52
ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7Ci0gICAgICAgIG5leHRWZXJ0ZXggPSBw
b2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRl
eDEoKSk7Ci0gICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZl
cnRleEluZGV4MigpKTsKLSAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhp
c0VkZ2UubmV4dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhcHBlbmRJbnRlcnZhbFgoZmxvYXQgeCwgYm9v
bCBpbnNpZGUsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKLXsKLSAgICBpZiAo
IWluc2lkZSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4KSk7Ci0g
ICAgZWxzZQotICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUoKSAtIDFdLngyID0geDsKLQotICAg
IHJldHVybiAhaW5zaWRlOwotfQotCi1zdGF0aWMgYm9vbCBjb21wYXJlRWRnZUludGVyc2VjdGlv
blgoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMSwgY29uc3QgRWRnZUludGVy
c2VjdGlvbiYgaW50ZXJzZWN0aW9uMikKLXsKLSAgICBmbG9hdCB4MSA9IGludGVyc2VjdGlvbjEu
cG9pbnQueCgpOwotICAgIGZsb2F0IHgyID0gaW50ZXJzZWN0aW9uMi5wb2ludC54KCk7Ci0gICAg
cmV0dXJuICh4MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5cGUgPCBpbnRlcnNlY3Rpb24yLnR5
cGUgOiB4MSA8IHgyOwotfQotCi1zdGF0aWMgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoY29u
c3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQotewotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHln
b25FZGdlKj4gZWRnZXM7Ci0gICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwg
ZWRnZXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4g
aW50ZXJzZWN0aW9uczsKLSAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVy
c2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQotICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5h
cHBlbmQoaW50ZXJzZWN0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXpl
KCkgPCAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5i
ZWdpbigpLCBpbnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2Vj
dGlvblgpOwotCi0gICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGludCB3aW5kQ291bnQgPSAw
OwotICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7Ci0KLSAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNl
Y3Rpb25zLnNpemUoKSkgewotICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50
ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleF07Ci0gICAgICAgIGlmIChpbmRleCArIDEg
PCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgewotICAgICAgICAgICAgY29uc3QgRWRnZUludGVyc2Vj
dGlvbiYgbmV4dEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXggKyAxXTsKLSAgICAg
ICAgICAgIGlmICgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4dEludGVyc2VjdGlv
bi5wb2ludC54KCkpICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSB8fCB0
aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlwZSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlw
ZXMgYXJlIFZlcnRleE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0ZXhNaW5ZLgot
ICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3
aG9zZSB0eXBlcyBhcmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRleE1heFksVmVydGV4
TWluWSB3aXRoIG9uZSBpbnRlcnNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0Vk
Z2UgPSAqdGhpc0ludGVyc2VjdGlvbi5lZGdlOwotICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2lu
ZyA9ICF3aW5kQ291bnQ7Ci0KLSAgICAgICAgaWYgKHBvbHlnb24uZmlsbFJ1bGUoKSA9PSBSVUxF
X0VWRU5PREQpIHsKLSAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0VkZ2UudmVydGV4Migp
LnkoKSA+IHRoaXNFZGdlLnZlcnRleDEoKS55KCkpID8gMSA6IC0xOwotICAgICAgICAgICAgZXZl
bk9kZENyb3NzaW5nID0gZXZlbk9kZENyb3NzaW5nIHx8ICF3aW5kQ291bnQ7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZXZlbk9kZENyb3NzaW5nKSB7Ci0gICAgICAgICAgICBib29sIGVkZ2VD
cm9zc2luZyA9IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWw7Ci0gICAgICAgICAgICBp
ZiAoIWVkZ2VDcm9zc2luZykgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcHJldlZlcnRl
eDsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHRoaXNWZXJ0ZXg7Ci0gICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBuZXh0VmVydGV4OwotCi0gICAgICAgICAgICAgICAgaWYgKGdldFZlcnRl
eEludGVyc2VjdGlvblZlcnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZWZXJ0ZXgsIHRoaXNW
ZXJ0ZXgsIG5leHRWZXJ0ZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4
LnkoKSA9PSB5KQotICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWlu
WSkgPyBwcmV2VmVydGV4LnkoKSA+IHkgOiBwcmV2VmVydGV4LnkoKSA8IHk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHByZXZWZXJ0ZXgueSgpID09IHkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IG5leHRWZXJ0ZXgueSgpID4geSA6IG5l
eHRWZXJ0ZXgueSgpIDwgeTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZWRnZUNyb3NzaW5nKQotICAgICAgICAgICAgICAg
IGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSwgaW5z
aWRlLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgKytpbmRleDsKLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4mIHJlc3VsdCkKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+
IGVkZ2VzOwotICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHkxLCB5MiwgZWRnZXMp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSAqZWRnZSA9IGVkZ2VzW2ldOwotICAgICAgICBmbG9h
dCB4MTsKLSAgICAgICAgZmxvYXQgeDI7Ci0KLSAgICAgICAgaWYgKGVkZ2UtPm1pblkoKSA8IHkx
KSB7Ci0gICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MSwgaW50ZXJzZWN0
aW9uKTsKLSAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpIDwgZWRnZS0+dmVy
dGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsK
LQotICAgICAgICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKLSAgICAgICAgICAgIGNvbXB1dGVY
SW50ZXJzZWN0aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOwotICAgICAgICAgICAgeDIgPSBp
bnRlcnNlY3Rpb24ucG9pbnQueCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHgyID0g
KGVkZ2UtPnZlcnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRl
eDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOwotCi0gICAgICAgIGlmICh4MSA+IHgyKQot
ICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7Ci0KLSAgICAgICAgaWYgKHgyID4geDEpCi0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgxLCB4MikpOwotICAg
IH0KLQotICAgIHNvcnRFeGNsdXNpb25JbnRlcnZhbHMocmVzdWx0KTsKLX0KLQotdm9pZCBFeGNs
dXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsK
LSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZU1hcmdpbkJvdW5kcygpOwot
ICAgIGlmIChwb2x5Z29uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQg
eTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWln
aHQ7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50
ZXJ2YWxzOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFY
SW50ZXJ2YWxzKTsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNl
LCB5MlhJbnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBtZXJnZWRJ
bnRlcnZhbHM7Ci0gICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJ
bnRlcnZhbHMsIG1lcmdlZEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9u
cyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKLSAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFs
cyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZEludGVydmFscy5zaXplKCk7ICsr
aSkgewotICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGV4Y2x1ZGVkSW50ZXJ2
YWxzW2ldOwotICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBp
bnRlcnZhbC54MikpOwotICAgIH0KLX0KLQotdm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNs
dWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFBvbHln
b24mIHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAocG9seWdvbi5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAg
ICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRl
WEludGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29t
cHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKLQot
ICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gY29tbW9uSW50ZXJ2YWxzOwotICAgIGludGVy
c2VjdEV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgY29tbW9u
SW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZWRnZUludGVydmFs
czsKLSAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24sIHkxLCB5
MiwgZWRnZUludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGluY2x1
ZGVkSW50ZXJ2YWxzOwotICAgIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbW1vbkludGVy
dmFscywgZWRnZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGluY2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gaW5jbHVkZWRJbnRlcnZhbHNbaV07Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVydmFsLngyKSk7
Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNv
bnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCB1bnNpZ25l
ZCBvZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKQotewotICAgIFZl
Y3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7Ci0gICAgaWYgKCFwb2x5Z29uLm92
ZXJsYXBwaW5nRWRnZXMocmVjdC55KCksIHJlY3QubWF4WSgpLCBlZGdlcykpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSBlZGdlc1tpXTsK
LSAgICAgICAgaWYgKGVkZ2UtPmVkZ2VJbmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDEgJiYgZWRn
ZS0+ZWRnZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MiAmJiBlZGdlLT5vdmVybGFwc1JlY3Qo
cmVjdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0KGNvbnN0IEZsb2F0
UmVjdCYgcjEsIGNvbnN0IEZsb2F0UmVjdCYgcjIpCi17Ci0gICAgaWYgKHIxLnkoKSA8IHIyLnko
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHIxLnkoKSA9PSByMi55KCkpCi0gICAg
ICAgIHJldHVybiByMS54KCkgPCByMi54KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0
VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJ
bnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBmbG9hdCBtaW5J
bnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsKLSAgICBmbG9hdCBtaW5JbnRlcnZh
bEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7Ci0gICAgZmxvYXQgbWlu
SW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsKLQotICAgIGNv
bnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwotICAgIGNv
bnN0IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHBvbHlnb24uYm91bmRpbmdCb3goKTsKLSAgICBp
ZiAobWluSW50ZXJ2YWxXaWR0aCA+IGJvdW5kaW5nQm94LndpZHRoKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZGluZ0JveC55KCksIG1p
bkludGVydmFsVG9wKTsKLSAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0
OwotCi0gICAgaWYgKG1heFkgPiBib3VuZGluZ0JveC5tYXhZKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7Ci0gICAg
cG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKG1pbkludGVydmFsVG9wLCBib3VuZGluZ0JveC5tYXhZ
KCksIGVkZ2VzKTsKLQotICAgIGZsb2F0IGR4ID0gbWluSW50ZXJ2YWxXaWR0aCAvIDI7Ci0gICAg
ZmxvYXQgZHkgPSBtaW5JbnRlcnZhbEhlaWdodCAvIDI7Ci0gICAgVmVjdG9yPE9mZnNldFBvbHln
b25FZGdlPiBvZmZzZXRFZGdlczsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdl
cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0g
KihlZGdlc1tpXSk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDAgPSBlZGdlLnBy
ZXZpb3VzRWRnZSgpLnZlcnRleDEoKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4
MSA9IGVkZ2UudmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0g
ZWRnZS52ZXJ0ZXgyKCk7Ci0gICAgICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0
RWRnZUJ1ZmZlcjsKLQotICAgICAgICBpZiAodmVydGV4Mi55KCkgPiB2ZXJ0ZXgxLnkoKSA/IHZl
cnRleDIueCgpID49IHZlcnRleDEueCgpIDogdmVydGV4MS54KCkgPj0gdmVydGV4Mi54KCkpIHsK
LSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVk
Z2UsIEZsb2F0U2l6ZShkeCwgLWR5KSkpOwotICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5h
cHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgZHkpKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQ
b2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgsIGR5KSkpOwotICAgICAgICAgICAgb2Zmc2V0
RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwg
LWR5KSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzUmVmbGV4VmVydGV4KHZlcnRleDAs
IHZlcnRleDEsIHZlcnRleDIpKSB7Ci0gICAgICAgICAgICBpZiAodmVydGV4Mi54KCkgPD0gdmVy
dGV4MS54KCkgJiYgdmVydGV4MC54KCkgPD0gdmVydGV4MS54KCkpCi0gICAgICAgICAgICAgICAg
b2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRT
aXplKGR4LCAtZHkpLCBGbG9hdFNpemUoZHgsIGR5KSkpOwotICAgICAgICAgICAgZWxzZSBpZiAo
dmVydGV4Mi54KCkgPj0gdmVydGV4MS54KCkgJiYgdmVydGV4MC54KCkgPj0gdmVydGV4MS54KCkp
Ci0gICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVk
Z2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgLWR5KSwgRmxvYXRTaXplKC1keCwgZHkpKSk7Ci0g
ICAgICAgICAgICBpZiAodmVydGV4Mi55KCkgPD0gdmVydGV4MS55KCkgJiYgdmVydGV4MC55KCkg
PD0gdmVydGV4MS55KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQo
T2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgZHkpLCBGbG9hdFNpemUo
ZHgsIGR5KSkpOwotICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi55KCkgPj0gdmVydGV4MS55
KCkgJiYgdmVydGV4MC55KCkgPj0gdmVydGV4MS55KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0
RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1k
eCwgLWR5KSwgRmxvYXRTaXplKGR4LCAtZHkpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgb2Zmc2V0RWRnZUJ1ZmZlci5zaXplKCk7ICsraikKLSAgICAg
ICAgICAgIGlmIChvZmZzZXRFZGdlQnVmZmVyW2pdLm1heFkoKSA+PSBtaW5ZKQotICAgICAgICAg
ICAgICAgIG9mZnNldEVkZ2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pdKTsKLSAgICB9Ci0K
LSAgICBvZmZzZXRFZGdlcy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UocG9seWdvbiwgbWluSW50
ZXJ2YWxUb3AsIEZsb2F0U2l6ZSgwLCBkeSkpKTsKLQotICAgIEZsb2F0UG9pbnQgb2Zmc2V0RWRn
ZXNJbnRlcnNlY3Rpb247Ci0gICAgRmxvYXRSZWN0IGZpcnN0Rml0UmVjdDsKLSAgICBib29sIGZp
cnN0Rml0Rm91bmQgPSBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvZmZz
ZXRFZGdlcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSAr
IDE7IGogPCBvZmZzZXRFZGdlcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgaWYgKG9mZnNl
dEVkZ2VzW2ldLmludGVyc2VjdGlvbihvZmZzZXRFZGdlc1tqXSwgb2Zmc2V0RWRnZXNJbnRlcnNl
Y3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3RlbnRpYWxGaXJzdEZpdExv
Y2F0aW9uKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uLngoKSAtIGR4LCBvZmZzZXRFZGdlc0ludGVy
c2VjdGlvbi55KCkgLSBkeSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZp
cnN0Rml0UmVjdChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplKTsKLSAgICAgICAgICAgICAgICBpZiAoKG9mZnNldEVkZ2VzW2ldLmJhc2lzKCkgPT0gT2Zm
c2V0UG9seWdvbkVkZ2U6OkxpbmVUb3AKLSAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0RWRn
ZXNbal0uYmFzaXMoKSA9PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGluZVRvcAotICAgICAgICAgICAg
ICAgICAgICB8fCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLnkoKSA+PSBtaW5JbnRlcnZhbFRv
cCkKLSAgICAgICAgICAgICAgICAgICAgJiYgKCFmaXJzdEZpdEZvdW5kIHx8IGFib3ZlT3JUb1Ro
ZUxlZnQocG90ZW50aWFsRmlyc3RGaXRSZWN0LCBmaXJzdEZpdFJlY3QpKQotICAgICAgICAgICAg
ICAgICAgICAmJiBwb2x5Z29uLmNvbnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAmJiBmaXJzdEZpdFJlY3RJblBvbHlnb24ocG9seWdvbiwgcG90ZW50
aWFsRmlyc3RGaXRSZWN0LCBvZmZzZXRFZGdlc1tpXS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNb
al0uZWRnZUluZGV4KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0Rm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBmaXJzdEZpdFJlY3QgPSBwb3RlbnRpYWxGaXJzdEZp
dFJlY3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGZpcnN0Rml0Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91
dFVuaXQoZmlyc3RGaXRSZWN0LnkoKSk7Ci0gICAgcmV0dXJuIGZpcnN0Rml0Rm91bmQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25Qb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uUG9seWdvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODg1NTNhYjIxZDA2
NDQxYmViYTMwMTlhYzBiOWE1Mjg2YTVmZWUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5
Z29uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot
ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhj
bHVzaW9uUG9seWdvbl9oCi0jZGVmaW5lIEV4Y2x1c2lvblBvbHlnb25faAotCi0jaW5jbHVkZSAi
RXhjbHVzaW9uSW50ZXJ2YWwuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotI2luY2x1
ZGUgIkZsb2F0UG9seWdvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE9mZnNl
dFBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBhaXIgewotcHVibGljOgotICAgIGVudW0gQmFz
aXMgewotICAgICAgICBFZGdlLAotICAgICAgICBWZXJ0ZXgsCi0gICAgICAgIExpbmVUb3AKLSAg
ICB9OwotCi0gICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRn
ZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIDogbV92ZXJ0ZXgxKGVkZ2UudmVy
dGV4MSgpICsgb2Zmc2V0KQotICAgICAgICAsIG1fdmVydGV4MihlZGdlLnZlcnRleDIoKSArIG9m
ZnNldCkKLSAgICAgICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRleCgpKQotICAgICAgICAs
IG1fYmFzaXMoRWRnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29u
c3QgRmxvYXRQb2ludCYgcmVmbGV4VmVydGV4LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldDEsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MikKLSAgICAgICAgOiBtX3ZlcnRleDEocmVmbGV4VmVydGV4
ICsgb2Zmc2V0MSkKLSAgICAgICAgLCBtX3ZlcnRleDIocmVmbGV4VmVydGV4ICsgb2Zmc2V0MikK
LSAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKLSAgICAgICAgLCBtX2Jhc2lzKFZlcnRleCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0KQotICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3go
KS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV92ZXJ0
ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLm1heFgoKSwgbWluTG9naWNhbElu
dGVydmFsVG9wKSArIG9mZnNldCkKLSAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKLSAgICAgICAg
LCBtX2Jhc2lzKExpbmVUb3ApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgY29uc3QgRmxv
YXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGV4MTsgfQot
ICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fdmVydGV4MjsgfQotICAgIGludCBlZGdlSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2VkZ2VJbmRleDsgfQotICAgIEJhc2lzIGJhc2lzKCkgY29uc3QgeyByZXR1cm4gbV9iYXNpczsg
fQotCi1wcml2YXRlOgotICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgxOwotICAgIEZsb2F0UG9pbnQg
bV92ZXJ0ZXgyOwotICAgIGludCBtX2VkZ2VJbmRleDsKLSAgICBCYXNpcyBtX2Jhc2lzOwotfTsK
LQotY2xhc3MgRXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7Ci1wdWJsaWM6Ci0gICAgRXhj
bHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBX
aW5kUnVsZSBmaWxsUnVsZSkKLSAgICAgICAgOiBFeGNsdXNpb25TaGFwZSgpCi0gICAgICAgICwg
bV9wb2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkKLSAgICAgICAgLCBtX21hcmdpbkJvdW5kcyhu
dWxscHRyKQotICAgICAgICAsIG1fcGFkZGluZ0JvdW5kcyhudWxscHRyKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3go
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1h
cmdpbkJvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNo
YXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0
YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpLmJvdW5kaW5nQm94KCkp
OyB9Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X3BvbHlnb24uaXNFbXB0eSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2
YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZElu
dGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNs
dWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNv
bnN0IE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVN
YXJnaW5Cb3VuZHMoKSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlUGFkZGlu
Z0JvdW5kcygpIGNvbnN0OwotCi0gICAgRmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKLSAgICBtdXRh
YmxlIE93blB0cjxGbG9hdFBvbHlnb24+IG1fbWFyZ2luQm91bmRzOwotICAgIG11dGFibGUgT3du
UHRyPEZsb2F0UG9seWdvbj4gbV9wYWRkaW5nQm91bmRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uUG9seWdvbl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkNmI1MjAyNmU4YTFlMTZjZjRlM2Y5YjZjOWQyYWIxZDI1ZjBlZmJkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAq
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9u
UmVjdGFuZ2xlLmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgZWxsaXBzZVhJbnRlcmNlcHQoZmxvYXQg
eSwgZmxvYXQgcngsIGZsb2F0IHJ5KQotewotICAgIEFTU0VSVChyeSA+IDApOwotICAgIHJldHVy
biByeCAqIHNxcnQoMSAtICh5ICogeSkgLyAocnkgKiByeSkpOwotfQotCi1zdGF0aWMgaW5saW5l
IGZsb2F0IGVsbGlwc2VZSW50ZXJjZXB0KGZsb2F0IHgsIGZsb2F0IHJ4LCBmbG9hdCByeSkKLXsK
LSAgICBBU1NFUlQocnggPiAwKTsKLSAgICByZXR1cm4gcnkgKiBzcXJ0KDEgLSAoeCAqIHgpIC8g
KHJ4ICogcngpKTsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjpwYWRk
aW5nQm91bmRzKGZsb2F0IHBhZGRpbmcpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHBhZGRpbmcgPj0g
MCk7Ci0gICAgaWYgKCFwYWRkaW5nIHx8IGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICp0aGlz
OwotCi0gICAgZmxvYXQgYm91bmRzWCA9IHgoKSArIHN0ZDo6bWluKHdpZHRoKCkgLyAyLCBwYWRk
aW5nKTsKLSAgICBmbG9hdCBib3VuZHNZID0geSgpICsgc3RkOjptaW4oaGVpZ2h0KCkgLyAyLCBw
YWRkaW5nKTsKLSAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkg
LSBwYWRkaW5nICogMik7Ci0gICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gc3RkOjptYXgoMC4wZiwg
aGVpZ2h0KCkgLSBwYWRkaW5nICogMik7Ci0gICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHN0ZDo6
bWF4KDAuMGYsIHJ4KCkgLSBwYWRkaW5nKTsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gc3Rk
OjptYXgoMC4wZiwgcnkoKSAtIHBhZGRpbmcpOwotICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0
KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwg
RmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKLX0KLQotRmxvYXRSb3Vu
ZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjptYXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25z
dAotewotICAgIEFTU0VSVChtYXJnaW4gPj0gMCk7Ci0gICAgaWYgKCFtYXJnaW4pCi0gICAgICAg
IHJldHVybiAqdGhpczsKLQotICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkgLSBtYXJnaW47Ci0gICAg
ZmxvYXQgYm91bmRzWSA9IHkoKSAtIG1hcmdpbjsKLSAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHdp
ZHRoKCkgKyBtYXJnaW4gKiAyOwotICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9IGhlaWdodCgpICsg
bWFyZ2luICogMjsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gcngoKSArIG1hcmdpbjsKLSAg
ICBmbG9hdCBib3VuZHNSYWRpdXNZID0gcnkoKSArIG1hcmdpbjsKLSAgICByZXR1cm4gRmxvYXRS
b3VuZGVkUmVjdChGbG9hdFJlY3QoYm91bmRzWCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5k
c0hlaWdodCksIEZsb2F0U2l6ZShib3VuZHNSYWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Ci19Ci0K
LUZsb2F0UG9pbnQgRmxvYXRSb3VuZGVkUmVjdDo6Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxv
YXQgd2lkdGhBdEludGVyY2VwdCkgY29uc3QKLXsKLSAgICBmbG9hdCB4aSA9ICh3aWR0aCgpIC0g
d2lkdGhBdEludGVyY2VwdCkgLyAyOwotICAgIGZsb2F0IHlpID0gcnkoKSAtIGVsbGlwc2VZSW50
ZXJjZXB0KHJ4KCkgLSB4aSwgcngoKSwgcnkoKSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoeGks
IHlpKTsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBFeGNsdXNpb25SZWN0YW5nbGU6OnNoYXBlUGFk
ZGluZ0JvdW5kcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdC
b3VuZHMpIHsKLSAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzID0gdHJ1ZTsK
LSAgICAgICAgbV9wYWRkaW5nQm91bmRzID0gbV9ib3VuZHMucGFkZGluZ0JvdW5kcyhzaGFwZVBh
ZGRpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX3BhZGRpbmdCb3VuZHM7Ci19Ci0KLUZsb2F0
Um91bmRlZFJlY3QgRXhjbHVzaW9uUmVjdGFuZ2xlOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcykgewotICAgICAgICBt
X2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcyA9IHRydWU7Ci0gICAgICAgIG1fbWFyZ2luQm91
bmRzID0gbV9ib3VuZHMubWFyZ2luQm91bmRzKHNoYXBlTWFyZ2luKCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gbV9tYXJnaW5Cb3VuZHM7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUmVjdGFuZ2xlOjpnZXRF
eGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNh
bEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZU1hcmdpbkJvdW5kcygpOwotICAgIGlmIChib3VuZHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7
Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKLQotICAgIGlmICh5
MiA8IGJvdW5kcy55KCkgfHwgeTEgPj0gYm91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZmxvYXQgeDEgPSBib3VuZHMueCgpOwotICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgo
KTsKLQotICAgIGlmIChib3VuZHMucnkoKSA+IDApIHsKLSAgICAgICAgaWYgKHkyIDwgYm91bmRz
LnkoKSArIGJvdW5kcy5yeSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9IHkyIC0gYm91bmRz
LnkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVy
Y2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIHgxID0gYm91
bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7Ci0gICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhY
KCkgLSBib3VuZHMucngoKSArIHhpOwotICAgICAgICB9IGVsc2UgaWYgKHkxID4gYm91bmRzLm1h
eFkoKSAtIGJvdW5kcy5yeSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9ICB5MSAtIChib3Vu
ZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNl
WEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIHgx
ID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7Ci0gICAgICAgICAgICB4MiA9IGJvdW5k
cy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVz
dWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKLX0KLQotdm9pZCBFeGNsdXNpb25SZWN0
YW5nbGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAgIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwotICAg
IGlmIChib3VuZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9
IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsK
LQotICAgIGlmICh5MSA8IGJvdW5kcy55KCkgfHwgeTIgPiBib3VuZHMubWF4WSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmbG9hdCB4MSA9IGJvdW5kcy54KCk7Ci0gICAgZmxvYXQgeDIgPSBi
b3VuZHMubWF4WCgpOwotCi0gICAgaWYgKGJvdW5kcy5yeSgpID4gMCkgewotICAgICAgICBib29s
IHkxSW50ZXJjZXB0c0Nvcm5lciA9IHkxIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpOwotICAg
ICAgICBib29sIHkySW50ZXJjZXB0c0Nvcm5lciA9IHkyID4gYm91bmRzLm1heFkoKSAtIGJvdW5k
cy5yeSgpOwotICAgICAgICBmbG9hdCB4aSA9IDA7Ci0KLSAgICAgICAgaWYgKHkxSW50ZXJjZXB0
c0Nvcm5lciAmJiB5MkludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmICAoeTEgPCBi
b3VuZHMuaGVpZ2h0KCkgKyAyICogYm91bmRzLnkoKSAtIHkyKSB7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgeWkgPSB5MSAtIGJvdW5kcy55KCkgLSBib3VuZHMucnkoKTsKLSAgICAgICAgICAgICAg
ICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChi
b3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgICAgIHhpID0gZWxsaXBz
ZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyKSB7Ci0gICAgICAgICAgICBm
bG9hdCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICAgICAgeGkg
PSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh5MkludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIGZsb2F0IHlp
ID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB4aSA9
IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lciB8fCB5MkludGVyY2VwdHNDb3Ju
ZXIpIHsKLSAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7Ci0g
ICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKLX0K
LQotYm9vbCBFeGNsdXNpb25SZWN0YW5nbGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxU
b3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1p
bkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBm
bG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsKLSAgICBmbG9hdCBt
aW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7Ci0gICAg
ZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsK
LQotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5k
cygpOwotICAgIGlmIChib3VuZHMuaXNFbXB0eSgpIHx8IG1pbkludGVydmFsV2lkdGggPiBib3Vu
ZHMud2lkdGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxvYXQgbWluWSA9IHN0
ZDo6bWF4KGJvdW5kcy55KCksIG1pbkludGVydmFsVG9wKTsKLSAgICBmbG9hdCBtYXhZID0gbWlu
WSArIG1pbkludGVydmFsSGVpZ2h0OwotCi0gICAgaWYgKG1heFkgPiBib3VuZHMubWF4WSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGludGVydmFsT3ZlcmxhcHNNaW5Db3Ju
ZXIgPSBtaW5ZIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpOwotICAgIGJvb2wgaW50ZXJ2YWxP
dmVybGFwc01heENvcm5lciA9IG1heFkgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCk7Ci0K
LSAgICBpZiAoIWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgIWludGVydmFsT3ZlcmxhcHNN
YXhDb3JuZXIpIHsKLSAgICAgICAgcmVzdWx0ID0gbWluWTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0
KCkgLyAyOwotICAgIGJvb2wgbWluQ29ybmVyRGVmaW5lc1ggPSBmYWJzKGNlbnRlclkgLSBtaW5Z
KSA+IGZhYnMoY2VudGVyWSAtIG1heFkpOwotICAgIGJvb2wgaW50ZXJ2YWxGaXRzV2l0aGluQ29y
bmVycyA9IG1pbkludGVydmFsV2lkdGggKyAyICogYm91bmRzLnJ4KCkgPD0gYm91bmRzLndpZHRo
KCk7Ci0gICAgRmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHQgPSBib3VuZHMuY29ybmVySW50ZXJj
ZXB0Rm9yV2lkdGgobWluSW50ZXJ2YWxXaWR0aCk7Ci0KLSAgICBpZiAoaW50ZXJ2YWxPdmVybGFw
c01pbkNvcm5lciAmJiAoIWludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgfHwgbWluQ29ybmVyRGVm
aW5lc1gpKSB7Ci0gICAgICAgIGlmIChpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8IGJvdW5k
cy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpIDwgbWluWSkgewotICAgICAgICAgICAgcmVzdWx0
ID0gbWluWTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtaW5JbnRlcnZhbEhlaWdodCA8IGJvdW5kcy5oZWlnaHQoKSAtICgyICogY29ybmVySW50ZXJj
ZXB0LnkoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQoYm91bmRz
LnkoKSArIGNvcm5lckludGVyY2VwdC55KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciAmJiAo
IWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgfHwgIW1pbkNvcm5lckRlZmluZXNYKSkgewotICAg
ICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyB8fCBtaW5ZIDw9ICBib3VuZHMubWF4
WSgpIC0gY29ybmVySW50ZXJjZXB0LnkoKSAtIG1pbkludGVydmFsSGVpZ2h0KSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBtaW5ZOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5ZmRhYzE2M2MxMmVlNzNkMmJlODkzZWYzMTg4YmQz
Mjc3YzJhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25SZWN0YW5nbGVfaAot
I2RlZmluZSBFeGNsdXNpb25SZWN0YW5nbGVfaAotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUu
aCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSb3Vu
ZGVkUmVjdCA6IHB1YmxpYyBGbG9hdFJlY3QgewotcHVibGljOgotICAgIEZsb2F0Um91bmRlZFJl
Y3QoKSB7IH0KLSAgICBGbG9hdFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBj
b25zdCBGbG9hdFNpemUmIHJhZGlpKQotICAgICAgICA6IEZsb2F0UmVjdChib3VuZHMpCi0gICAg
ICAgICwgbV9yYWRpaShyYWRpaSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgcngoKSBjb25z
dCB7IHJldHVybiBtX3JhZGlpLndpZHRoKCk7IH0KLSAgICBmbG9hdCByeSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFkaWkuaGVpZ2h0KCk7IH0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1hcmdpbkJvdW5k
cyhmbG9hdCBtYXJnaW4pIGNvbnN0OwotICAgIEZsb2F0Um91bmRlZFJlY3QgcGFkZGluZ0JvdW5k
cyhmbG9hdCBwYWRkaW5nKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGNvcm5lckludGVyY2VwdEZv
cldpZHRoKGZsb2F0IHdpZHRoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbV9y
YWRpaTsKLX07Ci0KLWNsYXNzIEV4Y2x1c2lvblJlY3RhbmdsZSA6IHB1YmxpYyBFeGNsdXNpb25T
aGFwZSB7Ci1wdWJsaWM6Ci0gICAgRXhjbHVzaW9uUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotICAgICAgICA6IEV4Y2x1c2lvblNoYXBl
KCkKLSAgICAgICAgLCBtX2JvdW5kcyhib3VuZHMsIHJhZGlpKQotICAgICAgICAsIG1faGF2ZUlu
aXRpYWxpemVkTWFyZ2luQm91bmRzKGZhbHNlKQotICAgICAgICAsIG1faGF2ZUluaXRpYWxpemVk
UGFkZGluZ0JvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBMYXlvdXRS
ZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKSk7IH0KLSAgICB2
aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91
bmRzKCkpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJ
bnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1
ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBmaXJz
dEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFs
VG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0
JikgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFw
ZU1hcmdpbkJvdW5kcygpIGNvbnN0OwotICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVQYWRkaW5n
Qm91bmRzKCkgY29uc3Q7Ci0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fYm91bmRzOwotICAgIG11
dGFibGUgRmxvYXRSb3VuZGVkUmVjdCBtX21hcmdpbkJvdW5kczsKLSAgICBtdXRhYmxlIEZsb2F0
Um91bmRlZFJlY3QgbV9wYWRkaW5nQm91bmRzOwotICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0
aWFsaXplZE1hcmdpbkJvdW5kcyA6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxp
emVkUGFkZGluZ0JvdW5kcyA6IDE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFeGNsdXNpb25SZWN0YW5nbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZTY0MGRi
NWQ3NjE3NDRhNGEwMWI2ODA1Yjg1Yzc4Y2JiMDY3ZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0KLSNpbmNsdWRlICJC
YXNpY1NoYXBlRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uUG9seWdvbi5oIgotI2lu
Y2x1ZGUgIkV4Y2x1c2lvblJlY3RhbmdsZS5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2lu
Y2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIldpbmRSdWxlLmgiCi0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUGFzc093
blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotewotICAgIEFTU0VSVChib3Vu
ZHMud2lkdGgoKSA+PSAwICYmIGJvdW5kcy5oZWlnaHQoKSA+PSAwICYmIHJhZGlpLndpZHRoKCkg
Pj0gMCAmJiByYWRpaS5oZWlnaHQoKSA+PSAwKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4
Y2x1c2lvblJlY3RhbmdsZShib3VuZHMsIHJhZGlpKSk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRy
PEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoY29uc3QgRmxvYXRQb2ludCYg
Y2VudGVyLCBmbG9hdCByYWRpdXMpCi17Ci0gICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngo
KSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywgcmFkaXVzKjIsIHJhZGl1cyoyKSwgRmxv
YXRTaXplKHJhZGl1cywgcmFkaXVzKSkpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxFeGNsdXNp
b25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIs
IGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCi17Ci0gICAgQVNTRVJUKHJhZGlpLndpZHRoKCkgPj0g
MCAmJiByYWRpaS5oZWlnaHQoKSA+PSAwKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1
c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRoKCksIGNlbnRl
ci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5oZWlnaHQoKSoy
KSwgcmFkaWkpKTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0
ZUV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNl
cywgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNp
b25Qb2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0
UmVjdCBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
b2dpY2FsQm94SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gcmVjdDsK
LSAgICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KHJlY3QueSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0gcmVjdC5tYXhY
KCksIHJlY3QuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSk7Ci0gICAgcmV0dXJuIHJlY3QudHJhbnNw
b3NlZFJlY3QoKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFBvaW50IHBoeXNpY2FsUG9pbnRU
b0xvZ2ljYWwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQs
IFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5n
TW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBwb2ludDsKLSAgICBpZiAoaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gRmxvYXRQ
b2ludChwb2ludC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSBwb2ludC54KCkpOwotICAgIHJldHVy
biBwb2ludC50cmFuc3Bvc2VkUG9pbnQoKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFNpemUg
cGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSkKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgcmV0dXJuIHNpemUudHJhbnNwb3NlZFNp
emUoKTsKLX0KLQotUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNy
ZWF0ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hhcGUsIGNvbnN0IExh
eW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTGVuZ3Ro
IG1hcmdpbiwgTGVuZ3RoIHBhZGRpbmcpCi17Ci0gICAgQVNTRVJUKGJhc2ljU2hhcGUpOwotCi0g
ICAgYm9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3
cml0aW5nTW9kZSk7Ci0gICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUg
PyBsb2dpY2FsQm94U2l6ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVpZ2h0KCk7Ci0gICAg
ZmxvYXQgYm94SGVpZ2h0ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUu
aGVpZ2h0KCkgOiBsb2dpY2FsQm94U2l6ZS53aWR0aCgpOwotICAgIE93blB0cjxFeGNsdXNpb25T
aGFwZT4gZXhjbHVzaW9uU2hhcGU7Ci0KLSAgICBzd2l0Y2ggKGJhc2ljU2hhcGUtPnR5cGUoKSkg
ewotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUmVjdGFuZ2xlVHlwZTogewotICAg
ICAgICBjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIEZsb2F0UmVj
dCBib3VuZHMoCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+eCgp
LCBib3hXaWR0aCksCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+
eSgpLCBib3hIZWlnaHQpLAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5n
bGUtPndpZHRoKCksIGJveFdpZHRoKSwKLSAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgo
cmVjdGFuZ2xlLT5oZWlnaHQoKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIExlbmd0aCByYWRpdXNY
TGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7Ci0gICAgICAgIExlbmd0aCByYWRp
dXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7Ci0gICAgICAgIEZsb2F0U2l6
ZSBjb3JuZXJSYWRpaSgKLSAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/
IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwKLSAgICAg
ICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVu
Z3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOwotICAgICAgICBGbG9hdFJlY3QgbG9naWNh
bEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxCb3hTaXplLmhl
aWdodCgpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVF
eGNsdXNpb25SZWN0YW5nbGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNv
cm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVDaXJjbGVUeXBlOiB7Ci0gICAgICAgIGNvbnN0IEJh
c2ljU2hhcGVDaXJjbGUqIGNpcmNsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVDaXJj
bGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0VmFsdWVGb3JM
ZW5ndGgoY2lyY2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKLSAgICAgICAgZmxvYXQgY2VudGVy
WSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7Ci0g
ICAgICAgIGZsb2F0IHJhZGl1cyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5yYWRpdXMo
KSwgc3RkOjptaW4oYm94SGVpZ2h0LCBib3hXaWR0aCkpOwotICAgICAgICBGbG9hdFBvaW50IGxv
Z2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwg
Y2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAg
ICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25DaXJjbGUobG9naWNhbENlbnRlciwg
cmFkaXVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpC
YXNpY1NoYXBlRWxsaXBzZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZUVsbGlwc2Uq
IGVsbGlwc2UgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSo+KGJhc2ljU2hh
cGUpOwotICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNl
LT5jZW50ZXJYKCksIGJveFdpZHRoKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0VmFs
dWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOwotICAgICAgICBmbG9h
dCByYWRpdXNYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdp
ZHRoKTsKLSAgICAgICAgZmxvYXQgcmFkaXVzWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBz
ZS0+cmFkaXVzWSgpLCBib3hIZWlnaHQpOwotICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50
ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSks
IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIEZsb2F0U2l6
ZSBsb2dpY2FsUmFkaWkgPSBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoRmxvYXRTaXplKHJhZGl1c1gs
IHJhZGl1c1kpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVh
dGVFeGNsdXNpb25FbGxpcHNlKGxvZ2ljYWxDZW50ZXIsIGxvZ2ljYWxSYWRpaSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVBvbHlnb25U
eXBlOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKLSAgICAgICAgY29u
c3QgVmVjdG9yPExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOwotICAgICAgICBz
aXplX3QgdmFsdWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVl
c1NpemUgJSAyKSk7Ci0gICAgICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNl
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4odmFsdWVzU2l6ZSAvIDIpKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlc1NpemU7IGkgKz0gMikgewotICAg
ICAgICAgICAgRmxvYXRQb2ludCB2ZXJ0ZXgoCi0gICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZv
ckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJveFdpZHRoKSwKLSAgICAgICAgICAgICAgICBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpICsgMSksIGJveEhlaWdodCkpOwotICAgICAgICAgICAg
KCp2ZXJ0aWNlcylbaSAvIDJdID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbCh2ZXJ0ZXgsIGxvZ2lj
YWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBl
eGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24odmVydGljZXMucmVsZWFzZSgp
LCBwb2x5Z29uLT53aW5kUnVsZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2Fz
ZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOiB7Ci0gICAgICAgIGNv
bnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSogcmVjdGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIGZsb2F0
IGxlZnQgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+bGVmdCgpLCBib3hXaWR0aCk7
Ci0gICAgICAgIGZsb2F0IHRvcCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT50b3Ao
KSwgYm94SGVpZ2h0KTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kcygKLSAgICAgICAgICAgIGxl
ZnQsCi0gICAgICAgICAgICB0b3AsCi0gICAgICAgICAgICBib3hXaWR0aCAtIGxlZnQgLSBmbG9h
dFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+cmlnaHQoKSwgYm94V2lkdGgpLAotICAgICAgICAg
ICAgYm94SGVpZ2h0IC0gdG9wIC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmJvdHRv
bSgpLCBib3hIZWlnaHQpKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1hMZW5ndGggPSByZWN0YW5n
bGUtPmNvcm5lclJhZGl1c1goKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1lMZW5ndGggPSByZWN0
YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKLSAgICAgICAgRmxvYXRTaXplIGNvcm5lclJhZGlpKAot
ICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVG
b3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAotICAgICAgICAgICAgcmFkaXVzWUxl
bmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0
aCwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsQm91bmRzID0gcGh5c2lj
YWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdN
b2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvblJlY3Rhbmds
ZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVyUmFkaWksIHdyaXRp
bmdNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGV4Y2x1c2lvblNoYXBlLT5tX3dy
aXRpbmdNb2RlID0gd3JpdGluZ01vZGU7Ci0gICAgZXhjbHVzaW9uU2hhcGUtPm1fbWFyZ2luID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChtYXJnaW4sIDApOwotICAgIGV4Y2x1c2lvblNoYXBlLT5tX3Bh
ZGRpbmcgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHBhZGRpbmcsIDApOwotCi0gICAgcmV0dXJuIGV4
Y2x1c2lvblNoYXBlLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTNkNTFmMDQxNjgyMzIxODIxNTJjMzI4MDNmYTczZmE0ODlkNDUxZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAq
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAq
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hh
cGVfaAotCi0jaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3Qg
TGluZVNlZ21lbnQgewotICAgIExpbmVTZWdtZW50KGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBs
b2dpY2FsUmlnaHQpCi0gICAgICAgIDogbG9naWNhbExlZnQobG9naWNhbExlZnQpCi0gICAgICAg
ICwgbG9naWNhbFJpZ2h0KGxvZ2ljYWxSaWdodCkKLSAgICB7Ci0gICAgfQotCi0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodDsKLX07Ci0KLXR5
cGVkZWYgVmVjdG9yPExpbmVTZWdtZW50PiBTZWdtZW50TGlzdDsKLQotCi0vLyBBIHJlcHJlc2Vu
dGF0aW9uIG9mIGEgQmFzaWNTaGFwZSB0aGF0IGVuYWJsZXMgbGF5b3V0IGNvZGUgdG8gZGV0ZXJt
aW5lIGhvdyB0byBicmVhayBhIGxpbmUgdXAgaW50byBzZWdtZW50cwotLy8gdGhhdCB3aWxsIGZp
dCB3aXRoaW4gb3IgYXJvdW5kIGEgc2hhcGUuIFRoZSBsaW5lIGlzIGRlZmluZWQgYnkgYSBwYWly
IG9mIGxvZ2ljYWwgWSBjb29yZGluYXRlcyBhbmQgdGhlCi0vLyBjb21wdXRlZCBzZWdtZW50cyBh
cmUgcmV0dXJuZWQgYXMgcGFpcnMgb2YgbG9naWNhbCBYIGNvb3JkaW5hdGVzLiBUaGUgQmFzaWNT
aGFwZSBpdHNlbGYgaXMgZGVmaW5lZCBpbgotLy8gcGh5c2ljYWwgY29vcmRpbmF0ZXMuCi0KLWNs
YXNzIEV4Y2x1c2lvblNoYXBlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxFeGNs
dXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZSosIGNvbnN0
IExheW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwg
TGVuZ3RoIHBhZGRpbmcpOwotCi0gICAgdmlydHVhbCB+RXhjbHVzaW9uU2hhcGUoKSB7IH0KLQot
ICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5k
aW5nQm94KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRV
bml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbElu
dGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdCA9IDA7Ci0KLXByb3RlY3RlZDoK
LSAgICBmbG9hdCBzaGFwZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9Ci0gICAg
ZmxvYXQgc2hhcGVQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9Ci0KLXByaXZh
dGU6Ci0gICAgV3JpdGluZ01vZGUgbV93cml0aW5nTW9kZTsKLSAgICBmbG9hdCBtX21hcmdpbjsK
LSAgICBmbG9hdCBtX3BhZGRpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFeGNsdXNpb25TaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjE0
ZjgyMmI3ODU0MWVkZTNlM2M0OGI4MzRkODJjMzI4YWNlMWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
LSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0g
KiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGVJbmZvLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUg
IkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKLSNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBl
LCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25z
dCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5
b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWNvbnN0IEV4Y2x1c2lvblNoYXBlKiBFeGNs
dXNpb25TaGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVydmFsR2V0dGVyPjo6
Y29tcHV0ZWRTaGFwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEV4Y2x1c2lvblNoYXBlKiBleGNsdXNp
b25TaGFwZSA9IG1fc2hhcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBleGNsdXNpb25TaGFwZTsK
LQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSAobV9yZW5kZXJlci0+c3R5
bGUoKS0+KnNoYXBlR2V0dGVyKSgpOwotICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gKHNoYXBlVmFs
dWUgJiYgc2hhcGVWYWx1ZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKSA/
IHNoYXBlVmFsdWUtPnNoYXBlKCkgOiAwOwotCi0gICAgQVNTRVJUKHNoYXBlKTsKLQotICAgIG1f
c2hhcGUgPSBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUoc2hhcGUsIExheW91
dFNpemUobV9zaGFwZUxvZ2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWlnaHQpLCBtX3JlbmRl
cmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZU1h
cmdpbigpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7Ci0gICAgQVNTRVJU
KG1fc2hhcGUpOwotICAgIHJldHVybiBtX3NoYXBlLmdldCgpOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdl
dHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5
b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWJvb2wgRXhjbHVzaW9u
U2hhcGVJbmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1
dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWln
aHQpCi17Ci0gICAgQVNTRVJUKGxpbmVIZWlnaHQgPj0gMCk7Ci0gICAgbV9zaGFwZUxpbmVUb3Ag
PSBsaW5lVG9wIC0gbG9naWNhbFRvcE9mZnNldCgpOwotICAgIG1fbGluZUhlaWdodCA9IGxpbmVI
ZWlnaHQ7Ci0gICAgbV9zZWdtZW50cy5jbGVhcigpOwotCi0gICAgaWYgKGxpbmVPdmVybGFwc1No
YXBlQm91bmRzKCkpCi0gICAgICAgIChjb21wdXRlZFNoYXBlKCktPippbnRlcnZhbEdldHRlciko
bV9zaGFwZUxpbmVUb3AsIHN0ZDo6bWluKG1fbGluZUhlaWdodCwgc2hhcGVMb2dpY2FsQm90dG9t
KCkgLSBsaW5lVG9wKSwgbV9zZWdtZW50cyk7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
T2Zmc2V0ID0gdGhpcy0+bG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc2VnbWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV9zZWdtZW50c1tpXS5s
b2dpY2FsTGVmdCArPSBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICAgICAgbV9zZWdtZW50c1tpXS5s
b2dpY2FsUmlnaHQgKz0gbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
c2VnbWVudHMuc2l6ZSgpOwotfQotCi10ZW1wbGF0ZSBjbGFzcyBFeGNsdXNpb25TaGFwZUluZm88
UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lv
blNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz47Ci10ZW1wbGF0ZSBjbGFzcyBFeGNsdXNpb25T
aGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lv
blNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz47Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNWE3MDc5MmEzZjkxMjZmZDc1Y2ZiNzY4MjlmYjlhYWM2MDE4ZmZiOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAs
MCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFy
ZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
LSogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotKiBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0qIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SCi0qIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotKiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0Uu
Ci0qLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlSW5mb19oCi0jZGVmaW5lIEV4Y2x1c2lvblNo
YXBlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIkV4Y2x1c2lv
blNoYXBlLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgSW5m
b1R5cGU+Ci1jbGFzcyBNYXBwZWRJbmZvIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgSW5mb1R5cGUq
IGVuc3VyZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KQotICAgIHsKLSAgICAgICAgSW5mb01hcCYg
aW5mb01hcCA9IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7Ci0gICAg
ICAgIGlmIChJbmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCi0gICAgICAgICAgICBy
ZXR1cm4gaW5mbzsKLSAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IGluZm9NYXAuYWRkKGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotICAgIH0KLSAgICBzdGF0aWMgdm9p
ZCByZW1vdmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkgeyBpbmZvTWFwKCkucmVtb3ZlKGtleSk7
IH0KLSAgICBzdGF0aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IHJldHVy
biBpbmZvTWFwKCkuZ2V0KGtleSk7IH0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IEtleVR5cGUqLCBPd25QdHI8SW5mb1R5cGU+ID4gSW5mb01hcDsKLSAgICBzdGF0aWMgSW5m
b01hcCYgaW5mb01hcCgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9N
YXAsIHN0YXRpY0luZm9NYXAsICgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY0luZm9NYXA7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hhcGVWYWx1
ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1c2lvblNo
YXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0
JikgY29uc3Q+Ci1jbGFzcyBFeGNsdXNpb25TaGFwZUluZm8gewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkV4Y2x1c2lvblNoYXBlSW5mbygpIHsg
fQotCi0gICAgdm9pZCBzZXRTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3JlbmRlcmVyLT5zdHls
ZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgewotICAgICAgICAgICAgbG9naWNhbFdp
ZHRoIC09IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKLSAgICAg
ICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2lj
YWxIZWlnaHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NoYXBlTG9naWNhbFdpZHRo
ID09IGxvZ2ljYWxXaWR0aCAmJiBtX3NoYXBlTG9naWNhbEhlaWdodCA9PSBsb2dpY2FsSGVpZ2h0
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkaXJ0eVNoYXBlU2l6ZSgpOwotICAgICAg
ICBtX3NoYXBlTG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoOwotICAgICAgICBtX3NoYXBlTG9n
aWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQ7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGNv
bXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVI
ZWlnaHQpOwotICAgIHZvaWQgY2xlYXJTZWdtZW50cygpIHsgbV9zZWdtZW50cy5jbGVhcigpOyB9
Ci0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0K
LSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7
IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBjb21w
dXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9naWNhbExlZnRPZmZzZXQoKTsg
fQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBjb21w
dXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsgbG9naWNhbExlZnRPZmZzZXQo
KTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBj
b21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgoKTsgfQotICAgIExheW91dFVu
aXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2lj
YWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5l
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7
IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFwZUxpbmVUb3AgKyBtX2xpbmVIZWlnaHQgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KLQotICAg
IExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKSBjb25zdCB7IHJldHVybiAo
bV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpID8gKG1fc2hh
cGVMb2dpY2FsSGVpZ2h0ICsgbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWln
aHQoKSkgOiBtX3NoYXBlTG9naWNhbEhlaWdodDsgfQotCi0gICAgYm9vbCBsaW5lT3ZlcmxhcHNT
aGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMaW5lVG9wKCkgPCBzaGFwZUxvZ2lj
YWxCb3R0b20oKSAmJiBzaGFwZUxvZ2ljYWxUb3AoKSA8PSBsb2dpY2FsTGluZUJvdHRvbSgpOyB9
Ci0gICAgYm9vbCBsaW5lV2l0aGluU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBsaW5lT3Zl
cmxhcHNTaGFwZUJvdW5kcygpICYmIChsb2dpY2FsTGluZUJvdHRvbSgpIDw9IHNoYXBlTG9naWNh
bEJvdHRvbSgpKTsgfQotCi0gICAgdm9pZCBkaXJ0eVNoYXBlU2l6ZSgpIHsgbV9zaGFwZS5jbGVh
cigpOyB9Ci0gICAgYm9vbCBzaGFwZVNpemVEaXJ0eSgpIHsgcmV0dXJuICFtX3NoYXBlLmdldCgp
OyB9Ci0gICAgY29uc3QgUmVuZGVyVHlwZSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
cmVyOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBFeGNsdXNpb25TaGFwZUluZm8oY29uc3QgUmVuZGVy
VHlwZSogcmVuZGVyZXIpOiBtX3JlbmRlcmVyKHJlbmRlcmVyKSB7IH0KLQotICAgIGNvbnN0IEV4
Y2x1c2lvblNoYXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0KLSAgICBM
YXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLT5z
dHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVyZXItPmJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUoKSA6IExheW91dFVuaXQoKTsgfTsKLSAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNp
emluZygpID09IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLT5pc1JlbmRlclJlZ2lvbigpKSA/
IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpIDogTGF5b3V0VW5pdCgpOyB9Ci0K
LSAgICBMYXlvdXRVbml0IG1fc2hhcGVMaW5lVG9wOwotICAgIExheW91dFVuaXQgbV9saW5lSGVp
Z2h0OwotICAgIFNlZ21lbnRMaXN0IG1fc2VnbWVudHM7Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJs
ZSBPd25QdHI8RXhjbHVzaW9uU2hhcGU+IG1fc2hhcGU7Ci0KLSAgICBMYXlvdXRVbml0IG1fc2hh
cGVMb2dpY2FsV2lkdGg7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbEhlaWdodDsKLSAg
ICBjb25zdCBSZW5kZXJUeXBlKiBtX3JlbmRlcmVyOwotfTsKLX0KLSNlbmRpZgotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE3NDRmY2JhOTk1NGQ5ZGEw
YTk5NTVkY2E4N2FiZGVkM2U5MzExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5oIgotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotTGluZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZShjb25zdCBJ
bmxpbmVJdGVyYXRvciYgc3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQpCi0gICAgOiBz
dGFydChzdGFydC5yb290KCksIHN0YXJ0Lm9iamVjdCgpLCBzdGFydC5vZmZzZXQoKSkKLSAgICAs
IGVuZChlbmQucm9vdCgpLCBlbmQub2JqZWN0KCksIGVuZC5vZmZzZXQoKSkKLSAgICB7Ci0gICAg
fQotCi1ib29sIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJl
bmRlckJsb2NrKiByZW5kZXJlcikKLXsKLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZVZh
bHVlID0gcmVuZGVyZXItPnN0eWxlKCktPnJlc29sdmVkU2hhcGVJbnNpZGUoKTsKLSAgICBpZiAo
IXNoYXBlVmFsdWUgfHwgc2hhcGVWYWx1ZS0+dHlwZSgpICE9IEV4Y2x1c2lvblNoYXBlVmFsdWU6
OlNoYXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCYXNpY1NoYXBlKiBzaGFwZSA9
IHNoYXBlVmFsdWUtPnNoYXBlKCk7Ci0gICAgcmV0dXJuIHNoYXBlICYmIHNoYXBlLT50eXBlKCkg
IT0gQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTsKLX0KLQotYm9vbCBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNl
Z21lbnRXaWR0aCkKLXsKLSAgICBjb25zdCBFeGNsdXNpb25TaGFwZSogc2hhcGUgPSBjb21wdXRl
ZFNoYXBlKCk7Ci0gICAgaWYgKCFzaGFwZSB8fCBtX2xpbmVIZWlnaHQgPD0gMCB8fCBsb2dpY2Fs
TGluZVRvcCgpID4gc2hhcGVMb2dpY2FsQm90dG9tKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIExheW91dFVuaXQgbmV3TGluZVRvcDsKLSAgICBpZiAoc2hhcGUtPmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AobV9zaGFwZUxpbmVUb3AsIExheW91dFNpemUobWluU2VnbWVu
dFdpZHRoLCBtX2xpbmVIZWlnaHQpLCBuZXdMaW5lVG9wKSkgewotICAgICAgICBpZiAobmV3TGlu
ZVRvcCA+IG1fc2hhcGVMaW5lVG9wKSB7Ci0gICAgICAgICAgICBtX3NoYXBlTGluZVRvcCA9IG5l
d0xpbmVUb3A7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM4NDAzMmZmOTlmNmZkYjdkY2MyNGI4NjZjOTQxYjg2MzAyNTgwMmEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm9faAotI2RlZmluZSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm9f
aAotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUlu
Zm8uaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbmxpbmVJdGVyYXRvcjsKLWNsYXNz
IFJlbmRlckJsb2NrOwotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi1zdHJ1Y3QgTGluZVNlZ21lbnRJ
dGVyYXRvciB7Ci0gICAgUmVuZGVyT2JqZWN0KiByb290OwotICAgIFJlbmRlck9iamVjdCogb2Jq
ZWN0OwotICAgIHVuc2lnbmVkIG9mZnNldDsKLSAgICBMaW5lU2VnbWVudEl0ZXJhdG9yKFJlbmRl
ck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCkKLSAg
ICAgICAgOiByb290KHJvb3QpCi0gICAgICAgICwgb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBv
ZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgTGluZVNlZ21lbnRSYW5n
ZSB7Ci0gICAgTGluZVNlZ21lbnRJdGVyYXRvciBzdGFydDsKLSAgICBMaW5lU2VnbWVudEl0ZXJh
dG9yIGVuZDsKLSAgICBMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFy
dCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxMaW5l
U2VnbWVudFJhbmdlPiBTZWdtZW50UmFuZ2VMaXN0OwotCi1jbGFzcyBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVy
U3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0SW5jbHVkZWRJ
bnRlcnZhbHM+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKSB7IHJl
dHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKHJlbmRlcmVyKSk7IH0K
LQotICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVy
ZXIpOwotCi0gICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFCi0gICAgewotICAgICAg
ICBtX3NlZ21lbnRSYW5nZXMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIEV4Y2x1c2lvblNoYXBl
SW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmRXhj
bHVzaW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGlu
ZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBib29sIGhhc1NlZ21lbnRzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYm
IG1fc2VnbWVudHMuc2l6ZSgpOwotICAgIH0KLSAgICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVu
dHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1NlZ21lbnRzKCkpOwotICAgICAg
ICByZXR1cm4gbV9zZWdtZW50czsKLSAgICB9Ci0gICAgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVu
dFJhbmdlcygpIHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQotICAgIGNvbnN0IFNlZ21lbnRS
YW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7
IH0KLSAgICBjb25zdCBMaW5lU2VnbWVudCogY3VycmVudFNlZ21lbnQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKCFoYXNTZWdtZW50cygpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIEFTU0VSVChtX3NlZ21lbnRSYW5nZXMuc2l6ZSgpIDwgbV9zZWdtZW50cy5zaXplKCkpOwot
ICAgICAgICByZXR1cm4gJm1fc2VnbWVudHNbbV9zZWdtZW50UmFuZ2VzLnNpemUoKV07Ci0gICAg
fQotICAgIGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVudFdpZHRoKTsK
LQotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCB2YWx1ZSkgeyBtX25lZWRzTGF5b3V0ID0g
dmFsdWU7IH0KLSAgICBib29sIG5lZWRzTGF5b3V0KCkgeyByZXR1cm4gbV9uZWVkc0xheW91dDsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dp
Y2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCkt
PnNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKLSAgICA6
IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNo
YXBlSW5zaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiAocmVuZGVy
ZXIpCi0gICAgLCBtX25lZWRzTGF5b3V0KGZhbHNlKQotICAgIHsgfQotCi0gICAgU2VnbWVudFJh
bmdlTGlzdCBtX3NlZ21lbnRSYW5nZXM7Ci0gICAgYm9vbCBtX25lZWRzTGF5b3V0OjE7Ci19Owot
Ci19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjNDljY2U1YTU2ZjFjYTlkYzA0YzQ5ODMwZjJjODVjZDdkZGUyYTVlLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDi
gJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBC
RQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5oIgotCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWJvb2wgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNv
bnN0IFJlbmRlckJveCogYm94KQotewotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHZhbHVlID0g
Ym94LT5zdHlsZSgpLT5zaGFwZU91dHNpZGUoKTsKLSAgICByZXR1cm4gYm94LT5pc0Zsb2F0aW5n
V2l0aFNoYXBlT3V0c2lkZSgpICYmIHZhbHVlLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1
ZTo6U2hhcGUgJiYgdmFsdWUtPnNoYXBlKCk7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUhlaWdodCkKLXsKLSAgICBpZiAoc2hhcGVTaXplRGlydHkoKSB8fCBtX2xpbmVU
b3AgIT0gbGluZVRvcCB8fCBtX2xpbmVIZWlnaHQgIT0gbGluZUhlaWdodCkgewotICAgICAgICBp
ZiAoRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNp
ZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+Ojpjb21wdXRlU2VnbWVu
dHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpKSB7Ci0gICAgICAgICAgICBtX2xlZnRTZWdt
ZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1swXS5sb2dpY2FsTGVmdCAtIHNo
YXBlTG9naWNhbExlZnQoKTsKLSAgICAgICAgICAgIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGlu
Z0JveERlbHRhID0gbV9zZWdtZW50c1ttX3NlZ21lbnRzLnNpemUoKS0xXS5sb2dpY2FsUmlnaHQg
LSBzaGFwZUxvZ2ljYWxSaWdodCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9s
ZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7Ci0gICAgICAgICAgICBtX3JpZ2h0
U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgbV9s
aW5lVG9wID0gbGluZVRvcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7
Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4
N2E1YzQ4YjdiMWZmY2UyMTU2ZjgxNzg3NDZmM2YzMzIwNzg1ZjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mb19oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9faAotCi0jaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluZm8uaCIKLSNp
bmNsdWRlICJMYXlvdXRTaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVu
ZGVyQm94OwotCi1jbGFzcyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvIDogcHVibGljIEV4Y2x1
c2lvblNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhj
bHVzaW9uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPiwgcHVibGljIE1hcHBlZEluZm88UmVu
ZGVyQm94LCBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvPiB7Ci1wdWJsaWM6Ci0gICAgTGF5b3V0
U2l6ZSBzaGFwZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKHNoYXBl
TG9naWNhbExlZnQoKSwgc2hhcGVMb2dpY2FsVG9wKCkpOyB9Ci0KLSAgICBMYXlvdXRVbml0IGxl
ZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0U2Vn
bWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsgfQotICAgIExheW91dFVuaXQgcmlnaHRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGE7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNG
b3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklE
RTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8+IGNy
ZWF0ZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3
IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8ocmVuZGVyZXIpKTsgfQotICAgIHN0YXRpYyBib29s
IGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGlu
Z0JveCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyhjb25z
dCBSZW5kZXJCb3gqIHJlbmRlcmVyKSA6IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCb3gsICZS
ZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1ZGVkSW50
ZXJ2YWxzPihyZW5kZXJlcikgeyB9Ci0KLSAgICBMYXlvdXRVbml0IG1fbGVmdFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGE7Ci0gICAgTGF5b3V0VW5pdCBtX3JpZ2h0U2VnbWVudFNoYXBlQm91
bmRpbmdCb3hEZWx0YTsKLSAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKLX07Ci0KLX0KLSNlbmRp
ZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAppbmRleCAw
ZjZkOTNjYWI5NTMyZDQzNzMxYzBkNWFiMjQzMzE1ZGYzNjI1ZjMyLi5kOWViZDY0N2E3ZDk1ODU3
ZDI4YTlhZTk5NmYzZWViMzRjODdmOTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRTdGF0ZS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExh
eW91dFN0YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRTaXoKICAg
ICAsIG1fbGluZUdyaWQoMCkKICAgICAsIG1fbmV4dChwcmV2KQogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotICAgICwgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8oMCkKKyAgICAsIG1fc2hhcGVJ
bnNpZGVJbmZvKDApCiAjZW5kaWYKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX3JlbmRlcmVyKHJl
bmRlcmVyKQpAQCAtMTEzLDkgKzExMyw5IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6CiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCiAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpIHsK
ICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlckJsb2NrID0gdG9SZW5kZXJCbG9jayhy
ZW5kZXJlcik7Ci0gICAgICAgIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gcmVuZGVyQmxv
Y2stPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgICAgICBpZiAoIW1fZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvICYmIG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8gJiYg
cmVuZGVyQmxvY2stPmFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKLSAg
ICAgICAgICAgIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbV9uZXh0LT5tX2V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbzsKKyAgICAgICAgbV9zaGFwZUluc2lkZUluZm8gPSByZW5kZXJCbG9j
ay0+c2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIGlmICghbV9zaGFwZUluc2lkZUluZm8gJiYg
bV9uZXh0LT5tX3NoYXBlSW5zaWRlSW5mbyAmJiByZW5kZXJCbG9jay0+YWxsb3dzU2hhcGVJbnNp
ZGVJbmZvU2hhcmluZygpKQorICAgICAgICAgICAgbV9zaGFwZUluc2lkZUluZm8gPSBtX25leHQt
Pm1fc2hhcGVJbnNpZGVJbmZvOwogICAgIH0KICNlbmRpZgogCkBAIC0xNDksNyArMTQ5LDcgQEAg
TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKICAgICAsIG1fbGlu
ZUdyaWQoMCkKICAgICAsIG1fbmV4dCgwKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICwg
bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8oMCkKKyAgICAsIG1fc2hhcGVJbnNpZGVJbmZvKDAp
CiAjZW5kaWYKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICNpZm5kZWYgTkRFQlVHCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCmluZGV4IDc1YzM1M2Q1ZGRhODA4ZjE5
YmM4ZmJhZWM0Njg3M2I1ZWY1NjNhZGEuLmQ3NzQ5YzUyYzYwZDc1NjIwMWE5ODEzOTJlODNiNWI1
YzE3MmEwOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCkBAIC0zOSw3
ICszOSw3IEBAIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJl
bmRlckZsb3dUaHJlYWQ7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1jbGFzcyBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm87CitjbGFzcyBTaGFwZUluc2lkZUluZm87CiAjZW5kaWYKIAogY2xhc3Mg
TGF5b3V0U3RhdGUgewpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9saW5l
R3JpZCgwKQogICAgICAgICAsIG1fbmV4dCgwKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAg
ICAgICAsIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKDApCisgICAgICAgICwgbV9zaGFwZUlu
c2lkZUluZm8oMCkKICNlbmRpZgogICAgICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICNp
Zm5kZWYgTkRFQlVHCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzQmxv
Y2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUdyaWQgfHwgKG1faXNQYWdpbmF0ZWQgJiYgbV9wYWdlTG9naWNhbEhlaWdodCk7IH0KIAogI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9leGNsdXNpb25TaGFwZUluc2lk
ZUluZm87IH0KKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbygpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcGVJbnNpZGVJbmZvOyB9CiAjZW5kaWYKIHByaXZhdGU6CiAgICAgLy8gVGhl
IG5vcm1hbCBvcGVyYXRvciBuZXcgaXMgZGlzYWxsb3dlZC4KQEAgLTEyNSw4ICsxMjUsOCBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlIGN1cnJlbnQgbGluZSBncmlkIHRoYXQgd2UncmUgc25hcHBpbmcg
dG8gYW5kIHRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBncmlkLgogICAgIFJlbmRlckJs
b2NrKiBtX2xpbmVHcmlkOwogICAgIExheW91dFN0YXRlKiBtX25leHQ7Ci0jaWYgRU5BQkxFKENT
U19FWENMVVNJT05TKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogbV9leGNsdXNpb25T
aGFwZUluc2lkZUluZm87CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgU2hhcGVJbnNpZGVJ
bmZvKiBtX3NoYXBlSW5zaWRlSW5mbzsKICNlbmRpZgogCiAgICAgLy8gRklYTUU6IERpc3Rpbmd1
aXNoIGJldHdlZW4gdGhlIGxheW91dCBjbGlwIHJlY3QgYW5kIHRoZSBwYWludCBjbGlwIHJlY3Qg
d2hpY2ggbWF5IGJlIGxhcmdlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCmluZGV4IGIwZDE1OWYyZTc0YTA5YjA3OWQ2NzI3ZWQ5ZWMxM2MwZjMwOTQ0MzcuLmZhODAz
ZTlmNzdjYWFjOGYwMTAyNWExNGU2NWFiMDM5MzU1MTJkMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNjcsOCArNjcsOCBAQAogI2luY2x1ZGUgIlRyYW5z
Zm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIgotI2luY2x1
ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUlu
Zm8uaCIKKyNpbmNsdWRlICJTaGFwZU91dHNpZGVJbmZvLmgiCiAjZW5kaWYKICNpbmNsdWRlIDx3
dGYvU3RhY2tTdGF0cy5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KQEAgLTM2
Myw5ICszNjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogICAgIFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgLy8g
RklYTUU6IEJ1ZyA4OTk5MzogU3R5bGUgY2hhbmdlcyBzaG91bGQgYWZmZWN0IHRoZSBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm9zIGZvciBvdGhlciByZW5kZXIgYmxvY2tzIHRoYXQKLSAgICAvLyBz
aGFyZSB0aGUgc2FtZSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8KLSAgICB1cGRhdGVFeGNsdXNp
b25TaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKG5ld1N0eWxlLT5yZXNvbHZlZFNoYXBl
SW5zaWRlKCksIG9sZFN0eWxlID8gb2xkU3R5bGUtPnJlc29sdmVkU2hhcGVJbnNpZGUoKSA6IDAp
OworICAgIHVwZGF0ZVNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UobmV3U3R5bGUtPnJl
c29sdmVkU2hhcGVJbnNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+cmVzb2x2ZWRTaGFwZUlu
c2lkZSgpIDogMCk7CiAjZW5kaWYKIAogICAgIGlmICghaXNBbm9ueW1vdXNCbG9jaygpKSB7CkBA
IC0xNDQwLDE3ICsxNDM4LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCiB9CiAKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSog
c2hhcGVJbnNpZGUsIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNoYXBlSW5zaWRlKQor
dm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShj
b25zdCBTaGFwZVZhbHVlKiBzaGFwZUluc2lkZSwgY29uc3QgU2hhcGVWYWx1ZSogb2xkU2hhcGVJ
bnNpZGUpCiB7CiAgICAgLy8gRklYTUU6IEEgZnV0dXJlIG9wdGltaXphdGlvbiB3b3VsZCBkbyBh
IGRlZXAgY29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuCiAgICAgaWYgKHNoYXBlSW5zaWRlID09IG9s
ZFNoYXBlSW5zaWRlKQogICAgICAgICByZXR1cm47CiAKKyAgICBTaGFwZUluc2lkZUluZm8qIHNo
YXBlSW5zaWRlSW5mbzsKICAgICBpZiAoc2hhcGVJbnNpZGUpIHsKLSAgICAgICAgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBlbnN1cmVFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8oKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5k
aXJ0eVNoYXBlU2l6ZSgpOworICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBlbnN1cmVTaGFwZUlu
c2lkZUluZm8oKTsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHNldEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhudWxscHRy
KTsKKyAgICAgICAgc2V0U2hhcGVJbnNpZGVJbmZvKG51bGxwdHIpOwogICAgICAgICBtYXJrU2hh
cGVJbnNpZGVEZXNjZW5kYW50c0ZvckxheW91dCgpOwogICAgIH0KIH0KQEAgLTE0NzIsMTYgKzE0
NzEsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya1NoYXBlSW5zaWRlRGVzY2VuZGFudHNGb3JM
YXlvdXQoKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBleGNsdXNpb25JbmZvUmVx
dWlyZXNSZWxheW91dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCitzdGF0aWMgaW5saW5lIGJv
b2wgc2hhcGVJbmZvUmVxdWlyZXNSZWxheW91dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiB7
CiAjaWYgIUVOQUJMRShDU1NfU0hBUEVTKQogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAg
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBpbmZvID0gYmxvY2stPmV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogaW5mbyA9IGJsb2NrLT5zaGFwZUluc2lk
ZUluZm8oKTsKICAgICBpZiAoaW5mbykKICAgICAgICAgaW5mby0+c2V0TmVlZHNMYXlvdXQoaW5m
by0+c2hhcGVTaXplRGlydHkoKSk7CiAgICAgZWxzZQotICAgICAgICBpbmZvID0gYmxvY2stPmxh
eW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICBpbmZvID0gYmxvY2stPmxh
eW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAgIHJldHVybiBpbmZvICYmIGluZm8tPm5lZWRzTGF5
b3V0KCk7CiAjZW5kaWYKIH0KQEAgLTE0ODksMTEgKzE0ODgsMTEgQEAgc3RhdGljIGlubGluZSBi
b29sIGV4Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
aykKIGJvb2wgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hp
bGRMYXlvdXQoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLSAgICBpZiAoIWZsb3dUaHJlYWQgJiYgIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
bygpKQorICAgIGlmICghZmxvd1RocmVhZCAmJiAhc2hhcGVJbnNpZGVJbmZvKCkpCiAjZWxzZQog
ICAgIGlmICghZmxvd1RocmVhZCkKICNlbmRpZgotICAgICAgICByZXR1cm4gZXhjbHVzaW9uSW5m
b1JlcXVpcmVzUmVsYXlvdXQodGhpcyk7CisgICAgICAgIHJldHVybiBzaGFwZUluZm9SZXF1aXJl
c1JlbGF5b3V0KHRoaXMpOwogCiAgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBsb2dpY2FsSGVp
Z2h0KCk7CiAgICAgTGF5b3V0VW5pdCBvbGRUb3AgPSBsb2dpY2FsVG9wKCk7CkBAIC0xNTA0LDcg
KzE1MDMsNyBAQCBib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0Jl
Zm9yZUNoaWxkTGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqCiAgICAgdXBkYXRlTG9naWNhbEhlaWdo
dCgpOwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgY29tcHV0ZUV4Y2x1c2lvblNoYXBl
U2l6ZSgpOworICAgIGNvbXB1dGVTaGFwZVNpemUoKTsKICNlbmRpZgogCiAgICAgLy8gU2V0IG91
ciBzdGFydCBhbmQgZW5kIHJlZ2lvbnMuIE5vIHJlZ2lvbnMgYWJvdmUgb3IgYmVsb3cgdXMgd2ls
bCBiZSBjb25zaWRlcmVkIGJ5IG91ciBjaGlsZHJlbi4gVGhleSBhcmUKQEAgLTE1MTQsMTYgKzE1
MTMsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZv
cmVDaGlsZExheW91dChSZW5kZXJGbG93VGhyZWFkKgogICAgIHNldExvZ2ljYWxIZWlnaHQob2xk
SGVpZ2h0KTsKICAgICBzZXRMb2dpY2FsVG9wKG9sZFRvcCk7CiAgICAgCi0gICAgcmV0dXJuIGV4
Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOworICAgIHJldHVybiBzaGFwZUluZm9S
ZXF1aXJlc1JlbGF5b3V0KHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi12b2lk
IFJlbmRlckJsb2NrOjpjb21wdXRlRXhjbHVzaW9uU2hhcGVTaXplKCkKK3ZvaWQgUmVuZGVyQmxv
Y2s6OmNvbXB1dGVTaGFwZVNpemUoKQogewotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyog
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykgeworICAgIFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+c2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYg
KHNoYXBlSW5zaWRlSW5mbykgewogICAgICAgICBib29sIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0
UmVzb2x2YWJsZSA9IHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlRnJvbUJsb2Nr
KHRoaXMsIGZhbHNlKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZXRTaGFw
ZVNpemUobG9naWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2YWJsZSA/
IGxvZ2ljYWxIZWlnaHQoKSA6IExheW91dFVuaXQoKSk7CisgICAgICAgIHNoYXBlSW5zaWRlSW5m
by0+c2V0U2hhcGVTaXplKGxvZ2ljYWxXaWR0aCgpLCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJl
c29sdmFibGUgPyBsb2dpY2FsSGVpZ2h0KCkgOiBMYXlvdXRVbml0KCkpOwogICAgIH0KIH0KICNl
bmRpZgpAQCAtMTUzMiw3ICsxNTMxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9u
c0FuZEV4Y2x1c2lvbnNBZnRlckNoaWxkTGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqIGYKIHsKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAvLyBBIHByZXZpb3VzIHNpYmxpbmcgaGFzIGNoYW5n
ZWQgZGltZW5zaW9uLCBzbyB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZSBzaGFwZSB3aXRoIHRoZSBj
b250ZW50Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBs
YXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNo
YXBlSW5zaWRlSW5mbyA9IGxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAgIGlmIChoZWlnaHRD
aGFuZ2VkICYmIHNoYXBlSW5zaWRlSW5mbykKICAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5kaXJ0
eVNoYXBlU2l6ZSgpOwogI2VuZGlmCkBAIC00MDExLDEwICs0MDEwLDEwIEBAIFJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRl
ckJveCogbykKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBvLT5leGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvKCk7CisgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gby0+c2hhcGVPdXRz
aWRlSW5mbygpOwogICAgIGlmIChzaGFwZU91dHNpZGUpIHsKICAgICAgICAgc2hhcGVPdXRzaWRl
LT5zZXRTaGFwZVNpemUoby0+bG9naWNhbFdpZHRoKCksIG8tPmxvZ2ljYWxIZWlnaHQoKSk7Ci0g
ICAgICAgIC8vIFRoZSBDU1MgRXhjbHVzaW9ucyBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCB0aGUg
bWFyZ2lucyBhcmUgaWdub3JlZAorICAgICAgICAvLyBUaGUgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9uIHNheXMgdGhhdCB0aGUgbWFyZ2lucyBhcmUgaWdub3JlZAogICAgICAgICAvLyB3aGVuIGEg
ZmxvYXQgaGFzIGEgc2hhcGUgb3V0c2lkZS4KICAgICAgICAgc2V0TG9naWNhbFdpZHRoRm9yRmxv
YXQobmV3T2JqLCBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbFdpZHRoKCkpOwogICAgIH0gZWxz
ZQpAQCAtNDA5Miw3ICs0MDkxLDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmNvbXB1dGVM
b2dpY2FsTG9jYXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogZmwKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldDsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBvZmZz
ZXQuCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgLy8gRklYTUUgQnVnIDEwMjk0ODogVGhp
cyBvbmx5IHdvcmtzIGZvciBzaGFwZSBvdXRzaWRlIGRpcmVjdGx5IHNldCBvbiB0aGlzIGJsb2Nr
LgotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUlu
Zm8gPSB0aGlzLT5zaGFwZUluc2lkZUluZm8oKTsKICAgICAvLyBGSVhNRSBCdWcgMTAyODQ2OiBU
YWtlIGludG8gYWNjb3VudCB0aGUgaGVpZ2h0IG9mIHRoZSBjb250ZW50LiBUaGUgb2Zmc2V0IHNo
b3VsZCBiZQogICAgIC8vIGVxdWFsIHRvIHRoZSBtYXhpbXVtIHNlZ21lbnQgbGVuZ3RoLgogICAg
IGlmIChzaGFwZUluc2lkZUluZm8gJiYgc2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpICYm
IHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKS5zaXplKCkgPT0gMSkgewpAQCAtNDI0Nyw4ICs0
MjQ2LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogCiAgICAgICAg
IHNldExvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgZmxvYXRMb2dpY2FsTG9jYXRp
b24ueSgpKTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYgKGNoaWxkQm94LT5l
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCkpCi0gICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGNoaWxkQm94LT5leGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvKCktPnNoYXBlTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgaWYgKGNoaWxkQm94LT5zaGFw
ZU91dHNpZGVJbmZvKCkpCisgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxv
YXRpbmdPYmplY3QsIGNoaWxkQm94LT5zaGFwZU91dHNpZGVJbmZvKCktPnNoYXBlTG9naWNhbEhl
aWdodCgpKTsKICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVp
Z2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZEJv
eCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZvckNoaWxk
KGNoaWxkQm94KSk7CkBAIC00NDM0LDcgKzQ0MzMsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2Nr
Ojpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRV
bgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0ID0gYWRhcHRlci5sYXN0RmxvYXQoKTsKICAgICAgICAgaWYgKG9mZnNldE1vZGUg
PT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBsYXN0RmxvYXQpIHsKLSAgICAgICAg
ICAgIGlmIChFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0Rmxv
YXQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKSkgeworICAgICAgICAg
ICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVy
ZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpKSB7CiAgICAgICAgICAgICAgICAgc2hhcGVPdXRzaWRl
LT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKGxvZ2ljYWxUb3AgLSBsb2dpY2FsVG9wRm9yRmxvYXQo
bGFzdEZsb2F0KSArIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWln
aHQpOwogICAgICAgICAgICAgICAgIGxlZnQgKz0gc2hhcGVPdXRzaWRlLT5yaWdodFNlZ21lbnRT
aGFwZUJvdW5kaW5nQm94RGVsdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ0OTIsNyArNDQ5MSw3
IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5
b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAg
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBhZGFwdGVyLmxhc3RGbG9hdCgp
OwogICAgICAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0
ICYmIGxhc3RGbG9hdCkgewotICAgICAgICAgICAgaWYgKEV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mbygpKSB7CisgICAgICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVP
dXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKICAg
ICAgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobG9naWNh
bFRvcCAtIGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgc2hhcGVPdXRzaWRlLT5zaGFw
ZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgcmlnaHRGbG9h
dE9mZnNldCArPSBzaGFwZU91dHNpZGUtPmxlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRh
KCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmlu
ZGV4IGQzZGNhM2Y3NTg0MmMwMWM1OGNhY2YxNjFlOTcwNzk5ZmE4Y2FhZGYuLjBhN2Q1OThhYmI0
MTAxMjYzOWI4NGE2ZGE2ODg0Nzg0MzYwOGI1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCkBAIC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0
Lmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCisjaW5jbHVkZSAi
U2hhcGVJbnNpZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0NiwyOCArNDQ2LDI4IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBl
bnN1cmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKQorICAgIFNoYXBlSW5zaWRlSW5mbyogZW5z
dXJlU2hhcGVJbnNpZGVJbmZvKCkKICAgICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0YSB8fCAh
bV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8pCi0gICAgICAgICAgICBzZXRFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8oRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjpjcmVhdGVJbmZvKHRoaXMp
KTsKKyAgICAgICAgICAgIHNldFNoYXBlSW5zaWRlSW5mbyhTaGFwZUluc2lkZUluZm86OmNyZWF0
ZUluZm8odGhpcykpOwogICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUlu
Zm8uZ2V0KCk7CiAgICAgfQogCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNp
b25TaGFwZUluc2lkZUluZm8oKSBjb25zdAorICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNp
ZGVJbmZvKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0YSB8fCAhbV9yYXJl
RGF0YS0+bV9zaGFwZUluc2lkZUluZm8pCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
cmV0dXJuIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpID8gbV9y
YXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8uZ2V0KCkgOiAwOworICAgICAgICByZXR1cm4gU2hh
cGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IodGhpcykgPyBtX3JhcmVEYXRhLT5tX3NoYXBlSW5z
aWRlSW5mby5nZXQoKSA6IDA7CiAgICAgfQotICAgIHZvaWQgc2V0RXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvPiB2YWx1ZSkKKyAgICB2
b2lkIHNldFNoYXBlSW5zaWRlSW5mbyhQYXNzT3duUHRyPFNoYXBlSW5zaWRlSW5mbz4gdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgICAgICBtX3JhcmVEYXRh
ID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2NrUmFyZURhdGEodGhpcykpOwogICAgICAgICBtX3Jh
cmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mbyA9IHZhbHVlOwogICAgIH0KICAgICB2b2lkIG1hcmtT
aGFwZUluc2lkZURlc2NlbmRhbnRzRm9yTGF5b3V0KCk7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKiBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25zdDsKLSAgICBib29s
IGFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSBjb25zdCB7IHJldHVybiAh
aXNJbmxpbmUoKSAmJiAhaXNGbG9hdGluZygpOyB9CisgICAgU2hhcGVJbnNpZGVJbmZvKiBsYXlv
dXRTaGFwZUluc2lkZUluZm8oKSBjb25zdDsKKyAgICBib29sIGFsbG93c1NoYXBlSW5zaWRlSW5m
b1NoYXJpbmcoKSBjb25zdCB7IHJldHVybiAhaXNJbmxpbmUoKSAmJiAhaXNGbG9hdGluZygpOyB9
CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtNTg1LDggKzU4NSw4IEBAIHByb3RlY3RlZDoKIAog
cHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICB2b2lkIGNvbXB1dGVFeGNsdXNp
b25TaGFwZVNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSosIGNvbnN0IEV4Y2x1c2lv
blNoYXBlVmFsdWUqIG9sZEV4Y2x1c2lvblNoYXBlKTsKKyAgICB2b2lkIGNvbXB1dGVTaGFwZVNp
emUoKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29u
c3QgU2hhcGVWYWx1ZSosIGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBlKTsKICNlbmRpZgogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVy
biBjaGlsZHJlbigpOyB9CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3Qq
IHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KQEAgLTc4OSw3
ICs3ODksNyBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgeFBvc2l0aW9uRm9yRmxvYXRJbmNs
dWRpbmdNYXJnaW4oY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdAogICAgIHsKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyAq
c2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8oKTsKKyAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJl
bmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgaWYgKHNoYXBlT3V0c2lkZSkK
ICAgICAgICAgICAgIHJldHVybiBjaGlsZC0+eCgpOwogI2VuZGlmCkBAIC04MDMsNyArODAzLDcg
QEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFy
Z2luKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QKICAgICB7CiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0gICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0
c2lkZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCk7Cisg
ICAgICAgIFNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxkLT5yZW5kZXJlcigp
LT5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgICAgIGlmIChzaGFwZU91dHNpZGUpCiAgICAgICAg
ICAgICByZXR1cm4gY2hpbGQtPnkoKTsKICNlbmRpZgpAQCAtMTA4NCw4ICsxMDg0LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiwgYm9v
bCBoYXNJbmxpbmVDaGlsZCk7CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShM
aW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMs
IHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKTsKICNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKLSAgICB2b2lkIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yRXhjbHVzaW9ucyhFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8qLCBMYXlvdXRVbml0JiwgTGluZUxheW91dFN0YXRlJiwgYm9vbCYp
OwotICAgIGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQo
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCwgTGluZUxheW91dFN0YXRlJiwg
SW5saW5lQmlkaVJlc29sdmVyJiwgRmxvYXRpbmdPYmplY3QqLCBJbmxpbmVJdGVyYXRvciYsIFdv
cmRNZWFzdXJlbWVudHMmKTsKKyAgICB2b2lkIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yU2hhcGVz
KFNoYXBlSW5zaWRlSW5mbyosIExheW91dFVuaXQmLCBMaW5lTGF5b3V0U3RhdGUmLCBib29sJik7
CisgICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChT
aGFwZUluc2lkZUluZm8qLCBMYXlvdXRVbml0LCBMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRp
UmVzb2x2ZXImLCBGbG9hdGluZ09iamVjdCosIElubGluZUl0ZXJhdG9yJiwgV29yZE1lYXN1cmVt
ZW50cyYpOwogI2VuZGlmCiAgICAgY29uc3QgSW5saW5lSXRlcmF0b3ImIHJlc3RhcnRMYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZShMYXlvdXRVbml0IG9sZExvZ2ljYWxIZWlnaHQsIExheW91dFVu
aXQgbmV3TG9naWNhbEhlaWdodCwgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCAgY29uc3QgSW5saW5lSXRlcmF0b3ImKTsKICAg
ICB2b2lkIGxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmKTsKQEAgLTEyOTIs
NyArMTI5Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBSb290SW5saW5lQm94KiBtX2xpbmVCcmVh
a1RvQXZvaWRXaWRvdzsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgT3duUHRyPEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CisgICAgICAgIE93blB0
cjxTaGFwZUluc2lkZUluZm8+IG1fc2hhcGVJbnNpZGVJbmZvOwogI2VuZGlmCiAgICAgICAgIGJv
b2wgbV9zaG91bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdyA6IDE7CiAgICAgICAgIGJvb2wgbV9k
aXNjYXJkTWFyZ2luQmVmb3JlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggZmQ5YzdjOTQ2NWNkNjYxOWQyZDFmOWRk
NzFmMDc2NDdiNGMxMTM2Yi4uNzA0NTk4ZDIwN2ZmNGNkNTIxOGQzYjQ0YTVkMDA5OTQxYzg2MWNl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0
ZXJOYW1lcy5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShTVkcpCkBAIC03NywxNiArNzcsMTYgQEAgc3RhdGljIExheW91dFVuaXQg
bG9naWNhbEhlaWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmly
c3RMaW4KIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3QK
K1NoYXBlSW5zaWRlSW5mbyogUmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5zaWRlSW5mbygpIGNv
bnN0CiB7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB2
aWV3KCktPmxheW91dFN0YXRlKCktPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNo
YXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5z
aGFwZUluc2lkZUluZm8oKTsKIAotICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYmIGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKSAmJiBhbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFy
aW5nKCkpIHsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbyAmJiBmbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCkgJiYgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKSB7CiAgICAgICAgIC8v
IHJlZ2lvbkF0QmxvY2tPZmZzZXQgcmV0dXJucyByZWdpb25zIGxpa2UgYW4gYXJyYXkgZmlyc3Q9
ezAsTi0xfSwgc2Vjb25kPXtOLE0tMX0sIC4uLgogICAgICAgICBMYXlvdXRVbml0IG9mZnNldCA9
IGxvZ2ljYWxIZWlnaHQoKSArIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKHRoaXMsIGZhbHNlKSAtIExh
eW91dFVuaXQoMSk7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9j
a09mZnNldChvZmZzZXQpOwogICAgICAgICBpZiAocmVnaW9uKQotICAgICAgICAgICAgc2hhcGVJ
bnNpZGVJbmZvID0gcmVnaW9uLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAg
ICAgIHNoYXBlSW5zaWRlSW5mbyA9IHJlZ2lvbi0+c2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mbzsKQEAgLTExNCw5ICsxMTQsOSBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBBU1NFUlQoYmxvY2spOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
ICAgICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgICAgICBp
ZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKQotICAgICAgICAgICAgbV9zZWdtZW50ID0gZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOworICAgICAgICBTaGFwZUlu
c2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5m
bygpOworICAgICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKQorICAgICAgICAgICAgbV9zZWdtZW50
ID0gc2hhcGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOwogI2VuZGlmCiAgICAgICAgIHVw
ZGF0ZUF2YWlsYWJsZVdpZHRoKCk7CiAgICAgfQpAQCAtMTk2LDIxICsxOTYsMjEgQEAgaW5saW5l
IHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQo
UmVuZGVyQmxvY2s6OkZsb2EKICAgICAvLyB3aGVuIHdlIGFkZCBhIHN1YnNlcXVlbnQgZmxvYXQg
b24gdGhlIHNhbWUgbGluZSwgd2UgbmVlZCB0byB1bmRvIHRoZSBzaGFwZSBkZWx0YSBpbiBvcmRl
ciB0byBwb3NpdGlvbgogICAgIC8vIGJhc2VkIG9uIHRoZSBib3VuZGluZyBib3guIEluIG9yZGVy
IHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9i
amVjdCBsaXN0IHRvIGZpbmQKICAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBp
cyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvKiBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CisgICAgU2hhcGVPdXRzaWRlSW5m
byogbGFzdFNoYXBlT3V0c2lkZUluZm8gPSAwOwogICAgIGNvbnN0IFJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CiAgICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAg
Zm9yICgtLWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkgewogICAgICAgICBSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9ICppdDsKICAgICAgICAgaWYgKGxhc3RGbG9hdCAhPSBu
ZXdGbG9hdCAmJiBsYXN0RmxvYXQtPnR5cGUoKSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7Ci0gICAg
ICAgICAgICBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICAgICAgbGFzdFNoYXBlT3V0c2lkZUlu
Zm8gPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAg
ICAgIGlmIChsYXN0U2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgICAgICBsYXN0U2hhcGVP
dXRzaWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0
KCkgLSBtX2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSArIGxhc3RTaGFwZU91
dHNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9j
aywgbV9pc0ZpcnN0TGluZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3
RmxvYXQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAgICBTaGFw
ZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJlbmRlcmVyKCktPnNo
YXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgc2hh
cGVPdXRzaWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVp
Z2h0KCkgLSBtX2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpICsgc2hhcGVPdXRz
aWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKG1fYmxvY2ss
IG1faXNGaXJzdExpbmUpKTsKICNlbmRpZgpAQCAtMTAzNSwxMCArMTAzNSwxMCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5s
aW5lQm94KiBsaW5lQm94LAogICAgIHVwZGF0ZUxvZ2ljYWxJbmxpbmVQb3NpdGlvbnModGhpcywg
bGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgs
IGlzRmlyc3RMaW5lLCBzaG91bGRJbmRlbnRUZXh0LCAwKTsKICAgICBib29sIG5lZWRzV29yZFNw
YWNpbmc7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8oKTsKLSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hh
cGVJbnNpZGVJbmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5z
aWRlSW5mbyAmJiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAgICAgICAgQmlk
aVJ1biogc2VnbWVudFN0YXJ0ID0gZmlyc3RSdW47Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRMaXN0
JiBzZWdtZW50cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsKKyAgICAg
ICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50
cygpOwogICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1heDxmbG9hdD4ocm91bmRUb0ludChz
ZWdtZW50c1swXS5sb2dpY2FsTGVmdCksIGxpbmVMb2dpY2FsTGVmdCk7CiAgICAgICAgIGZsb2F0
IGxvZ2ljYWxSaWdodCA9IG1pbjxmbG9hdD4oZmxvb3JUb0ludChzZWdtZW50c1swXS5sb2dpY2Fs
UmlnaHQpLCBsaW5lTG9naWNhbFJpZ2h0KTsKICAgICAgICAgZmxvYXQgc3RhcnRMb2dpY2FsTGVm
dCA9IGxvZ2ljYWxMZWZ0OwpAQCAtMTM1OSwxMyArMTM1OSwxMyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgY29uc3RydWN0QmlkaVJ1bnNGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgSW5s
aW5lQmlkaQogICAgIFVOVVNFRF9QQVJBTShibG9jayk7CiAgICAgY29uc3RydWN0QmlkaVJ1bnNG
b3JTZWdtZW50KHRvcFJlc29sdmVyLCBiaWRpUnVucywgZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICNlbHNlCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvKCk7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgIWV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvID0gYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwor
ICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRz
KCkpIHsKICAgICAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KHRvcFJlc29sdmVyLCBi
aWRpUnVucywgZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNl
Z21lbnRSYW5nZXMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5nZXMoKTsK
KyAgICBjb25zdCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gc2hhcGVJbnNpZGVJ
bmZvLT5zZWdtZW50UmFuZ2VzKCk7CiAgICAgQVNTRVJUKHNlZ21lbnRSYW5nZXMuc2l6ZSgpKTsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudFJhbmdlcy5zaXplKCk7IGkrKykg
ewpAQCAtMTYzMSwyNiArMTYzMSwyNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGZpcnN0UG9zaXRp
dmVXaWR0aChjb25zdCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogICAgIHJl
dHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0TG9naWNhbExpbmVU
b3AoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIElu
bGluZUl0ZXJhdG9yIHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJl
bWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0
TG9naWNhbExpbmVUb3AoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8sIElubGluZUl0
ZXJhdG9yIHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJlbWVudHMm
IHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8g
fHwgZW5kICE9IHN0YXJ0KQorICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8IGVuZCAhPSBzdGFy
dCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBmbG9hdCBtaW5XaWR0aCA9IGZpcnN0UG9zaXRp
dmVXaWR0aCh3b3JkTWVhc3VyZW1lbnRzKTsKICAgICBBU1NFUlQobWluV2lkdGggfHwgd29yZE1l
YXN1cmVtZW50cy5pc0VtcHR5KCkpOwotICAgIGlmIChtaW5XaWR0aCA+IDAgJiYgZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLT5hZGp1c3RMb2dpY2FsTGluZVRvcChtaW5XaWR0aCkpCi0gICAgICAg
IHJldHVybiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxvZ2ljYWxMaW5lVG9wKCk7CisgICAg
aWYgKG1pbldpZHRoID4gMCAmJiBzaGFwZUluc2lkZUluZm8tPmFkanVzdExvZ2ljYWxMaW5lVG9w
KG1pbldpZHRoKSkKKyAgICAgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVU
b3AoKTsKIAotICAgIHJldHVybiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNh
bEJvdHRvbSgpOworICAgIHJldHVybiBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbEJvdHRv
bSgpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1
c2lvbnMoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8s
IExheW91dFVuaXQmIGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgYm9vbCYgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSkKK3ZvaWQgUmVuZGVyQmxv
Y2s6OnVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yU2hhcGVzKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJ
bnNpZGVJbmZvLCBMYXlvdXRVbml0JiBhYnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUsIGJvb2wmIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUpCiB7CiAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gdGhpcy0+bG9naWNhbEhlaWdodCgpOwogICAg
IFJlbmRlclJlZ2lvbiogY3VycmVudFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNh
bEhlaWdodCk7CiAgICAgaWYgKGN1cnJlbnRSZWdpb24pCi0gICAgICAgIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmICgh
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKQorICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBsYXlv
dXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgTGF5b3V0VW5pdCBsaW5lVG9wID0gbG9naWNhbEhlaWdodCArIGFic29s
dXRlTG9naWNhbFRvcDsKQEAgLTE2NTgsMTggKzE2NTgsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6
dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byogZXgKIAogICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpIHsKICAgICAgICAgUmVu
ZGVyUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChsb2dpY2FsSGVpZ2h0
ICsgbGluZUhlaWdodCAtIExheW91dFVuaXQoMSkpOwotICAgICAgICBsaW5lVG9wICs9IGV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwor
ICAgICAgICBsaW5lVG9wICs9IHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFk
ZGluZ0JlZm9yZSgpOwogICAgICAgICAvLyBDb250ZW50IGluIGEgZmxvdyB0aHJlYWQgaXMgcmVs
YXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGhyZWFkLCBidXQgdGhlIHNoYXBlIGNhbGN1
bGF0aW9uIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByZWdpb24uCiAgICAgICAg
IGlmIChjdXJyZW50UmVnaW9uID09IG5leHRSZWdpb24pCiAgICAgICAgICAgICBsaW5lVG9wIC09
IGN1cnJlbnRSZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpOwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBCdWcgOTUzNjE6IEl0IGlzIHBvc3NpYmxlIGZvciBhIGxpbmUgdG8g
Z3JvdyBiZXlvbmQgbGluZUhlaWdodCwgaW4gd2hpY2ggY2FzZSB0aGVzZSBzZWdtZW50cyBtYXkg
YmUgaW5jb3JyZWN0LgotICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+Y29tcHV0ZVNlZ21l
bnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKKyAgICBzaGFwZUluc2lkZUluZm8tPmNv
bXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CiAKICAgICAvLyBUaGUg
b3ZlcmZsb3cgc2hvdWxkIGJlIHB1c2hlZCBiZWxvdyB0aGUgY29udGVudCBib3gKLSAgICBMYXlv
dXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLT5zaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpOwotICAgIGlmICghZXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSAmJiAhbGluZU92ZXJmbG93c0Zy
b21TaGFwZUluc2lkZSAmJiBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCkgeworICAgIExheW91
dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgPSBzaGFwZUluc2lkZUluZm8tPnNoYXBl
Q29udGFpbmluZ0Jsb2NrSGVpZ2h0KCk7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8tPmxpbmVX
aXRoaW5TaGFwZUJvdW5kcygpICYmICFsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlICYmIHNo
YXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7CiAgICAgICAgIGxpbmVPdmVyZmxvd3NGcm9tU2hh
cGVJbnNpZGUgPSB0cnVlOwogICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQgPSBz
aGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodDsKIApAQCAtMTY4MSw5ICsxNjgxLDkgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyogZXgKICAgICAgICAgICAgIG5ld0xvZ2ljYWxIZWlnaHQgPSBsb2dpY2Fs
SGVpZ2h0ICsgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgLSBsaW5lVG9wIC0gY3VycmVudFJl
Z2lvbi0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogCiAgICAgICAgICAgICBSZW5kZXJSZWdp
b24qIG5leHRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG5ld0xvZ2ljYWxIZWlnaHQpOwot
ICAgICAgICAgICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBuZXh0U2hhcGVJbmZvID0gMDsK
KyAgICAgICAgICAgIFNoYXBlSW5zaWRlSW5mbyogbmV4dFNoYXBlSW5mbyA9IDA7CiAgICAgICAg
ICAgICBpZiAobmV4dFJlZ2lvbikKLSAgICAgICAgICAgICAgICBuZXh0U2hhcGVJbmZvID0gbmV4
dFJlZ2lvbi0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgICAgICAgICAgbmV4
dFNoYXBlSW5mbyA9IG5leHRSZWdpb24tPnNoYXBlSW5zaWRlSW5mbygpOwogCiAgICAgICAgICAg
ICAvLyBUaGUgb3ZlcmZsb3cgZmxvd3MgaW50byBhbm90aGVyIHJlZ2lvbiB3aXRoIHNoYXBlLWlu
c2lkZQogICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWdpb24gIT0gbmV4dFJlZ2lvbiAmJiBuZXh0
U2hhcGVJbmZvKSB7CkBAIC0xNjkyLDcgKzE2OTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRh
dGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBl
eAogICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbmV4dFNoYXBlSW5mby0+c2hh
cGVMb2dpY2FsVG9wKCkgLSBuZXh0UmVnaW9uLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAg
ICAgICAgICAgICAgICAgbmV4dFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShvZmZz
ZXQsIGxpbmVIZWlnaHQpOwogCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvID0gbmV4dFNoYXBlSW5mbzsKKyAgICAgICAgICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBu
ZXh0U2hhcGVJbmZvOwogICAgICAgICAgICAgICAgIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNp
ZGUgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcwMCw5ICsxNzAwLDkg
QEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXgKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6
OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBMYXlvdXRVbml0IGFic29s
dXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5lQmlkaVJl
c29sdmVyJiByZXNvbHZlciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIElubGluZUl0ZXJhdG9yJiBlbmQsIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVu
dHMpCitib29sIFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWln
aHRJZk5lZWRlZChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywgTGF5b3V0VW5pdCBh
YnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lLCBJbmxpbmVJdGVyYXRvciYgZW5kLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3Vy
ZW1lbnRzKQogewotICAgIExheW91dFVuaXQgYWRqdXN0ZWRMb2dpY2FsTGluZVRvcCA9IGFkanVz
dExvZ2ljYWxMaW5lVG9wKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgcmVzb2x2ZXIucG9zaXRp
b24oKSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKTsKKyAgICBMYXlvdXRVbml0IGFkanVzdGVkTG9n
aWNhbExpbmVUb3AgPSBhZGp1c3RMb2dpY2FsTGluZVRvcChzaGFwZUluc2lkZUluZm8sIHJlc29s
dmVyLnBvc2l0aW9uKCksIGVuZCwgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgaWYgKCFhZGp1c3Rl
ZExvZ2ljYWxMaW5lVG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3MjksMTkgKzE3
MjksMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGlu
ZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQogICAgIExheW91dFVuaXQgYWJzb2x1dGVMb2dpY2FsVG9wOwotICAgIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvKCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykgewotICAg
ICAgICBBU1NFUlQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwg
YWxsb3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKTsKLSAgICAgICAgaWYgKGV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0U2hhcGVJ
bnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbykgeworICAgICAgICBBU1NFUlQo
c2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzU2hhcGVJbnNpZGVJbmZv
U2hhcmluZygpKTsKKyAgICAgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5zaGFwZUlu
c2lkZUluZm8oKSkgewogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMDI4NDogSWYgc3Vic2Vx
dWVudCBMYXlvdXRTdGF0ZXMgYXJlIHB1c2hlZCwgd2Ugd2lsbCBoYXZlIHRvIGFkZAogICAgICAg
ICAgICAgLy8gdGhlaXIgb2Zmc2V0cyBmcm9tIHRoZSBvcmlnaW5hbCBzaGFwZS1pbnNpZGUgY29u
dGFpbmVyLgogICAgICAgICAgICAgYWJzb2x1dGVMb2dpY2FsVG9wID0gbG9naWNhbFRvcCgpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIEJlZ2luIGxheW91dCBhdCB0aGUgbG9naWNhbCB0b3Agb2Yg
b3VyIHNoYXBlIGluc2lkZS4KLSAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQoKSArIGFic29sdXRl
TG9naWNhbFRvcCA8IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkp
IHsKLSAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkgLSBhYnNvbHV0ZUxvZ2ljYWxUb3A7CisgICAg
ICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgKyBhYnNvbHV0ZUxvZ2ljYWxUb3AgPCBzaGFwZUluc2lk
ZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQgPSBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpIC0gYWJzb2x1dGVM
b2dpY2FsVG9wOwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkKLSAg
ICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+
b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworICAgICAgICAgICAgICAgIGxvZ2lj
YWxIZWlnaHQgLT0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCk7CiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTc2OSw3ICsxNzY5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5s
aW4KICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAo
Y29udGFpbnNGbG9hdHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpIDogMDsK
IAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICB1cGRhdGVMaW5lQm91bmRhcmllc0Zv
ckV4Y2x1c2lvbnMoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2ljYWxUb3As
IGxheW91dFN0YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKTsKKyAgICAgICAgdXBk
YXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMoc2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2lj
YWxUb3AsIGxheW91dFN0YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKTsKICNlbmRp
ZgogICAgICAgICBXb3JkTWVhc3VyZW1lbnRzIHdvcmRNZWFzdXJlbWVudHM7CiAgICAgICAgIGVu
ZCA9IGxpbmVCcmVha2VyLm5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGxheW91dFN0YXRlLmxpbmVJ
bmZvKCksIHJlbmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1
dGl2ZUh5cGhlbmF0ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CkBAIC0xNzg1LDcgKzE3ODUs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLSAgICAgICAgaWYgKGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdo
dElmTmVlZGVkKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dpY2FsVG9wLCBs
YXlvdXRTdGF0ZSwgcmVzb2x2ZXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGVuZCwgd29y
ZE1lYXN1cmVtZW50cykpCisgICAgICAgIGlmIChhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2lj
YWxIZWlnaHRJZk5lZWRlZChzaGFwZUluc2lkZUluZm8sIGFic29sdXRlTG9naWNhbFRvcCwgbGF5
b3V0U3RhdGUsIHJlc29sdmVyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBlbmQsIHdvcmRN
ZWFzdXJlbWVudHMpKQogICAgICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICAgICAgQVNT
RVJUKGVuZCAhPSByZXNvbHZlci5wb3NpdGlvbigpKTsKQEAgLTI3MzgsMjkgKzI3MzgsMjkgQEAg
SW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2wKICNpZiAhRU5BQkxFKENTU19TSEFQRVMpCiAgICAgcmV0
dXJuIG5leHRTZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywg
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdv
cmRNZWFzdXJlbWVudHMpOwogI2Vsc2UKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbV9ibG9j
ay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CiAKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyB8fCAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5saW5lT3ZlcmxhcHNTaGFwZUJv
dW5kcygpKQorICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8tPmxp
bmVPdmVybGFwc1NoYXBlQm91bmRzKCkpCiAgICAgICAgIHJldHVybiBuZXh0U2VnbWVudEJyZWFr
KHJlc29sdmVyLCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKIAog
ICAgIC8vIEluIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlIHdlIGhhdmUgdG8gdXNlIGxpbmVP
dmVybGFwc1NoYXBlQm91bmRzKCkgdG8gZGV0ZXJtaW5lIHRoZSBsaW5lIHNlZ21lbnRzIHNpbmNl
IHNoYXBlLW91dHNpZGUncyBjb2RlcGF0aHMgdXNlcyB0aGUgc2FtZSBjb2RlIHRvIGRldGVybWlu
ZSBpdHMgc2VnbWVudHMuIFRoZSBsaW5lIGNvbnRhaW5pbmcgaXMgbm90IGEgcmVxdWlyZW1lbnQg
Zm9yIHNoYXBlLW91dHNpZGUsCiAgICAgLy8gc28gaW4gdGhpcyBjYXNlIHdlIGNhbiBlbmQgdXAg
d2l0aCBzb21lIGV4dHJhIHNlZ21lbnRzIGZvciB0aGUgb3ZlcmZsb3dpbmcgY29udGVudCwgYnV0
IHdlIGRvbid0IHdhbnQgdG8gYXBwbHkgdGhlIHNlZ21lbnRzIGZvciB0aGUgb3ZlcmZsb3dpbmcg
Y29udGVudCwgc28gd2UgbmVlZCB0byByZXNldCBpdC4KLSAgICBpZiAoIW1fYmxvY2stPmZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKSAmJiAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5saW5l
V2l0aGluU2hhcGVCb3VuZHMoKSkgewotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8t
PmNsZWFyU2VnbWVudHMoKTsKKyAgICBpZiAoIW1fYmxvY2stPmZsb3dUaHJlYWRDb250YWluaW5n
QmxvY2soKSAmJiAhc2hhcGVJbnNpZGVJbmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSkgewor
ICAgICAgICBzaGFwZUluc2lkZUluZm8tPmNsZWFyU2VnbWVudHMoKTsKICAgICAgICAgcmV0dXJu
IG5leHRTZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRN
ZWFzdXJlbWVudHMpOwogICAgIH0KIAogICAgIElubGluZUl0ZXJhdG9yIGVuZCA9IHJlc29sdmVy
LnBvc2l0aW9uKCk7CiAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOwogCi0gICAgaWYg
KCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKKyAgICBpZiAoIXNo
YXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgewogICAgICAgICBlbmQgPSBuZXh0U2VnbWVu
dEJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRz
KTsKICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKG9s
ZEVuZCk7CiAgICAgICAgIHJldHVybiBvbGRFbmQ7CiAgICAgfQogCi0gICAgY29uc3QgU2VnbWVu
dExpc3QmIHNlZ21lbnRzID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOwot
ICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBleGNsdXNpb25TaGFwZUluc2lk
ZUluZm8tPnNlZ21lbnRSYW5nZXMoKTsKKyAgICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMg
PSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCk7CisgICAgU2VnbWVudFJhbmdlTGlzdCYgc2Vn
bWVudFJhbmdlcyA9IHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21lbnRzLnNpemUoKSAmJiAhZW5kLmF0RW5kKCk7IGkr
KykgewogICAgICAgICBJbmxpbmVJdGVyYXRvciBzZWdtZW50U3RhcnQgPSByZXNvbHZlci5wb3Np
dGlvbigpOwpAQCAtMzM5OCw3ICszMzk4LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6
OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmUKIAog
IGVuZDoKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8qIHNoYXBlSW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
OworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbmZvID0gbV9ibG9jay0+bGF5b3V0U2hhcGVJ
bnNpZGVJbmZvKCk7CiAgICAgYm9vbCBzZWdtZW50QWxsb3dzT3ZlcmZsb3cgPSAhc2hhcGVJbmZv
IHx8ICFzaGFwZUluZm8tPmhhc1NlZ21lbnRzKCk7CiAjZWxzZQogICAgIGJvb2wgc2VnbWVudEFs
bG93c092ZXJmbG93ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
aW5kZXggMTE0ZGY1YjBiMjYyNzkyZjFiOTNkNzY5NDkxOWFiNTZhMmYyNTExZS4uMjdjNDZlZjAx
NDBjMjc0NTNmYzZjNjY2NjE2ODBhNGFlMjViYjE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFJlbmRlckJveDo6d2lsbEJl
RGVzdHJveWVkKCkKICAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRh
bnRJZk5lZWRlZCh0aGlzKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CisgICAgU2hhcGVPdXRzaWRlSW5m
bzo6cmVtb3ZlSW5mbyh0aGlzKTsKICNlbmRpZgogCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OndpbGxCZURlc3Ryb3llZCgpOwpAQCAtMzE1LDIyICszMTUsMjIgQEAgdm9pZCBSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICB1cGRhdGVFeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShzdHlsZSgpLT5zaGFwZU91dHNp
ZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVPdXRzaWRlKCkgOiAwKTsKKyAgICB1cGRh
dGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShzdHlsZSgpLT5zaGFwZU91dHNpZGUo
KSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVPdXRzaWRlKCkgOiAwKTsKICNlbmRpZgogfQog
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi12b2lkIFJlbmRlckJveDo6dXBkYXRlRXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1
ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNp
ZGUpCit2b2lkIFJlbmRlckJveDo6dXBkYXRlU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFu
Z2UoY29uc3QgU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRT
aGFwZU91dHNpZGUpCiB7CiAgICAgLy8gRklYTUU6IEEgZnV0dXJlIG9wdGltaXphdGlvbiB3b3Vs
ZCBkbyBhIGRlZXAgY29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuIChidWcgMTAwODExKQogICAgIGlm
IChzaGFwZU91dHNpZGUgPT0gb2xkU2hhcGVPdXRzaWRlKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoc2hhcGVPdXRzaWRlKSB7Ci0gICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8q
IGV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gPSBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjpl
bnN1cmVJbmZvKHRoaXMpOwotICAgICAgICBleGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLT5kaXJ0
eVNoYXBlU2l6ZSgpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZv
ID0gU2hhcGVPdXRzaWRlSW5mbzo6ZW5zdXJlSW5mbyh0aGlzKTsKKyAgICAgICAgc2hhcGVPdXRz
aWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsKICAgICB9IGVsc2UKLSAgICAgICAgRXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKKyAgICAgICAgU2hhcGVPdXRzaWRl
SW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKaW5kZXggOWFiZjZiNDgwYWY3ZTM4ZjZhODdiZDQ0NWMwYTczOTBjNDA0MDdm
OC4uYTdmYzFlY2VjZmQzYzgwNjFjYTFiNmRmMGMwM2Q3NGM5OGI2NjkxZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ck92ZXJmbG93LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgiCisjaW5jbHVkZSAi
U2hhcGVPdXRzaWRlSW5mby5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3
Nyw5ICs1NzcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTYW1lRGlyZWN0aW9uQXMoY29uc3Qg
UmVuZGVyQm94KiBvYmplY3QpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigpID09
IG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7IH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8oKSBjb25zdAorICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8oKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYg
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpID8gRXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mbzo6aW5mbyh0aGlzKSA6IDA7CisgICAgICAgIHJldHVybiBpc0Zsb2F0
aW5nV2l0aFNoYXBlT3V0c2lkZSgpICYmIFNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcih0
aGlzKSA/IFNoYXBlT3V0c2lkZUluZm86OmluZm8odGhpcykgOiAwOwogICAgIH0KICNlbmRpZgog
CkBAIC02MjQsNyArNjI0LDcgQEAgcHJvdGVjdGVkOgogIAogcHJpdmF0ZToKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKLSAgICB2b2lkIHVwZGF0ZUV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9BZnRl
clN0eWxlQ2hhbmdlKGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwgY29u
c3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKTsKKyAgICB2b2lkIHVwZGF0
ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBl
T3V0c2lkZSwgY29uc3QgU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKTsKICNlbmRpZgogCiAg
ICAgYm9vbCBmaXhlZEVsZW1lbnRMYXlzT3V0UmVsYXRpdmVUb0ZyYW1lKEZyYW1lKiwgRnJhbWVW
aWV3KikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAppbmRleCA2MWJiMWM2MzcwYzA5YzhlZDZlYTU1ZmQxZTJhNDY0MjI1Zjcy
Mzk1Li5hYmFkNWI3MmEzOTQyN2EzMDQ4ZTUxYmY0OWFmY2ZhNTNmMDQxZTVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTYy
Nyw3ICs2MjcsNyBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE9mZnNl
dCgpIGNvbnN0CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBpZiAoaXNCb3goKSAmJiBp
c0Zsb2F0aW5nKCkpCi0gICAgICAgIGlmIChFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGUgPSB0b1JlbmRlckJveCh0aGlzKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygp
KQorICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gdG9SZW5kZXJC
b3godGhpcyktPnNoYXBlT3V0c2lkZUluZm8oKSkKICAgICAgICAgICAgIG9mZnNldCAtPSBzaGFw
ZU91dHNpZGUtPnNoYXBlTG9naWNhbE9mZnNldCgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDg4YTA4Yjg4YTM1NmRkNzk3NDBlNmFkYWQ3OTM1MzVl
ZTIxZWQ5NjUuLmFlNTQzNGZjNTk3ZThhNGJmZDY5MDRjMzQxM2IwNmJiYzU2ZDZkZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMjQ5LDggKzI0OSw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IG1fbGF5b3V0U3RhdGUtPmlz
UGFnaW5hdGVkKCkgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKSB8fCByZW5kZXJlci0+Zmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpCiAgICAgICAgICAgICB8fCBtX2xheW91dFN0YXRlLT5saW5l
R3JpZCgpIHx8IChyZW5kZXJlci0+c3R5bGUoKS0+bGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVHcmlkKCkgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkpCiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0gICAgICAgICAgICB8fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAm
JiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkpCi0g
ICAgICAgICAgICB8fCAobV9sYXlvdXRTdGF0ZS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkg
JiYgcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9jayhyZW5kZXJlcikt
PmFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKKyAgICAgICAgICAgIHx8
IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5z
aGFwZUluc2lkZUluZm8oKSkKKyAgICAgICAgICAgIHx8IChtX2xheW91dFN0YXRlLT5zaGFwZUlu
c2lkZUluZm8oKSAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICF0b1JlbmRlckJsb2Nr
KHJlbmRlcmVyKS0+YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQogI2VuZGlmCiAgICAg
ICAgICAgICApIHsKICAgICAgICAgICAgIHB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhy
ZWFkKHJlbmRlcmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvUG9seWdvblNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9s
eWdvblNoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjEyNGZkNTYwNzMzNTYzYjRhMGM4NzhhMzg2ZmQ0
NDBjYTUyODMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9Qb2x5Z29uU2hhcGUuY3BwCkBAIC0wLDAgKzEsNTEyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
CisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgorCisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEVkZ2VJbnRlcnNlY3Rp
b25UeXBlIHsKKyAgICBOb3JtYWwsCisgICAgVmVydGV4TWluWSwKKyAgICBWZXJ0ZXhNYXhZLAor
ICAgIFZlcnRleFlCb3RoCit9OworCitzdHJ1Y3QgRWRnZUludGVyc2VjdGlvbiB7CisgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZTsKKyAgICBGbG9hdFBvaW50IHBvaW50OworICAgIEVk
Z2VJbnRlcnNlY3Rpb25UeXBlIHR5cGU7Cit9OworCitzdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRT
aWRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiAoKHBvaW50LngoKSAtIHZl
cnRleDEueCgpKSAqICh2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkgLSAoKHZlcnRleDIueCgp
IC0gdmVydGV4MS54KCkpICogKHBvaW50LnkoKSAtIHZlcnRleDEueSgpKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1JlZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4
LCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgp
Cit7CisgICAgcmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkg
PCAwOworfQorCitzdGF0aWMgYm9vbCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBv
bHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0
KQoreworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CisK
KyAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4
MSgpOworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKKyAg
ICBmbG9hdCBkeSA9IHZlcnRleDIueSgpIC0gdmVydGV4MS55KCk7CisKKyAgICBmbG9hdCBpbnRl
cnNlY3Rpb25YOworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7CisK
KyAgICBpZiAoIWR5KSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsK
KyAgICAgICAgaW50ZXJzZWN0aW9uWCA9IGVkZ2UubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9
PSBlZGdlLm1pblkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsK
KyAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZl
cnRleDEueCgpIDogdmVydGV4Mi54KCk7CisgICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgp
KSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNYXhZOworICAgICAgICBpbnRl
cnNlY3Rpb25YID0gKHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2
ZXJ0ZXgyLngoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9y
bWFsOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRl
eDIueCgpIC0gdmVydGV4MS54KCkpIC8gZHkpICsgdmVydGV4MS54KCk7CisgICAgfQorCisgICAg
cmVzdWx0LmVkZ2UgPSBlZGdlUG9pbnRlcjsKKyAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlv
blR5cGU7CisgICAgcmVzdWx0LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBpbndhcmRFZGdlTm9ybWFs
KGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UpCit7CisgICAgRmxvYXRTaXplIGVkZ2VEZWx0
YSA9IGVkZ2UudmVydGV4MigpIC0gZWRnZS52ZXJ0ZXgxKCk7CisgICAgaWYgKCFlZGdlRGVsdGEu
d2lkdGgoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgoZWRnZURlbHRhLmhlaWdodCgpID4g
MCA/IC0xIDogMSksIDApOworICAgIGlmICghZWRnZURlbHRhLmhlaWdodCgpKQorICAgICAgICBy
ZXR1cm4gRmxvYXRTaXplKDAsIChlZGdlRGVsdGEud2lkdGgoKSA+IDAgPyAxIDogLTEpKTsKKyAg
ICBmbG9hdCBlZGdlTGVuZ3RoID0gZWRnZURlbHRhLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgcmV0
dXJuIEZsb2F0U2l6ZSgtZWRnZURlbHRhLmhlaWdodCgpIC8gZWRnZUxlbmd0aCwgZWRnZURlbHRh
LndpZHRoKCkgLyBlZGdlTGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFNpemUgb3V0
d2FyZEVkZ2VOb3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKK3sKKyAgICByZXR1
cm4gLWlud2FyZEVkZ2VOb3JtYWwoZWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBl
bmRBcmMoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNlcywgY29uc3QgRmxvYXRQb2ludCYgYXJj
Q2VudGVyLCBmbG9hdCBhcmNSYWRpdXMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0QXJjVmVydGV4
LCBjb25zdCBGbG9hdFBvaW50JiBlbmRBcmNWZXJ0ZXgsIGJvb2wgcGFkZGluZykKK3sKKyAgICBm
bG9hdCBzdGFydEFuZ2xlID0gYXRhbjIoc3RhcnRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnko
KSwgc3RhcnRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7CisgICAgZmxvYXQgZW5kQW5n
bGUgPSBhdGFuMihlbmRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgZW5kQXJjVmVydGV4
LngoKSAtIGFyY0NlbnRlci54KCkpOworICAgIGNvbnN0IGZsb2F0IHR3b1BJID0gcGlGbG9hdCAq
IDI7CisgICAgaWYgKHN0YXJ0QW5nbGUgPCAwKQorICAgICAgICBzdGFydEFuZ2xlICs9IHR3b1BJ
OworICAgIGlmIChlbmRBbmdsZSA8IDApCisgICAgICAgIGVuZEFuZ2xlICs9IHR3b1BJOworICAg
IGZsb2F0IGFuZ2xlID0gKHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgPyAoc3RhcnRBbmdsZSAtIGVu
ZEFuZ2xlKSA6IChzdGFydEFuZ2xlICsgdHdvUEkgLSBlbmRBbmdsZSk7CisgICAgY29uc3QgZmxv
YXQgYXJjU2VnbWVudENvdW50ID0gNjsgLy8gQW4gZXZlbiBudW1iZXIgc28gdGhhdCBvbmUgYXJj
IHZlcnRleCB3aWxsIGJlIGVhY3RseSBhcmNSYWRpdXMgZnJvbSBhcmNDZW50ZXIuCisgICAgZmxv
YXQgYXJjU2VnbWVudEFuZ2xlID0gICgocGFkZGluZykgPyAtYW5nbGUgOiB0d29QSSAtIGFuZ2xl
KSAvIGFyY1NlZ21lbnRDb3VudDsKKworICAgIHZlcnRpY2VzLmFwcGVuZChzdGFydEFyY1ZlcnRl
eCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyY1NlZ21lbnRDb3VudDsgKytpKSB7
CisgICAgICAgIGZsb2F0IGFuZ2xlID0gc3RhcnRBbmdsZSArIGFyY1NlZ21lbnRBbmdsZSAqIGk7
CisgICAgICAgIHZlcnRpY2VzLmFwcGVuZChhcmNDZW50ZXIgKyBGbG9hdFBvaW50KGNvcyhhbmds
ZSkgKiBhcmNSYWRpdXMsIHNpbihhbmdsZSkgKiBhcmNSYWRpdXMpKTsKKyAgICB9CisgICAgdmVy
dGljZXMuYXBwZW5kKGVuZEFyY1ZlcnRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmFw
VmVydGljZXNUb0xheW91dFVuaXRHcmlkKFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnRpY2VzLnNpemUoKTsgKytpKQorICAg
ICAgICB2ZXJ0aWNlc1tpXS5zZXQoTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS54KCkpLnRvRmxvYXQo
KSwgTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS55KCkpLnRvRmxvYXQoKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgUGFzc093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMo
Y29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBwYWRkaW5nLCBXaW5kUnVsZSBmaWxs
UnVsZSkKK3sKKyAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gcGFkZGVkVmVydGljZXMg
PSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkpOworICAgIEZsb2F0UG9pbnQgaW50
ZXJzZWN0aW9uOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVy
T2ZFZGdlcygpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0Vk
Z2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYg
cHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsKKyAgICAgICAgT2Zmc2V0UG9seWdv
bkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIGlud2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2Up
ICogcGFkZGluZyk7CisgICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHBy
ZXZFZGdlLCBpbndhcmRFZGdlTm9ybWFsKHByZXZFZGdlKSAqIHBhZGRpbmcpOworCisgICAgICAg
IGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2Vj
dGlvbikpCisgICAgICAgICAgICBwYWRkZWRWZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7
CisgICAgICAgIGVsc2UgaWYgKGlzUmVmbGV4VmVydGV4KHByZXZFZGdlLnZlcnRleDEoKSwgdGhp
c0VkZ2UudmVydGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgyKCkpKQorICAgICAgICAgICAgYXBwZW5k
QXJjKCpwYWRkZWRWZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgpLCBwYWRkaW5nLCBwcmV2T2Zm
c2V0RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgdHJ1ZSk7CisgICAg
fQorCisgICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgqcGFkZGVkVmVydGljZXMpOwor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKHBhZGRlZFZlcnRpY2VzLnJlbGVh
c2UoKSwgZmlsbFJ1bGUpKTsKK30KKworc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9s
eWdvbj4gY29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdv
biwgZmxvYXQgbWFyZ2luLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBPd25QdHI8VmVjdG9y
PEZsb2F0UG9pbnQ+ID4gbWFyZ2luVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0
UG9pbnQ+KCkpOworICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9uOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKKyAg
ICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91
c0VkZ2UoKTsKKyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0Vk
Z2UsIG91dHdhcmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIG1hcmdpbik7CisgICAgICAgIE9mZnNl
dFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBvdXR3YXJkRWRnZU5vcm1hbChw
cmV2RWRnZSkgKiBtYXJnaW4pOworCisgICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNl
Y3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCisgICAgICAgICAgICBtYXJnaW5W
ZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGFwcGVuZEFyYygqbWFyZ2luVmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgbWFyZ2luLCBw
cmV2T2Zmc2V0RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgZmFsc2Up
OworICAgIH0KKworICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKm1hcmdpblZlcnRp
Y2VzKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbihtYXJnaW5WZXJ0aWNl
cy5yZWxlYXNlKCksIGZpbGxSdWxlKSk7Cit9CisKK2NvbnN0IEZsb2F0UG9seWdvbiYgUG9seWdv
blNoYXBlOjpzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAoreworICAgIEFTU0VSVChzaGFwZVBh
ZGRpbmcoKSA+PSAwKTsKKyAgICBpZiAoIXNoYXBlUGFkZGluZygpKQorICAgICAgICByZXR1cm4g
bV9wb2x5Z29uOworCisgICAgaWYgKCFtX3BhZGRpbmdCb3VuZHMpCisgICAgICAgIG1fcGFkZGlu
Z0JvdW5kcyA9IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMobV9wb2x5Z29uLCBzaGFwZVBhZGRp
bmcoKSwgbV9wb2x5Z29uLmZpbGxSdWxlKCkpOworCisgICAgcmV0dXJuICptX3BhZGRpbmdCb3Vu
ZHM7Cit9CisKK2NvbnN0IEZsb2F0UG9seWdvbiYgUG9seWdvblNoYXBlOjpzaGFwZU1hcmdpbkJv
dW5kcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNoYXBlTWFyZ2luKCkgPj0gMCk7CisgICAgaWYg
KCFzaGFwZU1hcmdpbigpKQorICAgICAgICByZXR1cm4gbV9wb2x5Z29uOworCisgICAgaWYgKCFt
X21hcmdpbkJvdW5kcykKKyAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21wdXRlU2hhcGVNYXJn
aW5Cb3VuZHMobV9wb2x5Z29uLCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7
CisKKyAgICByZXR1cm4gKm1fbWFyZ2luQm91bmRzOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50
ZXJzZWN0aW9uLCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBGbG9hdFBvaW50JiB0aGlzVmVydGV4
LCBGbG9hdFBvaW50JiBuZXh0VmVydGV4KQoreworICAgIGlmIChpbnRlcnNlY3Rpb24udHlwZSAh
PSBWZXJ0ZXhNaW5ZICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1heFkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChpbnRlcnNlY3Rpb24uZWRnZSAmJiBpbnRlcnNl
Y3Rpb24uZWRnZS0+cG9seWdvbigpKTsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24g
PSAqKGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UmIHRoaXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7CisKKyAgICBpZiAoKGludGVy
c2VjdGlvbi50eXBlID09IFZlcnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPCB0
aGlzRWRnZS52ZXJ0ZXgyKCkueSgpKSkKKyAgICAgICAgfHwgKGludGVyc2VjdGlvbi50eXBlID09
IFZlcnRleE1heFkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgy
KCkueSgpKSkpIHsKKyAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0Vk
Z2UucHJldmlvdXNFZGdlKCkudmVydGV4SW5kZXgxKCkpOworICAgICAgICB0aGlzVmVydGV4ID0g
cG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAgIG5leHRW
ZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52
ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRo
aXNFZGdlLnZlcnRleEluZGV4MigpKTsKKyAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVy
dGV4QXQodGhpc0VkZ2UubmV4dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcHBlbmRJbnRlcnZhbFgoZmxv
YXQgeCwgYm9vbCBpbnNpZGUsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcmVzdWx0KQoreworICAg
IGlmICghaW5zaWRlKQorICAgICAgICByZXN1bHQuYXBwZW5kKFNoYXBlSW50ZXJ2YWwoeCkpOwor
ICAgIGVsc2UKKyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54MiA9IHg7CisKKyAg
ICByZXR1cm4gIWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rp
b25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnN0IEVkZ2VJbnRl
cnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQgeDEgPSBpbnRlcnNlY3Rpb24x
LnBvaW50LngoKTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIucG9pbnQueCgpOworICAg
IHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwgaW50ZXJzZWN0aW9uMi50
eXBlIDogeDEgPCB4MjsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGNv
bnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxT
aGFwZUludGVydmFsPiYgcmVzdWx0KQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25F
ZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRn
ZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50
ZXJzZWN0aW9uczsKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGNv
bXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2Vj
dGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBl
bmQoaW50ZXJzZWN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkg
PCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdp
bigpLCBpbnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlv
blgpOworCisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOwor
ICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CisKKyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rp
b25zLnNpemUoKSkgeworICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJz
ZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleF07CisgICAgICAgIGlmIChpbmRleCArIDEgPCBp
bnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlv
biYgbmV4dEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXggKyAxXTsKKyAgICAgICAg
ICAgIGlmICgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4dEludGVyc2VjdGlvbi5w
b2ludC54KCkpICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSB8fCB0aGlz
SW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpc0ludGVyc2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlwZSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMg
YXJlIFZlcnRleE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0ZXhNaW5ZLgorICAg
ICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9z
ZSB0eXBlcyBhcmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRleE1heFksVmVydGV4TWlu
WSB3aXRoIG9uZSBpbnRlcnNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2Ug
PSAqdGhpc0ludGVyc2VjdGlvbi5lZGdlOworICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9
ICF3aW5kQ291bnQ7CisKKyAgICAgICAgaWYgKHBvbHlnb24uZmlsbFJ1bGUoKSA9PSBSVUxFX0VW
RU5PREQpIHsKKyAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0VkZ2UudmVydGV4MigpLnko
KSA+IHRoaXNFZGdlLnZlcnRleDEoKS55KCkpID8gMSA6IC0xOworICAgICAgICAgICAgZXZlbk9k
ZENyb3NzaW5nID0gZXZlbk9kZENyb3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZXZlbk9kZENyb3NzaW5nKSB7CisgICAgICAgICAgICBib29sIGVkZ2VDcm9z
c2luZyA9IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWw7CisgICAgICAgICAgICBpZiAo
IWVkZ2VDcm9zc2luZykgeworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleDsK
KyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHRoaXNWZXJ0ZXg7CisgICAgICAgICAgICAgICAg
RmxvYXRQb2ludCBuZXh0VmVydGV4OworCisgICAgICAgICAgICAgICAgaWYgKGdldFZlcnRleElu
dGVyc2VjdGlvblZlcnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZWZXJ0ZXgsIHRoaXNWZXJ0
ZXgsIG5leHRWZXJ0ZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4Lnko
KSA9PSB5KQorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWluWSkg
PyBwcmV2VmVydGV4LnkoKSA+IHkgOiBwcmV2VmVydGV4LnkoKSA8IHk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHByZXZWZXJ0ZXgueSgpID09IHkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IG5leHRWZXJ0ZXgueSgpID4geSA6IG5leHRW
ZXJ0ZXgueSgpIDwgeTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWRnZUNyb3NzaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZWRnZUNyb3NzaW5nKQorICAgICAgICAgICAgICAgIGlu
c2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSwgaW5zaWRl
LCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgKytpbmRleDsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQ
b2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxTaGFwZUludGVydmFs
PiYgcmVzdWx0KQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7
CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBlZGdlcykpCisgICAg
ICAgIHJldHVybjsKKworICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBGbG9hdFBvbHlnb25FZGdlICplZGdlID0gZWRnZXNbaV07CisgICAgICAgIGZsb2F0IHgxOwor
ICAgICAgICBmbG9hdCB4MjsKKworICAgICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEpIHsKKyAg
ICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rpb24pOwor
ICAgICAgICAgICAgeDEgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHgxID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPCBlZGdlLT52ZXJ0ZXgyKCku
eSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisgICAg
ICAgIGlmIChlZGdlLT5tYXhZKCkgPiB5MikgeworICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNl
Y3Rpb24oZWRnZSwgeTIsIGludGVyc2VjdGlvbik7CisgICAgICAgICAgICB4MiA9IGludGVyc2Vj
dGlvbi5wb2ludC54KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeDIgPSAoZWRnZS0+
dmVydGV4MSgpLnkoKSA+IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngo
KSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7CisKKyAgICAgICAgaWYgKHgxID4geDIpCisgICAgICAg
ICAgICBzdGQ6OnN3YXAoeDEsIHgyKTsKKworICAgICAgICBpZiAoeDIgPiB4MSkKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoU2hhcGVJbnRlcnZhbCh4MSwgeDIpKTsKKyAgICB9CisKKyAgICBz
b3J0U2hhcGVJbnRlcnZhbHMocmVzdWx0KTsKK30KKwordm9pZCBQb2x5Z29uU2hhcGU6OmdldEV4
Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0UG9s
eWdvbiYgcG9seWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7CisgICAgaWYgKHBvbHlnb24uaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Cisg
ICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKKworICAgIFZlY3RvcjxT
aGFwZUludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0
ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKKworICAg
IFZlY3RvcjxTaGFwZUludGVydmFsPiBtZXJnZWRJbnRlcnZhbHM7CisgICAgbWVyZ2VTaGFwZUlu
dGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKKwor
ICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVPdmVy
bGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsK
KworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJn
ZVNoYXBlSW50ZXJ2YWxzKG1lcmdlZEludGVydmFscywgZWRnZUludGVydmFscywgZXhjbHVkZWRJ
bnRlcnZhbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2
YWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWwgPSBleGNs
dWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbnRl
cnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK3ZvaWQgUG9seWdvblNoYXBlOjpn
ZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9h
dFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAocG9seWdv
bi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRv
cDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgVmVj
dG9yPFNoYXBlSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNvbXB1
dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBj
b21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOwor
CisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGNvbW1vbkludGVydmFsczsKKyAgICBpbnRlcnNl
Y3RTaGFwZUludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgY29tbW9uSW50ZXJ2
YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNv
bXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50
ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBpbmNsdWRlZEludGVydmFsczsK
KyAgICBzdWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFs
cywgaW5jbHVkZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlu
Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgaW50
ZXJ2YWwgPSBpbmNsdWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5l
U2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5
Z29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEsIHVu
c2lnbmVkIG9mZnNldEVkZ2VJbmRleDIpCit7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhyZWN0Lnko
KSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOworICAgICAgICBpZiAoZWRnZS0+ZWRn
ZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZz
ZXRFZGdlSW5kZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChyZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwgY29uc3QgRmxvYXRS
ZWN0JiByMikKK3sKKyAgICBpZiAocjEueSgpIDwgcjIueSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAocjEueSgpID09IHIyLnkoKSkKKyAgICAgICAgcmV0dXJuIHIxLngoKSA8IHIy
LngoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9seWdvblNoYXBlOjpmaXJzdElu
Y2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9w
LCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50
ZXJ2YWxUb3A7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLmhlaWdodCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2Fs
SW50ZXJ2YWxTaXplLndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24g
PSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QgYm91bmRpbmdCb3gg
PSBwb2x5Z29uLmJvdW5kaW5nQm94KCk7CisgICAgaWYgKG1pbkludGVydmFsV2lkdGggPiBib3Vu
ZGluZ0JveC53aWR0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBtaW5Z
ID0gc3RkOjptYXgoYm91bmRpbmdCb3gueSgpLCBtaW5JbnRlcnZhbFRvcCk7CisgICAgZmxvYXQg
bWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKworICAgIGlmIChtYXhZID4gYm91bmRp
bmdCb3gubWF4WSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8Y29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIHBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyht
aW5JbnRlcnZhbFRvcCwgYm91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7CisKKyAgICBmbG9hdCBk
eCA9IG1pbkludGVydmFsV2lkdGggLyAyOworICAgIGZsb2F0IGR5ID0gbWluSW50ZXJ2YWxIZWln
aHQgLyAyOworICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZXM7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOworICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXgxKCk7Cisg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKKyAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOworICAgICAgICBW
ZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VCdWZmZXI7CisKKyAgICAgICAgaWYg
KHZlcnRleDIueSgpID4gdmVydGV4MS55KCkgPyB2ZXJ0ZXgyLngoKSA+PSB2ZXJ0ZXgxLngoKSA6
IHZlcnRleDEueCgpID49IHZlcnRleDIueCgpKSB7CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVm
ZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgsIC1keSkpKTsK
KyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVk
Z2UsIEZsb2F0U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
b2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXpl
KGR4LCBkeSkpKTsKKyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBv
bHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIC1keSkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpc1JlZmxleFZlcnRleCh2ZXJ0ZXgwLCB2ZXJ0ZXgxLCB2ZXJ0ZXgyKSkgeworICAg
ICAgICAgICAgaWYgKHZlcnRleDIueCgpIDw9IHZlcnRleDEueCgpICYmIHZlcnRleDAueCgpIDw9
IHZlcnRleDEueCgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9m
ZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZShkeCwgLWR5KSwgRmxvYXRTaXplKGR4
LCBkeSkpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueCgpID49IHZlcnRleDEueCgp
ICYmIHZlcnRleDAueCgpID49IHZlcnRleDEueCgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVk
Z2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgs
IC1keSksIEZsb2F0U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICAgICAgaWYgKHZlcnRleDIueSgp
IDw9IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpIDw9IHZlcnRleDEueSgpKQorICAgICAgICAg
ICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEs
IEZsb2F0U2l6ZSgtZHgsIGR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHZlcnRleDIueSgpID49IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpID49IHZlcnRl
eDEueSgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBv
bHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0U2l6ZShkeCwgLWR5
KSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG9mZnNl
dEVkZ2VCdWZmZXIuc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpZiAob2Zmc2V0RWRnZUJ1ZmZl
cltqXS5tYXhZKCkgPj0gbWluWSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdlcy5hcHBlbmQo
b2Zmc2V0RWRnZUJ1ZmZlcltqXSk7CisgICAgfQorCisgICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9m
ZnNldFBvbHlnb25FZGdlKHBvbHlnb24sIG1pbkludGVydmFsVG9wLCBGbG9hdFNpemUoMCwgZHkp
KSk7CisKKyAgICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uOworICAgIEZsb2F0
UmVjdCBmaXJzdEZpdFJlY3Q7CisgICAgYm9vbCBmaXJzdEZpdEZvdW5kID0gZmFsc2U7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpIC0gMTsgKytpKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb2Zmc2V0RWRnZXMuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlc1tpXS5pbnRlcnNlY3Rpb24ob2Zm
c2V0RWRnZXNbal0sIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKSkgeworICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbihvZmZzZXRFZGdlc0ludGVyc2Vj
dGlvbi54KCkgLSBkeCwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueSgpIC0gZHkpOworICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QocG90ZW50aWFsRmlyc3RG
aXRMb2NhdGlvbiwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7CisgICAgICAgICAgICAgICAgaWYg
KChvZmZzZXRFZGdlc1tpXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCisg
ICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldEVkZ2VzW2pdLmJhc2lzKCkgPT0gT2Zmc2V0UG9s
eWdvbkVkZ2U6OkxpbmVUb3AKKyAgICAgICAgICAgICAgICAgICAgfHwgcG90ZW50aWFsRmlyc3RG
aXRMb2NhdGlvbi55KCkgPj0gbWluSW50ZXJ2YWxUb3ApCisgICAgICAgICAgICAgICAgICAgICYm
ICghZmlyc3RGaXRGb3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVudGlhbEZpcnN0Rml0UmVj
dCwgZmlyc3RGaXRSZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgcG9seWdvbi5jb250YWlu
cyhvZmZzZXRFZGdlc0ludGVyc2VjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RG
aXRSZWN0SW5Qb2x5Z29uKHBvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRn
ZXNbaV0uZWRnZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkgeworICAgICAg
ICAgICAgICAgICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RGaXRSZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmaXJzdEZpdEZvdW5k
KQorICAgICAgICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGZpcnN0Rml0UmVjdC55KCkpOwor
ICAgIHJldHVybiBmaXJzdEZpdEZvdW5kOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42MjhhYzNhZGQwNjU2ZDY3M2IxMjdkNjg4OGJmMGU4NjAyYjYxODBjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaApA
QCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUG9seWdvblNoYXBlX2gKKyNkZWZpbmUg
UG9seWdvblNoYXBlX2gKKworI2luY2x1ZGUgIkZsb2F0UG9seWdvbi5oIgorI2luY2x1ZGUgIlNo
YXBlLmgiCisjaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE9mZnNldFBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBhaXIgeworcHVibGlj
OgorICAgIGVudW0gQmFzaXMgeworICAgICAgICBFZGdlLAorICAgICAgICBWZXJ0ZXgsCisgICAg
ICAgIExpbmVUb3AKKyAgICB9OworCisgICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSYgZWRnZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAgICAgIDogbV92
ZXJ0ZXgxKGVkZ2UudmVydGV4MSgpICsgb2Zmc2V0KQorICAgICAgICAsIG1fdmVydGV4MihlZGdl
LnZlcnRleDIoKSArIG9mZnNldCkKKyAgICAgICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRl
eCgpKQorICAgICAgICAsIG1fYmFzaXMoRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgT2Zmc2V0
UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2ludCYgcmVmbGV4VmVydGV4LCBjb25zdCBGbG9hdFNp
emUmIG9mZnNldDEsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MikKKyAgICAgICAgOiBtX3ZlcnRl
eDEocmVmbGV4VmVydGV4ICsgb2Zmc2V0MSkKKyAgICAgICAgLCBtX3ZlcnRleDIocmVmbGV4VmVy
dGV4ICsgb2Zmc2V0MikKKyAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKKyAgICAgICAgLCBtX2Jh
c2lzKFZlcnRleCkKKyAgICB7CisgICAgfQorCisgICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3Qg
RmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0KQorICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHln
b24uYm91bmRpbmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCisg
ICAgICAgICwgbV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLm1heFgo
KSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAgICAgLCBtX2VkZ2VJbmRl
eCgtMSkKKyAgICAgICAgLCBtX2Jhc2lzKExpbmVUb3ApCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fdmVydGV4MTsgfQorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGV4MjsgfQorICAgIGludCBlZGdlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsgfQorICAgIEJhc2lzIGJhc2lzKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYXNpczsgfQorCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgxOwor
ICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgyOworICAgIGludCBtX2VkZ2VJbmRleDsKKyAgICBCYXNp
cyBtX2Jhc2lzOworfTsKKworY2xhc3MgUG9seWdvblNoYXBlIDogcHVibGljIFNoYXBlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQb2x5Z29uU2hhcGUpOworcHVibGljOgorICAgIFBvbHln
b25TaGFwZShQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVs
ZSBmaWxsUnVsZSkKKyAgICAgICAgOiBTaGFwZSgpCisgICAgICAgICwgbV9wb2x5Z29uKHZlcnRp
Y2VzLCBmaWxsUnVsZSkKKyAgICAgICAgLCBtX21hcmdpbkJvdW5kcyhudWxscHRyKQorICAgICAg
ICAsIG1fcGFkZGluZ0JvdW5kcyhudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpLmJv
dW5kaW5nQm94KCkpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2lj
YWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91
dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9CisgICAgdmlydHVh
bCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BvbHlnb24uaXNFbXB0
eSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQg
bG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9n
aWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6
ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9WRVJSSURFOwor
Citwcml2YXRlOgorICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVNYXJnaW5Cb3VuZHMoKSBj
b25zdDsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0
OworCisgICAgRmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKKyAgICBtdXRhYmxlIE93blB0cjxGbG9h
dFBvbHlnb24+IG1fbWFyZ2luQm91bmRzOworICAgIG11dGFibGUgT3duUHRyPEZsb2F0UG9seWdv
bj4gbV9wYWRkaW5nQm91bmRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gUG9seWdvblNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUyN2ZjZmE3MmFmM2M5MzAwNTVl
NTkzYjlmNTRjNzQ3YTQxNzBhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCkBAIC0wLDAgKzEsMjMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlY3RhbmdsZVNoYXBlLmgiCisKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBpbmxpbmUgZmxvYXQgZWxsaXBzZVhJbnRlcmNlcHQoZmxvYXQgeSwgZmxvYXQgcngsIGZsb2F0
IHJ5KQoreworICAgIEFTU0VSVChyeSA+IDApOworICAgIHJldHVybiByeCAqIHNxcnQoMSAtICh5
ICogeSkgLyAocnkgKiByeSkpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VZSW50
ZXJjZXB0KGZsb2F0IHgsIGZsb2F0IHJ4LCBmbG9hdCByeSkKK3sKKyAgICBBU1NFUlQocnggPiAw
KTsKKyAgICByZXR1cm4gcnkgKiBzcXJ0KDEgLSAoeCAqIHgpIC8gKHJ4ICogcngpKTsKK30KKwor
RmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjpwYWRkaW5nQm91bmRzKGZsb2F0IHBh
ZGRpbmcpIGNvbnN0Cit7CisgICAgQVNTRVJUKHBhZGRpbmcgPj0gMCk7CisgICAgaWYgKCFwYWRk
aW5nIHx8IGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgZmxvYXQgYm91
bmRzWCA9IHgoKSArIHN0ZDo6bWluKHdpZHRoKCkgLyAyLCBwYWRkaW5nKTsKKyAgICBmbG9hdCBi
b3VuZHNZID0geSgpICsgc3RkOjptaW4oaGVpZ2h0KCkgLyAyLCBwYWRkaW5nKTsKKyAgICBmbG9h
dCBib3VuZHNXaWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgLSBwYWRkaW5nICogMik7Cisg
ICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gc3RkOjptYXgoMC4wZiwgaGVpZ2h0KCkgLSBwYWRkaW5n
ICogMik7CisgICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHN0ZDo6bWF4KDAuMGYsIHJ4KCkgLSBw
YWRkaW5nKTsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gc3RkOjptYXgoMC4wZiwgcnkoKSAt
IHBhZGRpbmcpOworICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0KEZsb2F0UmVjdChib3VuZHNY
LCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwgRmxvYXRTaXplKGJvdW5kc1Jh
ZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5k
ZWRSZWN0OjptYXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdAoreworICAgIEFTU0VSVCht
YXJnaW4gPj0gMCk7CisgICAgaWYgKCFtYXJnaW4pCisgICAgICAgIHJldHVybiAqdGhpczsKKwor
ICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkgLSBtYXJnaW47CisgICAgZmxvYXQgYm91bmRzWSA9IHko
KSAtIG1hcmdpbjsKKyAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHdpZHRoKCkgKyBtYXJnaW4gKiAy
OworICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9IGhlaWdodCgpICsgbWFyZ2luICogMjsKKyAgICBm
bG9hdCBib3VuZHNSYWRpdXNYID0gcngoKSArIG1hcmdpbjsKKyAgICBmbG9hdCBib3VuZHNSYWRp
dXNZID0gcnkoKSArIG1hcmdpbjsKKyAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJl
Y3QoYm91bmRzWCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6
ZShib3VuZHNSYWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Cit9CisKK0Zsb2F0UG9pbnQgRmxvYXRS
b3VuZGVkUmVjdDo6Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lkdGhBdEludGVyY2Vw
dCkgY29uc3QKK3sKKyAgICBmbG9hdCB4aSA9ICh3aWR0aCgpIC0gd2lkdGhBdEludGVyY2VwdCkg
LyAyOworICAgIGZsb2F0IHlpID0gcnkoKSAtIGVsbGlwc2VZSW50ZXJjZXB0KHJ4KCkgLSB4aSwg
cngoKSwgcnkoKSk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoeGksIHlpKTsKK30KKworRmxvYXRS
b3VuZGVkUmVjdCBSZWN0YW5nbGVTaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcykgeworICAgICAgICBtX2hh
dmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgPSB0cnVlOworICAgICAgICBtX3BhZGRpbmdCb3Vu
ZHMgPSBtX2JvdW5kcy5wYWRkaW5nQm91bmRzKHNoYXBlUGFkZGluZygpKTsKKyAgICB9CisgICAg
cmV0dXJuIG1fcGFkZGluZ0JvdW5kczsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBSZWN0YW5nbGVT
aGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAoreworICAgIGlmICghbV9oYXZlSW5pdGlh
bGl6ZWRNYXJnaW5Cb3VuZHMpIHsKKyAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3Vu
ZHMgPSB0cnVlOworICAgICAgICBtX21hcmdpbkJvdW5kcyA9IG1fYm91bmRzLm1hcmdpbkJvdW5k
cyhzaGFwZU1hcmdpbigpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWFyZ2luQm91bmRzOworfQor
Cit2b2lkIFJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxv
Z2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkg
Y29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZU1hcmdp
bkJvdW5kcygpOworICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsg
bG9naWNhbEhlaWdodDsKKworICAgIGlmICh5MiA8IGJvdW5kcy55KCkgfHwgeTEgPj0gYm91bmRz
Lm1heFkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeDEgPSBib3VuZHMueCgpOwor
ICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKKworICAgIGlmIChib3VuZHMucnkoKSA+IDAp
IHsKKyAgICAgICAgaWYgKHkyIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpKSB7CisgICAgICAg
ICAgICBmbG9hdCB5aSA9IHkyIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOworICAgICAgICAg
ICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5y
eSgpKTsKKyAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7Cisg
ICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOworICAgICAg
ICB9IGVsc2UgaWYgKHkxID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKSB7CisgICAgICAg
ICAgICBmbG9hdCB5aSA9ICB5MSAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOworICAg
ICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJv
dW5kcy5yeSgpKTsKKyAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0g
eGk7CisgICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIp
KTsKK30KKwordm9pZCBSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hh
cGVQYWRkaW5nQm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxvZ2lj
YWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgaWYgKHkxIDwgYm91bmRzLnkoKSB8fCB5MiA+
IGJvdW5kcy5tYXhZKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHgxID0gYm91bmRz
LngoKTsKKyAgICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7CisKKyAgICBpZiAoYm91bmRzLnJ5
KCkgPiAwKSB7CisgICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29ybmVyID0geTEgPCBib3VuZHMu
eSgpICsgYm91bmRzLnJ5KCk7CisgICAgICAgIGJvb2wgeTJJbnRlcmNlcHRzQ29ybmVyID0geTIg
PiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgIGZsb2F0IHhpID0gMDsKKwor
ICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyICYmIHkySW50ZXJjZXB0c0Nvcm5lcikgewor
ICAgICAgICAgICAgaWYgICh5MSA8IGJvdW5kcy5oZWlnaHQoKSArIDIgKiBib3VuZHMueSgpIC0g
eTIpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5k
cy5yeSgpOworICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5k
cy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGZsb2F0IHlpID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7CisgICAg
ICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5k
cy5yeSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHND
b3JuZXIpIHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMueSgpIC0gYm91bmRz
LnJ5KCk7CisgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngo
KSwgYm91bmRzLnJ5KCkpOworICAgICAgICB9IGVsc2UgaWYgKHkySW50ZXJjZXB0c0Nvcm5lcikg
eworICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5y
eSgpKTsKKyAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgp
LCBib3VuZHMucnkoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29y
bmVyIHx8IHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgp
ICsgYm91bmRzLnJ4KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJv
dW5kcy5yeCgpICsgeGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKExp
bmVTZWdtZW50KHgxLCB4MikpOworfQorCitib29sIFJlY3RhbmdsZVNoYXBlOjpmaXJzdEluY2x1
ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBj
b25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1
bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxUb3A7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplLmhlaWdodCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50
ZXJ2YWxTaXplLndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMg
PSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSB8fCBtaW5J
bnRlcnZhbFdpZHRoID4gYm91bmRzLndpZHRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZHMueSgpLCBtaW5JbnRlcnZhbFRvcCk7Cisg
ICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKworICAgIGlmIChtYXhZ
ID4gYm91bmRzLm1heFkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpbnRl
cnZhbE92ZXJsYXBzTWluQ29ybmVyID0gbWluWSA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKTsK
KyAgICBib29sIGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgPSBtYXhZID4gYm91bmRzLm1heFko
KSAtIGJvdW5kcy5yeSgpOworCisgICAgaWYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyICYm
ICFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyKSB7CisgICAgICAgIHJlc3VsdCA9IG1pblk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMu
eSgpICsgYm91bmRzLmhlaWdodCgpIC8gMjsKKyAgICBib29sIG1pbkNvcm5lckRlZmluZXNYID0g
ZmFicyhjZW50ZXJZIC0gbWluWSkgPiBmYWJzKGNlbnRlclkgLSBtYXhZKTsKKyAgICBib29sIGlu
dGVydmFsRml0c1dpdGhpbkNvcm5lcnMgPSBtaW5JbnRlcnZhbFdpZHRoICsgMiAqIGJvdW5kcy5y
eCgpIDw9IGJvdW5kcy53aWR0aCgpOworICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0ID0g
Ym91bmRzLmNvcm5lckludGVyY2VwdEZvcldpZHRoKG1pbkludGVydmFsV2lkdGgpOworCisgICAg
aWYgKGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWF4Q29y
bmVyIHx8IG1pbkNvcm5lckRlZmluZXNYKSkgeworICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0
aGluQ29ybmVycyB8fCBib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSA8IG1pblkpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobWluSW50ZXJ2YWxIZWlnaHQgPCBib3VuZHMuaGVpZ2h0KCkg
LSAoMiAqIGNvcm5lckludGVyY2VwdC55KCkpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBjZWls
ZWRMYXlvdXRVbml0KGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGludGVydmFsT3Zl
cmxhcHNNYXhDb3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyIHx8ICFtaW5Db3Ju
ZXJEZWZpbmVzWCkpIHsKKyAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwg
bWluWSA8PSAgYm91bmRzLm1heFkoKSAtIGNvcm5lckludGVyY2VwdC55KCkgLSBtaW5JbnRlcnZh
bEhlaWdodCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1JlY3RhbmdsZVNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1JlY3RhbmdsZVNoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTllY2YwNTA0YmI5OTNjOTExMDM5MDYzNDkz
NDVlZTQyOTQ0NmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBSZWN0YW5nbGVTaGFwZV9oCisjZGVmaW5lIFJlY3RhbmdsZVNoYXBlX2gKKworI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFNp
emUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZs
b2F0Um91bmRlZFJlY3QgOiBwdWJsaWMgRmxvYXRSZWN0IHsKK3B1YmxpYzoKKyAgICBGbG9hdFJv
dW5kZWRSZWN0KCkgeyB9CisgICAgRmxvYXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIGJv
dW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKKyAgICAgICAgOiBGbG9hdFJlY3QoYm91bmRz
KQorICAgICAgICAsIG1fcmFkaWkocmFkaWkpCisgICAgeworICAgIH0KKworICAgIGZsb2F0IHJ4
KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpaS53aWR0aCgpOyB9CisgICAgZmxvYXQgcnkoKSBjb25z
dCB7IHJldHVybiBtX3JhZGlpLmhlaWdodCgpOyB9CisgICAgRmxvYXRSb3VuZGVkUmVjdCBtYXJn
aW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdDsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHBhZGRp
bmdCb3VuZHMoZmxvYXQgcGFkZGluZykgY29uc3Q7CisgICAgRmxvYXRQb2ludCBjb3JuZXJJbnRl
cmNlcHRGb3JXaWR0aChmbG9hdCB3aWR0aCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRmxvYXRT
aXplIG1fcmFkaWk7Cit9OworCitjbGFzcyBSZWN0YW5nbGVTaGFwZSA6IHB1YmxpYyBTaGFwZSB7
CitwdWJsaWM6CisgICAgUmVjdGFuZ2xlU2hhcGUoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNv
bnN0IEZsb2F0U2l6ZSYgcmFkaWkpCisgICAgICAgIDogU2hhcGUoKQorICAgICAgICAsIG1fYm91
bmRzKGJvdW5kcywgcmFkaWkpCisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3Vu
ZHMoZmFsc2UpCisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dp
Y2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlv
dXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBz
aGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBz
dGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKSk7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91bmRzLmlzRW1w
dHkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0Jikg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExv
Z2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNp
emUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklERTsK
KworcHJpdmF0ZToKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlTWFyZ2luQm91bmRzKCkgY29u
c3Q7CisgICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdDsKKwor
ICAgIEZsb2F0Um91bmRlZFJlY3QgbV9ib3VuZHM7CisgICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRS
ZWN0IG1fbWFyZ2luQm91bmRzOworICAgIG11dGFibGUgRmxvYXRSb3VuZGVkUmVjdCBtX3BhZGRp
bmdCb3VuZHM7CisgICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRz
IDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzIDog
MTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlY3RhbmdsZVNo
YXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjc5MjBjYzllNDg4MTM2ODkxNzQ4NWNiMDMzNzhlOWY0MDAwMmYzYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0wLDAg
KzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlLmgi
CisKKyNpbmNsdWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiUG9seWdvblNoYXBl
LmgiCisjaW5jbHVkZSAiUmVjdGFuZ2xlU2hhcGUuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0ZVJlY3RhbmdsZVNoYXBlKGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQoreworICAgIEFTU0VSVChib3VuZHMud2lk
dGgoKSA+PSAwICYmIGJvdW5kcy5oZWlnaHQoKSA+PSAwICYmIHJhZGlpLndpZHRoKCkgPj0gMCAm
JiByYWRpaS5oZWlnaHQoKSA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlY3Rhbmds
ZVNoYXBlKGJvdW5kcywgcmFkaWkpKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNy
ZWF0ZVNoYXBlQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzKQor
eworICAgIEFTU0VSVChyYWRpdXMgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWN0
YW5nbGVTaGFwZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJh
ZGl1cywgcmFkaXVzKjIsIHJhZGl1cyoyKSwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSkpOwor
fQorCitzdGF0aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRlU2hhcGVFbGxpcHNlKGNvbnN0IEZs
b2F0UG9pbnQmIGNlbnRlciwgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKK3sKKyAgICBBU1NFUlQo
cmFkaWkud2lkdGgoKSA+PSAwICYmIHJhZGlpLmhlaWdodCgpID49IDApOworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUmVjdGFuZ2xlU2hhcGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpaS53
aWR0aCgpLCBjZW50ZXIueSgpIC0gcmFkaWkuaGVpZ2h0KCksIHJhZGlpLndpZHRoKCkqMiwgcmFk
aWkuaGVpZ2h0KCkqMiksIHJhZGlpKSk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBj
cmVhdGVQb2x5Z29uU2hhcGUoUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNl
cywgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQb2x5Z29u
U2hhcGUodmVydGljZXMsIGZpbGxSdWxlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRSZWN0
IHBoeXNpY2FsUmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxvZ2lj
YWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiByZWN0OworICAg
IGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QocmVjdC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSByZWN0Lm1heFgoKSwg
cmVjdC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpKTsKKyAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2Vk
UmVjdCgpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9n
aWNhbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworICAgIGlmIChpc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50
KHBvaW50LnkoKSwgbG9naWNhbEJveEhlaWdodCAtIHBvaW50LngoKSk7CisgICAgcmV0dXJuIHBv
aW50LnRyYW5zcG9zZWRQb2ludCgpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBwaHlz
aWNhbFNpemVUb0xvZ2ljYWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
KQorICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgp
OworfQorCitQYXNzT3duUHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29uc3QgQmFzaWNT
aGFwZSogYmFzaWNTaGFwZSwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZykKK3sKKyAg
ICBBU1NFUlQoYmFzaWNTaGFwZSk7CisKKyAgICBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSA9
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKKyAgICBmbG9hdCBib3hXaWR0
aCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLndpZHRoKCkgOiBsb2dp
Y2FsQm94U2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBib3hIZWlnaHQgPSBob3Jpem9udGFsV3Jp
dGluZ01vZGUgPyBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSA6IGxvZ2ljYWxCb3hTaXplLndpZHRo
KCk7CisgICAgT3duUHRyPFNoYXBlPiBzaGFwZTsKKworICAgIHN3aXRjaCAoYmFzaWNTaGFwZS0+
dHlwZSgpKSB7CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVSZWN0YW5nbGVUeXBl
OiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKKyAgICAgICAg
RmxvYXRSZWN0IGJvdW5kcygKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFu
Z2xlLT54KCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVj
dGFuZ2xlLT55KCksIGJveEhlaWdodCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHJlY3RhbmdsZS0+d2lkdGgoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZv
ckxlbmd0aChyZWN0YW5nbGUtPmhlaWdodCgpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgTGVuZ3Ro
IHJhZGl1c1hMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKKyAgICAgICAgTGVu
Z3RoIHJhZGl1c1lMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKKyAgICAgICAg
RmxvYXRTaXplIGNvcm5lclJhZGlpKAorICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVm
aW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgp
LAorICAgICAgICAgICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFs
dWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7CisgICAgICAgIEZsb2F0UmVj
dCBsb2dpY2FsQm91bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJv
eFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVJl
Y3RhbmdsZVNoYXBlKGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJS
YWRpaSwgd3JpdGluZ01vZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBC
YXNpY1NoYXBlOjpCYXNpY1NoYXBlQ2lyY2xlVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1No
YXBlQ2lyY2xlKiBjaXJjbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4o
YmFzaWNTaGFwZSk7CisgICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KGNpcmNsZS0+Y2VudGVyWCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZsb2F0IGNlbnRlclkgPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOworICAgICAg
ICBmbG9hdCByYWRpdXMgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0
ZDo6bWluKGJveEhlaWdodCwgYm94V2lkdGgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBsb2dpY2Fs
Q2VudGVyID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRl
clkpLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNo
YXBlID0gY3JlYXRlU2hhcGVDaXJjbGUobG9naWNhbENlbnRlciwgcmFkaXVzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlRWxsaXBzZVR5
cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSo+KGJhc2ljU2hhcGUpOworICAgICAgICBmbG9h
dCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50ZXJYKCksIGJveFdp
ZHRoKTsKKyAgICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBz
ZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOworICAgICAgICBmbG9hdCByYWRpdXNYID0gZmxvYXRW
YWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxv
YXQgcmFkaXVzWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWSgpLCBib3hI
ZWlnaHQpOworICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50
VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhl
aWdodCgpLCB3cml0aW5nTW9kZSk7CisgICAgICAgIEZsb2F0U2l6ZSBsb2dpY2FsUmFkaWkgPSBw
aHlzaWNhbFNpemVUb0xvZ2ljYWwoRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpLCB3cml0aW5n
TW9kZSk7CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVTaGFwZUVsbGlwc2UobG9naWNhbENlbnRl
ciwgbG9naWNhbFJhZGlpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNp
Y1NoYXBlOjpCYXNpY1NoYXBlUG9seWdvblR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFw
ZVBvbHlnb24qIHBvbHlnb24gPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUG9seWdvbio+
KGJhc2ljU2hhcGUpOworICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3RoPiYgdmFsdWVzID0gcG9s
eWdvbi0+dmFsdWVzKCk7CisgICAgICAgIHNpemVfdCB2YWx1ZXNTaXplID0gdmFsdWVzLnNpemUo
KTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWVzU2l6ZSAlIDIpKTsKKyAgICAgICAgT3duUHRyPFZl
Y3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBv
aW50Pih2YWx1ZXNTaXplIC8gMikpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFsdWVzU2l6ZTsgaSArPSAyKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50IHZlcnRleCgKKyAg
ICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgp
LAorICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkgKyAxKSwg
Ym94SGVpZ2h0KSk7CisgICAgICAgICAgICAoKnZlcnRpY2VzKVtpIC8gMl0gPSBwaHlzaWNhbFBv
aW50VG9Mb2dpY2FsKHZlcnRleCwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2Rl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHNoYXBlID0gY3JlYXRlUG9seWdvblNoYXBlKHZlcnRp
Y2VzLnJlbGVhc2UoKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTog
eworICAgICAgICBjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSo+KGJhc2ljU2hhcGUpOwor
ICAgICAgICBmbG9hdCBsZWZ0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmxlZnQo
KSwgYm94V2lkdGgpOworICAgICAgICBmbG9hdCB0b3AgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJl
Y3RhbmdsZS0+dG9wKCksIGJveEhlaWdodCk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMoCisg
ICAgICAgICAgICBsZWZ0LAorICAgICAgICAgICAgdG9wLAorICAgICAgICAgICAgYm94V2lkdGgg
LSBsZWZ0IC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnJpZ2h0KCksIGJveFdpZHRo
KSwKKyAgICAgICAgICAgIGJveEhlaWdodCAtIHRvcCAtIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVj
dGFuZ2xlLT5ib3R0b20oKSwgYm94SGVpZ2h0KSk7CisgICAgICAgIExlbmd0aCByYWRpdXNYTGVu
Z3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7CisgICAgICAgIExlbmd0aCByYWRpdXNZ
TGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7CisgICAgICAgIEZsb2F0U2l6ZSBj
b3JuZXJSYWRpaSgKKyAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAg
OiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwKKyAgICAgICAg
ICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOworICAgICAgICBGbG9hdFJlY3QgbG9naWNhbEJv
dW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxCb3hTaXplLmhlaWdo
dCgpLCB3cml0aW5nTW9kZSk7CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVSZWN0YW5nbGVTaGFw
ZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVyUmFkaWksIHdyaXRp
bmdNb2RlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNoYXBlLT5tX3dyaXRpbmdNb2Rl
ID0gd3JpdGluZ01vZGU7CisgICAgc2hhcGUtPm1fbWFyZ2luID0gZmxvYXRWYWx1ZUZvckxlbmd0
aChtYXJnaW4sIDApOworICAgIHNoYXBlLT5tX3BhZGRpbmcgPSBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHBhZGRpbmcsIDApOworCisgICAgcmV0dXJuIHNoYXBlLnJlbGVhc2UoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBkOWVjZmQ3MjBiZDBkZDUzODA0MTMxOGM5ODI1YmYzMzcxMWU1ODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmgKQEAg
LTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIElu
Y29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVfaAorI2RlZmluZSBTaGFwZV9oCisK
KyNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNs
dWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBMaW5lU2Vn
bWVudCB7CisgICAgTGluZVNlZ21lbnQoZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxS
aWdodCkKKyAgICAgICAgOiBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAgICAgLCBsb2dp
Y2FsUmlnaHQobG9naWNhbFJpZ2h0KQorICAgIHsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0OworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0OworfTsKKwordHlwZWRlZiBW
ZWN0b3I8TGluZVNlZ21lbnQ+IFNlZ21lbnRMaXN0OworCisKKy8vIEEgcmVwcmVzZW50YXRpb24g
b2YgYSBCYXNpY1NoYXBlIHRoYXQgZW5hYmxlcyBsYXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93
IHRvIGJyZWFrIGEgbGluZSB1cCBpbnRvIHNlZ21lbnRzCisvLyB0aGF0IHdpbGwgZml0IHdpdGhp
biBvciBhcm91bmQgYSBzaGFwZS4gVGhlIGxpbmUgaXMgZGVmaW5lZCBieSBhIHBhaXIgb2YgbG9n
aWNhbCBZIGNvb3JkaW5hdGVzIGFuZCB0aGUKKy8vIGNvbXB1dGVkIHNlZ21lbnRzIGFyZSByZXR1
cm5lZCBhcyBwYWlycyBvZiBsb2dpY2FsIFggY29vcmRpbmF0ZXMuIFRoZSBCYXNpY1NoYXBlIGl0
c2VsZiBpcyBkZWZpbmVkIGluCisvLyBwaHlzaWNhbCBjb29yZGluYXRlcy4KKworY2xhc3MgU2hh
cGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVTaGFwZShj
b25zdCBCYXNpY1NoYXBlKiwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRp
bmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZyk7CisKKyAgICB2aXJ0dWFsIH5T
aGFwZSgpIHsgfQorCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJv
dW5kaW5nQm94KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRp
bmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW1w
dHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlz
dCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5
b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dp
Y2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXpl
JiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0ID0gMDsK
KworcHJvdGVjdGVkOgorICAgIGZsb2F0IHNoYXBlTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXJnaW47IH0KKyAgICBmbG9hdCBzaGFwZVBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BhZGRp
bmc7IH0KKworcHJpdmF0ZToKKyAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOworICAgIGZs
b2F0IG1fbWFyZ2luOworICAgIGZsb2F0IG1fcGFkZGluZzsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE1NTgzMjFjY2Y4ZmUwYzI4MDI3
YTQ1ZmM3YjIzNmE1NzU3ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAg
ICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlSW5m
by5oIgorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5o
IgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgewordGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0
eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIp
KExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+Citjb25zdCBTaGFw
ZSogU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNv
bXB1dGVkU2hhcGUoKSBjb25zdAoreworICAgIGlmIChTaGFwZSogc2hhcGUgPSBtX3NoYXBlLmdl
dCgpKQorICAgICAgICByZXR1cm4gc2hhcGU7CisKKyAgICBTaGFwZVZhbHVlKiBzaGFwZVZhbHVl
ID0gKG1fcmVuZGVyZXItPnN0eWxlKCktPipzaGFwZUdldHRlcikoKTsKKyAgICBCYXNpY1NoYXBl
KiBzaGFwZSA9IChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPnR5cGUoKSA9PSBTaGFwZVZhbHVl
OjpTaGFwZSkgPyBzaGFwZVZhbHVlLT5zaGFwZSgpIDogMDsKKworICAgIEFTU0VSVChzaGFwZSk7
CisKKyAgICBtX3NoYXBlID0gU2hhcGU6OmNyZWF0ZVNoYXBlKHNoYXBlLCBMYXlvdXRTaXplKG1f
c2hhcGVMb2dpY2FsV2lkdGgsIG1fc2hhcGVMb2dpY2FsSGVpZ2h0KSwgbV9yZW5kZXJlci0+c3R5
bGUoKS0+d3JpdGluZ01vZGUoKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVNYXJnaW4oKSwg
bV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVQYWRkaW5nKCkpOworICAgIEFTU0VSVChtX3NoYXBl
KTsKKyAgICByZXR1cm4gbV9zaGFwZS5nZXQoKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgUmVuZGVy
VHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21l
bnRMaXN0JikgY29uc3Q+Citib29sIFNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwg
aW50ZXJ2YWxHZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQoreworICAgIEFTU0VSVChsaW5lSGVpZ2h0ID49IDAp
OworICAgIG1fc2hhcGVMaW5lVG9wID0gbGluZVRvcCAtIGxvZ2ljYWxUb3BPZmZzZXQoKTsKKyAg
ICBtX2xpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0OworICAgIG1fc2VnbWVudHMuY2xlYXIoKTsKKwor
ICAgIGlmIChsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQorICAgICAgICAoY29tcHV0ZWRTaGFw
ZSgpLT4qaW50ZXJ2YWxHZXR0ZXIpKG1fc2hhcGVMaW5lVG9wLCBzdGQ6Om1pbihtX2xpbmVIZWln
aHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGluZVRvcCksIG1fc2VnbWVudHMpOworCisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IHRoaXMtPmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NlZ21lbnRzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNhbExlZnRPZmZzZXQ7Cisg
ICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0Owor
ICAgIH0KKworICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKK30KKwordGVtcGxhdGUgY2xh
c3MgU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNp
ZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+OwordGVtcGxhdGUgY2xhc3MgU2hhcGVJ
bmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhj
bHVkZWRJbnRlcnZhbHM+OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTEzZDMyYTVkNjA5NWY1ZDJmMDk4ZThmYjA5
MGE2MTJjNTRlMzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUluZm8uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyog
ICAgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLAorKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisqIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRgorKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyogU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFNoYXBlSW5m
b19oCisjZGVmaW5lIFNoYXBlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5o
IgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgSW5mb1R5
cGU+CitjbGFzcyBNYXBwZWRJbmZvIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSW5mb1R5cGUqIGVu
c3VyZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KQorICAgIHsKKyAgICAgICAgSW5mb01hcCYgaW5m
b01hcCA9IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7CisgICAgICAg
IGlmIChJbmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCisgICAgICAgICAgICByZXR1
cm4gaW5mbzsKKyAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGlu
Zm9NYXAuYWRkKGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7CisgICAgICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBy
ZW1vdmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkgeyBpbmZvTWFwKCkucmVtb3ZlKGtleSk7IH0K
KyAgICBzdGF0aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IHJldHVybiBp
bmZvTWFwKCkuZ2V0KGtleSk7IH0KK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0
IEtleVR5cGUqLCBPd25QdHI8SW5mb1R5cGU+ID4gSW5mb01hcDsKKyAgICBzdGF0aWMgSW5mb01h
cCYgaW5mb01hcCgpCisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9NYXAs
IHN0YXRpY0luZm9NYXAsICgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY0luZm9NYXA7CisgICAg
fQorfTsKKwordGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0
eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIp
KExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+CitjbGFzcyBTaGFw
ZUluZm8geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1
YWwgflNoYXBlSW5mbygpIHsgfQorCisgICAgdm9pZCBzZXRTaGFwZVNpemUoTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCkKKyAgICB7CisgICAgICAgIGlm
IChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgeworICAg
ICAgICAgICAgbG9naWNhbFdpZHRoIC09IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsV2lkdGgoKTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gbV9yZW5kZXJlci0+Ym9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3NoYXBlTG9naWNhbFdpZHRoID09IGxvZ2ljYWxXaWR0aCAmJiBtX3NoYXBlTG9naWNhbEhlaWdo
dCA9PSBsb2dpY2FsSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkaXJ0eVNo
YXBlU2l6ZSgpOworICAgICAgICBtX3NoYXBlTG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoOwor
ICAgICAgICBtX3NoYXBlTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQ7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpOworICAgIHZvaWQgY2xlYXJTZWdtZW50cygpIHsgbV9z
ZWdtZW50cy5jbGVhcigpOyB9CisKKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dp
Y2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBs
b2dpY2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9n
aWNhbExlZnRPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsg
bG9naWNhbExlZnRPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgo
KSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgo
KTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
Y29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9CisKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBs
b2dpY2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBtX2xpbmVIZWlnaHQgKyBsb2dpY2FsVG9w
T2Zmc2V0KCk7IH0KKworICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQo
KSBjb25zdCB7IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09O
VEVOVF9CT1gpID8gKG1fc2hhcGVMb2dpY2FsSGVpZ2h0ICsgbV9yZW5kZXJlci0+Ym9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSkgOiBtX3NoYXBlTG9naWNhbEhlaWdodDsgfQorCisgICAg
Ym9vbCBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMaW5l
VG9wKCkgPCBzaGFwZUxvZ2ljYWxCb3R0b20oKSAmJiBzaGFwZUxvZ2ljYWxUb3AoKSA8PSBsb2dp
Y2FsTGluZUJvdHRvbSgpOyB9CisgICAgYm9vbCBsaW5lV2l0aGluU2hhcGVCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYmIChsb2dpY2FsTGluZUJvdHRv
bSgpIDw9IHNoYXBlTG9naWNhbEJvdHRvbSgpKTsgfQorCisgICAgdm9pZCBkaXJ0eVNoYXBlU2l6
ZSgpIHsgbV9zaGFwZS5jbGVhcigpOyB9CisgICAgYm9vbCBzaGFwZVNpemVEaXJ0eSgpIHsgcmV0
dXJuICFtX3NoYXBlLmdldCgpOyB9CisgICAgY29uc3QgUmVuZGVyVHlwZSogb3duZXIoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICBTaGFwZUluZm8oY29u
c3QgUmVuZGVyVHlwZSogcmVuZGVyZXIpOiBtX3JlbmRlcmVyKHJlbmRlcmVyKSB7IH0KKworICAg
IGNvbnN0IFNoYXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisKKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLT5z
dHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVyZXItPmJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUoKSA6IExheW91dFVuaXQoKTsgfTsKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNp
emluZygpID09IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLT5pc1JlbmRlclJlZ2lvbigpKSA/
IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpIDogTGF5b3V0VW5pdCgpOyB9CisK
KyAgICBMYXlvdXRVbml0IG1fc2hhcGVMaW5lVG9wOworICAgIExheW91dFVuaXQgbV9saW5lSGVp
Z2h0OworICAgIFNlZ21lbnRMaXN0IG1fc2VnbWVudHM7CisKK3ByaXZhdGU6CisgICAgbXV0YWJs
ZSBPd25QdHI8U2hhcGU+IG1fc2hhcGU7CisKKyAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2Fs
V2lkdGg7CisgICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbEhlaWdodDsKKyAgICBjb25zdCBS
ZW5kZXJUeXBlKiBtX3JlbmRlcmVyOworfTsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDEyOTVkMDNlZGIyNzNmYWU3YmFiZWNkMWM0YmFlMDllYWFjZTBkZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZv
LmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCisKKyNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMaW5lU2VnbWVudFJh
bmdlOjpMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydCwgY29uc3Qg
SW5saW5lSXRlcmF0b3ImIGVuZCkKKyAgICA6IHN0YXJ0KHN0YXJ0LnJvb3QoKSwgc3RhcnQub2Jq
ZWN0KCksIHN0YXJ0Lm9mZnNldCgpKQorICAgICwgZW5kKGVuZC5yb290KCksIGVuZC5vYmplY3Qo
KSwgZW5kLm9mZnNldCgpKQorICAgIHsKKyAgICB9CisKK2Jvb2wgU2hhcGVJbnNpZGVJbmZvOjpp
c0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQoreworICAgIFNoYXBlVmFs
dWUqIHNoYXBlVmFsdWUgPSByZW5kZXJlci0+c3R5bGUoKS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgp
OworICAgIGlmICghc2hhcGVWYWx1ZSB8fCBzaGFwZVZhbHVlLT50eXBlKCkgIT0gU2hhcGVWYWx1
ZTo6U2hhcGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJhc2ljU2hhcGUqIHNoYXBl
ID0gc2hhcGVWYWx1ZS0+c2hhcGUoKTsKKyAgICByZXR1cm4gc2hhcGUgJiYgc2hhcGUtPnR5cGUo
KSAhPSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOworfQorCitib29s
IFNoYXBlSW5zaWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVudFdp
ZHRoKQoreworICAgIGNvbnN0IFNoYXBlKiBzaGFwZSA9IGNvbXB1dGVkU2hhcGUoKTsKKyAgICBp
ZiAoIXNoYXBlIHx8IG1fbGluZUhlaWdodCA8PSAwIHx8IGxvZ2ljYWxMaW5lVG9wKCkgPiBzaGFw
ZUxvZ2ljYWxCb3R0b20oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTGF5b3V0VW5p
dCBuZXdMaW5lVG9wOworICAgIGlmIChzaGFwZS0+Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNh
bFRvcChtX3NoYXBlTGluZVRvcCwgTGF5b3V0U2l6ZShtaW5TZWdtZW50V2lkdGgsIG1fbGluZUhl
aWdodCksIG5ld0xpbmVUb3ApKSB7CisgICAgICAgIGlmIChuZXdMaW5lVG9wID4gbV9zaGFwZUxp
bmVUb3ApIHsKKyAgICAgICAgICAgIG1fc2hhcGVMaW5lVG9wID0gbmV3TGluZVRvcDsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbnNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMDZiMzY0NTRiOWRhYjFjMjAyNjU3NzA1
ZWQ0OTcxODliYzdlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICog
ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVJbnNpZGVJbmZvX2gKKyNkZWZpbmUgU2hh
cGVJbnNpZGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiU2hh
cGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5saW5lSXRlcmF0b3I7Citj
bGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlck9iamVjdDsKKworc3RydWN0IExpbmVTZWdt
ZW50SXRlcmF0b3IgeworICAgIFJlbmRlck9iamVjdCogcm9vdDsKKyAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvcihS
ZW5kZXJPYmplY3QqIHJvb3QsIFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQp
CisgICAgICAgIDogcm9vdChyb290KQorICAgICAgICAsIG9iamVjdChvYmplY3QpCisgICAgICAg
ICwgb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorfTsKKworc3RydWN0IExpbmVTZWdtZW50
UmFuZ2UgeworICAgIExpbmVTZWdtZW50SXRlcmF0b3Igc3RhcnQ7CisgICAgTGluZVNlZ21lbnRJ
dGVyYXRvciBlbmQ7CisgICAgTGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVyYXRvciYg
c3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQpOworfTsKKwordHlwZWRlZiBWZWN0b3I8
TGluZVNlZ21lbnRSYW5nZT4gU2VnbWVudFJhbmdlTGlzdDsKKworY2xhc3MgU2hhcGVJbnNpZGVJ
bmZvIDogcHVibGljIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZl
ZFNoYXBlSW5zaWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGVJbnNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJl
bmRlckJsb2NrKiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNoYXBlSW5zaWRlSW5m
byhyZW5kZXJlcikpOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVu
ZGVyQmxvY2sqIHJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNG
b3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklE
RQorICAgIHsKKyAgICAgICAgbV9zZWdtZW50UmFuZ2VzLmNsZWFyKCk7CisgICAgICAgIHJldHVy
biBTaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lk
ZSwgJlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUo
bGluZVRvcCwgbGluZUhlaWdodCk7CisgICAgfQorCisgICAgYm9vbCBoYXNTZWdtZW50cygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiBt
X3NlZ21lbnRzLnNpemUoKTsKKyAgICB9CisgICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTZWdtZW50cygpKTsKKyAgICAgICAg
cmV0dXJuIG1fc2VnbWVudHM7CisgICAgfQorICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRS
YW5nZXMoKSB7IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7IH0KKyAgICBjb25zdCBTZWdtZW50UmFu
Z2VMaXN0JiBzZWdtZW50UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9
CisgICAgY29uc3QgTGluZVNlZ21lbnQqIGN1cnJlbnRTZWdtZW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghaGFzU2VnbWVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBBU1NFUlQobV9zZWdtZW50UmFuZ2VzLnNpemUoKSA8IG1fc2VnbWVudHMuc2l6ZSgpKTsKKyAg
ICAgICAgcmV0dXJuICZtX3NlZ21lbnRzW21fc2VnbWVudFJhbmdlcy5zaXplKCldOworICAgIH0K
KyAgICBib29sIGFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21lbnRXaWR0aCk7CisK
KyAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJvb2wgdmFsdWUpIHsgbV9uZWVkc0xheW91dCA9IHZh
bHVlOyB9CisgICAgYm9vbCBuZWVkc0xheW91dCgpIHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0K
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNh
bEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5z
aGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKTsgfQorCitwcml2YXRlOgorICAgIFNoYXBl
SW5zaWRlSW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCisgICAgOiBTaGFwZUluZm88
UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJlNoYXBlOjpn
ZXRJbmNsdWRlZEludGVydmFscz4gKHJlbmRlcmVyKQorICAgICwgbV9uZWVkc0xheW91dChmYWxz
ZSkKKyAgICB7IH0KKworICAgIFNlZ21lbnRSYW5nZUxpc3QgbV9zZWdtZW50UmFuZ2VzOworICAg
IGJvb2wgbV9uZWVkc0xheW91dDoxOworfTsKKworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI1NTgwMzhiMjQ3YzNjODc1NzJlNTg2MGYwOGM4MTkyYjIxYmE0NTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3Bw
CkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNoYXBlSW50ZXJ2YWwuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9yIHsKKyAgICBib29s
IG9wZXJhdG9yKCkgKGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGkxLCBjb25zdCBTaGFwZUludGVydmFs
JiBpMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpMS54MSA8IGkyLngxOworICAgIH0K
K307CisKK2Jvb2wgU2hhcGVJbnRlcnZhbDo6aW50ZXJzZWN0KGNvbnN0IFNoYXBlSW50ZXJ2YWwm
IGksIFNoYXBlSW50ZXJ2YWwmIHJ2KSBjb25zdAoreworICAgIGlmICh4MiA8IGkueDEgfHwgeDEg
PiBpLngyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcnYueDEgPSBzdGQ6Om1heCh4MSwg
aS54MSk7CisgICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54Mik7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgc29ydFNoYXBlSW50ZXJ2YWxzKFZlY3RvcjxTaGFwZUludGVydmFsPiYgdikK
K3sKKyAgICBzdGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgpLCBJbnRlcnZhbFgxQ29tcGFyYXRv
cigpKTsKK30KKwordm9pZCBtZXJnZVNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFw
ZUludGVydmFsPiYgcnYpCit7CisgICAgaWYgKCF2MS5zaXplKCkpCisgICAgICAgIHJ2LmFwcGVu
ZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgpKTsKKyAgICBlbHNlIGlmICghdjIuc2l6ZSgpKQor
ICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiB2KHYxLnNpemUoKSArIHYyLnNpemUoKSk7
CisgICAgICAgIFNoYXBlSW50ZXJ2YWwqIGludGVydmFsID0gMDsKKworICAgICAgICBzdGQ6Om1l
cmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgdi5iZWdpbigp
LCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHYuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghaW50ZXJ2YWwpCisgICAgICAg
ICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZbaV0ueDEg
Pj0gaW50ZXJ2YWwtPngxICYmIHZbaV0ueDEgPD0gaW50ZXJ2YWwtPngyKSAvLyBGSVhNRTogMXN0
IDw9IHRlc3Qgbm90IG5lZWRlZD8KKyAgICAgICAgICAgICAgICBpbnRlcnZhbC0+eDIgPSBzdGQ6
Om1heChpbnRlcnZhbC0+eDIsIHZbaV0ueDIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwg
PSAmdltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnRlcnZh
bCkKKyAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOworICAgIH0KK30KKwordm9pZCBp
bnRlcnNlY3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYxLCBj
b25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYyLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJ2
KQoreworICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6ZV90IHYyU2l6ZSA9
IHYyLnNpemUoKTsKKworICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgYm9vbCBvdmVybGFwID0gZmFs
c2U7CisgICAgc2l6ZV90IGkxID0gMDsKKyAgICBzaXplX3QgaTIgPSAwOworCisgICAgd2hpbGUg
KGkxIDwgdjFTaXplICYmIGkyIDwgdjJTaXplKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgdjEy
OworICAgICAgICBpZiAodjFbaTFdLmludGVyc2VjdCh2MltpMl0sIHYxMikpIHsKKyAgICAgICAg
ICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmludGVyc2VjdChpbnRlcnZhbCwgaW50ZXJ2YWwpKSB7
CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICAgICAgICAgIHJ2LmFw
cGVuZChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSB2MTI7CisgICAgICAg
ICAgICAgICAgb3ZlcmxhcCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
djFbaTFdLngyIDwgdjJbaTJdLngyKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChvdmVybGFwKQorICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Cisg
ICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodjFbaTFdLngxIDwg
djJbaTJdLngxKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVybGFwKQor
ICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworfQorCit2b2lkIHN1YnRyYWN0U2hhcGVJbnRl
cnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFNoYXBl
SW50ZXJ2YWw+JiB2MiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBydikKK3sKKyAgICBzaXplX3Qg
djFTaXplID0gdjEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAg
ICBpZiAoIXYxU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2MlNpemUpCisgICAg
ICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgc2l6ZV90IGkxID0gMCwgaTIgPSAwOworICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5i
ZWdpbigpLCB2MS5lbmQoKSk7CisKKyAgICAgICAgd2hpbGUgKGkxIDwgcnYuc2l6ZSgpICYmIGky
IDwgdjJTaXplKSB7CisgICAgICAgICAgICBTaGFwZUludGVydmFsJiBpbnRlcnZhbDEgPSBydltp
MV07CisgICAgICAgICAgICBjb25zdCBTaGFwZUludGVydmFsJiBpbnRlcnZhbDIgPSB2MltpMl07
CisKKyAgICAgICAgICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVy
dmFsMi54MiA+PSBpbnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgcnYucmVtb3ZlKGkxKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MiA8IGludGVydmFsMS54MSkKKyAgICAg
ICAgICAgICAgICBpMiArPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4g
aW50ZXJ2YWwxLngyKQorICAgICAgICAgICAgICAgIGkxICs9IDE7CisgICAgICAgICAgICBlbHNl
IGlmIChpbnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyIDwgaW50ZXJ2
YWwxLngyKSB7CisgICAgICAgICAgICAgICAgcnYuaW5zZXJ0KGkxLCBTaGFwZUludGVydmFsKGlu
dGVydmFsMS54MSwgaW50ZXJ2YWwyLngxKSk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngx
ID0gaW50ZXJ2YWwyLngyOworICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGludGVydmFsMi54MSA8PSBpbnRlcnZhbDEueDEpIHsKKyAgICAgICAgICAgICAg
ICBpbnRlcnZhbDEueDEgPSBpbnRlcnZhbDIueDI7CisgICAgICAgICAgICAgICAgaTIgKz0gMTsK
KyAgICAgICAgICAgIH0gZWxzZSAgeyAvLyAoaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikK
KyAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDIgPSBpbnRlcnZhbDIueDE7CisgICAgICAgICAg
ICAgICAgaTEgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUludGVydmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW50ZXJ2YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmYxNGQ4YTVhNzIzMmQ5MmVkYTNkZmQ5Mzc3
OGE5MmNkNjk1NDQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUludGVydmFsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2hhcGVJbnRlcnZhbF9oCisjZGVmaW5lIFNoYXBlSW50ZXJ2YWxfaAorCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBTaGFwZUludGVydmFs
IHsKK3B1YmxpYzoKKyAgICBmbG9hdCB4MTsKKyAgICBmbG9hdCB4MjsKKworICAgIFNoYXBlSW50
ZXJ2YWwoZmxvYXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApCisgICAgICAgIDogeDEoeDEpCisgICAg
ICAgICwgeDIoeDIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaW50ZXJzZWN0KGNvbnN0IFNo
YXBlSW50ZXJ2YWwmLCBTaGFwZUludGVydmFsJikgY29uc3Q7Cit9OworCit2b2lkIHNvcnRTaGFw
ZUludGVydmFscyhWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgbWVyZ2VTaGFwZUludGVy
dmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRl
cnZhbD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgaW50ZXJzZWN0U2hhcGVJbnRl
cnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFNoYXBlSW50
ZXJ2YWw+JiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7Cit2b2lkIHN1YnRyYWN0U2hhcGVJbnRl
cnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFNoYXBlSW50
ZXJ2YWw+JiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFNoYXBlSW50ZXJ2YWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE5MmY2
NTA1ZDgyMTI4MzkyODJmYWQ5M2U2ZTI2M2IwZGFkMjFmNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
IOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJTaGFwZU91dHNp
ZGVJbmZvLmgiCisKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworYm9vbCBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94KiBi
b3gpCit7CisgICAgU2hhcGVWYWx1ZSogdmFsdWUgPSBib3gtPnN0eWxlKCktPnNoYXBlT3V0c2lk
ZSgpOworICAgIHJldHVybiBib3gtPmlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYgdmFs
dWUtPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSAmJiB2YWx1ZS0+c2hhcGUoKTsKK30KKwor
Ym9vbCBTaGFwZU91dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQg
bGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQoreworICAgIGlmIChzaGFwZVNpemVEaXJ0
eSgpIHx8IG1fbGluZVRvcCAhPSBsaW5lVG9wIHx8IG1fbGluZUhlaWdodCAhPSBsaW5lSGVpZ2h0
KSB7CisgICAgICAgIGlmIChTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBl
T3V0c2lkZSwgJlNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0Zv
ckxpbmUobGluZVRvcCwgbGluZUhlaWdodCkpIHsKKyAgICAgICAgICAgIG1fbGVmdFNlZ21lbnRT
aGFwZUJvdW5kaW5nQm94RGVsdGEgPSBtX3NlZ21lbnRzWzBdLmxvZ2ljYWxMZWZ0IC0gc2hhcGVM
b2dpY2FsTGVmdCgpOworICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94
RGVsdGEgPSBtX3NlZ21lbnRzW21fc2VnbWVudHMuc2l6ZSgpLTFdLmxvZ2ljYWxSaWdodCAtIHNo
YXBlTG9naWNhbFJpZ2h0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xlZnRT
ZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKKyAgICAgICAgICAgIG1fcmlnaHRTZWdt
ZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKKyAgICAgICAgfQorICAgICAgICBtX2xpbmVU
b3AgPSBsaW5lVG9wOworICAgIH0KKworICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKK30K
KworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlT3V0c2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiZTU5MDU2Y2MxZWQ3ZDAyNDYyZWY0YTQ3MTZj
ZDM5N2JiZWEzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlT3V0c2lkZUluZm9faAorI2RlZmluZSBT
aGFwZU91dHNpZGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAi
TGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIlNoYXBlSW5mby5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlbmRlckJveDsKKworY2xhc3MgU2hhcGVPdXRzaWRlSW5mbyA6IHB1Ymxp
YyBTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlNoYXBl
OjpnZXRFeGNsdWRlZEludGVydmFscz4sIHB1YmxpYyBNYXBwZWRJbmZvPFJlbmRlckJveCwgU2hh
cGVPdXRzaWRlSW5mbz4geworcHVibGljOgorICAgIExheW91dFNpemUgc2hhcGVMb2dpY2FsT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0U2l6ZShzaGFwZUxvZ2ljYWxMZWZ0KCksIHNoYXBl
TG9naWNhbFRvcCgpKTsgfQorCisgICAgTGF5b3V0VW5pdCBsZWZ0U2VnbWVudFNoYXBlQm91bmRp
bmdCb3hEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94
RGVsdGE7IH0KKyAgICBMYXlvdXRVbml0IHJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkgT1ZFUlJJREU7CisKKyAgICBzdGF0aWMgUGFz
c093blB0cjxTaGFwZU91dHNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVu
ZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaGFwZU91dHNpZGVJbmZvKHJlbmRlcmVyKSk7
IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94Kik7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3Vu
ZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS0+c2hhcGVN
YXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQorCitwcml2YXRlOgorICAgIFNoYXBlT3V0c2lk
ZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgOiBTaGFwZUluZm88UmVuZGVyQm94LCAm
UmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4o
cmVuZGVyZXIpIHsgfQorCisgICAgTGF5b3V0VW5pdCBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGlu
Z0JveERlbHRhOworICAgIExheW91dFVuaXQgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94
RGVsdGE7CisgICAgTGF5b3V0VW5pdCBtX2xpbmVUb3A7Cit9OworCit9CisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNo
YXBlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNpb25TaGFw
ZVZhbHVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOWQzOTU3MzIzODJmM2Iy
NzZhYzU2NzZhNjJkYjE2ZjA3ZmVjYjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNo
YXBlVmFsdWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQot
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFwZVZhbHVlX2gKLSNkZWZpbmUgRXhj
bHVzaW9uU2hhcGVWYWx1ZV9oCi0KLSNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgotI2luY2x1ZGUg
IlN0eWxlSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEV4Y2x1c2lvblNoYXBlVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxFeGNsdXNpb25TaGFwZVZhbHVlPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBFeGNsdXNpb25TaGFw
ZVZhbHVlVHlwZSB7Ci0gICAgICAgIC8vIFRoZSBBdXRvIHZhbHVlIGlzIGRlZmluZWQgYnkgYSBu
dWxsIEV4Y2x1c2lvblNoYXBlVmFsdWUqCi0gICAgICAgIFNoYXBlLAotICAgICAgICBPdXRzaWRl
LAotICAgICAgICBJbWFnZQotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGNsdXNp
b25TaGFwZVZhbHVlPiBjcmVhdGVTaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gc2hh
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4Y2x1c2lvblNoYXBlVmFs
dWUoc2hhcGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFw
ZVZhbHVlPiBjcmVhdGVPdXRzaWRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBFeGNsdXNpb25TaGFwZVZhbHVlKE91dHNpZGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBjcmVhdGVJbWFnZVZhbHVlKFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEV4Y2x1c2lvblNoYXBlVmFsdWUoaW1hZ2UpKTsKLSAgICB9Ci0KLSAgICBFeGNsdXNpb25T
aGFwZVZhbHVlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgQmFzaWNT
aGFwZSogc2hhcGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLmdldCgpOyB9Ci0gICAgU3R5bGVJ
bWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgdm9pZCBz
ZXRJbWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgIHsKLSAgICAgICAgaWYg
KG1faW1hZ2UgIT0gaW1hZ2UpCi0gICAgICAgICAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgfQot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKTsgfQotCi1wcml2YXRlOgotICAgIEV4
Y2x1c2lvblNoYXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZSkKLSAgICAgICAg
OiBtX3R5cGUoU2hhcGUpCi0gICAgICAgICwgbV9zaGFwZShzaGFwZSkKLSAgICB7Ci0gICAgfQot
ICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUoRXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgdHlwZSkKLSAg
ICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICB7Ci0gICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFs
dWUoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAgICAgICAgOiBtX3R5cGUoSW1hZ2Up
Ci0gICAgICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICB7Ci0gICAgfQotICAgIEV4Y2x1c2lvblNo
YXBlVmFsdWVUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8QmFzaWNTaGFwZT4gbV9zaGFwZTsKLSAg
ICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFnZTsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCBiOGIyMjBh
YjZjMTQ0MTlkMjA5OTBiZTIwOGFlMzY4NWY3NWM3YjkwLi5hNDAzN2MyNTkyMTA1OTBkYzQ0MGEy
OGJkZWRjOGM0MDhmYmIwZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTE3MzMsOSArMTczMyw5IEBAIHZvaWQgUmVuZGVyU3R5bGU6
OnNldEJvcmRlckltYWdlT3V0c2V0KExlbmd0aEJveCBvdXRzZXQpCiAgICAgc3Vycm91bmQuYWNj
ZXNzKCktPmJvcmRlci5tX2ltYWdlLnNldE91dHNldChvdXRzZXQpOwogfQogCi1FeGNsdXNpb25T
aGFwZVZhbHVlKiBSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlKCkKK1NoYXBlVmFsdWUq
IFJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGUoKQogewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+LCBzT3V0c2lkZVZhbHVlLCAoRXhjbHVz
aW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFJlZlB0cjxTaGFwZVZhbHVlPiwgc091dHNpZGVWYWx1ZSwgKFNoYXBlVmFsdWU6OmNy
ZWF0ZU91dHNpZGVWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIHNPdXRzaWRlVmFsdWUuZ2V0KCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXgg
NjkyMjBmMzA3YTc2NWJkZDUwMmZkOTgxYmIxNzc4YWYyZDc2MzE5ZS4uODNmZTAyMzhkMjRhNWJi
NTFmYTRiNDVlMmZhMDRjNTgzZDkzODNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJDb2xvclNw
YWNlLmgiCiAjaW5jbHVkZSAiQ291bnRlckRpcmVjdGl2ZXMuaCIKICNpbmNsdWRlICJEYXRhUmVm
LmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRCYXNl
bGluZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKQEAgLTQ5LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50
cy5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgor
I2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNpbmNsdWRlICJTdHlsZUJhY2tncm91bmREYXRhLmgi
CiAjaW5jbHVkZSAiU3R5bGVCb3hEYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVEZXByZWNhdGVkRmxl
eGlibGVCb3hEYXRhLmgiCkBAIC0xNDcwLDMxICsxNDcwLDMxIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEtlcm5pbmcoU1ZHTGVuZ3RoIGspIHsgYWNjZXNzU1ZHU3R5bGUoKS0+c2V0S2VybmluZyhr
KTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIHNldFNoYXBlSW5zaWRlKFBhc3NSZWZQdHI8RXhjbHVz
aW9uU2hhcGVWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRTaGFwZUluc2lkZShQYXNzUmVmUHRy
PFNoYXBlVmFsdWU+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX3NoYXBlSW5zaWRlID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9zaGFwZUluc2lkZSA9IHZhbHVlOwog
ICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZUluc2lkZSgpIGNvbnN0IHsgcmV0
dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlSW5zaWRlLmdldCgpOyB9Ci0gICAgRXhj
bHVzaW9uU2hhcGVWYWx1ZSogcmVzb2x2ZWRTaGFwZUluc2lkZSgpIGNvbnN0CisgICAgU2hhcGVW
YWx1ZSogc2hhcGVJbnNpZGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV9zaGFwZUluc2lkZS5nZXQoKTsgfQorICAgIFNoYXBlVmFsdWUqIHJlc29sdmVkU2hhcGVJbnNp
ZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVJbnNp
ZGUgPSB0aGlzLT5zaGFwZUluc2lkZSgpOwotICAgICAgICBpZiAoc2hhcGVJbnNpZGUgJiYgc2hh
cGVJbnNpZGUtPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpPdXRzaWRlKQorICAgICAg
ICBTaGFwZVZhbHVlKiBzaGFwZUluc2lkZSA9IHRoaXMtPnNoYXBlSW5zaWRlKCk7CisgICAgICAg
IGlmIChzaGFwZUluc2lkZSAmJiBzaGFwZUluc2lkZS0+dHlwZSgpID09IFNoYXBlVmFsdWU6Ok91
dHNpZGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcGVPdXRzaWRlKCk7CiAgICAgICAgIHJldHVy
biBzaGFwZUluc2lkZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFNoYXBlT3V0c2lkZShQYXNzUmVm
UHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKQorICAgIHZvaWQgc2V0U2hhcGVPdXRzaWRl
KFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBpZiAocmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlID09IHZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9zaGFwZU91dHNp
ZGUgPSB2YWx1ZTsKICAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRl
KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlLmdl
dCgpOyB9CisgICAgU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlKCkgY29uc3QgeyByZXR1cm4gcmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlLmdldCgpOyB9CiAKLSAgICBzdGF0aWMg
RXhjbHVzaW9uU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlSW5zaWRlKCk7Ci0gICAgc3RhdGljIEV4
Y2x1c2lvblNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZU91dHNpZGUoKSB7IHJldHVybiAwOyB9Cisg
ICAgc3RhdGljIFNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZUluc2lkZSgpOworICAgIHN0YXRpYyBT
aGFwZVZhbHVlKiBpbml0aWFsU2hhcGVPdXRzaWRlKCkgeyByZXR1cm4gMDsgfQogCiAgICAgdm9p
ZCBzZXRDbGlwUGF0aChQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBvcGVyYXRpb24pCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjc0YWVlYjI5ZjgyNWNiYTU5Mzg1N2IxMDlhOWQxYWI0NDQ5Y2IwZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmgKQEAg
LTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIElu
Y29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
QkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBl
VmFsdWVfaAorI2RlZmluZSBTaGFwZVZhbHVlX2gKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcGVWYWx1ZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNoYXBlVmFsdWU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFNoYXBlVmFsdWVUeXBlIHsKKyAg
ICAgICAgLy8gVGhlIEF1dG8gdmFsdWUgaXMgZGVmaW5lZCBieSBhIG51bGwgU2hhcGVWYWx1ZSoK
KyAgICAgICAgU2hhcGUsCisgICAgICAgIE91dHNpZGUsCisgICAgICAgIEltYWdlCisgICAgfTsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGNyZWF0ZVNoYXBlVmFsdWUoUGFz
c1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2hhcGVWYWx1ZShzaGFwZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXBlVmFsdWU+IGNyZWF0ZU91dHNpZGVWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNoYXBlVmFsdWUoT3V0c2lkZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXBlVmFsdWU+IGNyZWF0ZUltYWdlVmFsdWUoUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBpbWFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcGVWYWx1
ZShpbWFnZSkpOworICAgIH0KKworICAgIFNoYXBlVmFsdWVUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKyAgICBCYXNpY1NoYXBlKiBzaGFwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhcGUuZ2V0KCk7IH0KKyAgICBTdHlsZUltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
aW1hZ2UpCisgICAgeworICAgICAgICBpZiAobV9pbWFnZSAhPSBpbWFnZSkKKyAgICAgICAgICAg
IG1faW1hZ2UgPSBpbWFnZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBl
VmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpOyB9CisK
K3ByaXZhdGU6CisgICAgU2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlKQor
ICAgICAgICA6IG1fdHlwZShTaGFwZSkKKyAgICAgICAgLCBtX3NoYXBlKHNoYXBlKQorICAgIHsK
KyAgICB9CisgICAgU2hhcGVWYWx1ZShTaGFwZVZhbHVlVHlwZSB0eXBlKQorICAgICAgICA6IG1f
dHlwZSh0eXBlKQorICAgIHsKKyAgICB9CisgICAgU2hhcGVWYWx1ZShQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IGltYWdlKQorICAgICAgICA6IG1fdHlwZShJbWFnZSkKKyAgICAgICAgLCBtX2ltYWdl
KGltYWdlKQorICAgIHsKKyAgICB9CisgICAgU2hhcGVWYWx1ZVR5cGUgbV90eXBlOworICAgIFJl
ZlB0cjxCYXNpY1NoYXBlPiBtX3NoYXBlOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBtX2ltYWdl
OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4IDBhM2M3YThjYWMx
YmMyMGEwZTQ0NWQ5NzMzZDcwNWE2MDViZDExY2MuLjA3NjdhZDhjMzFmYzdkZjhkZmFkOWM4YWRh
OTQ5OWJlMGM5ZjQ5ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaApAQCAtMzAsMTAgKzMwLDEwIEBA
CiAjaW5jbHVkZSAiQ291bnRlckRpcmVjdGl2ZXMuaCIKICNpbmNsdWRlICJDdXJzb3JEYXRhLmgi
CiAjaW5jbHVkZSAiRGF0YVJlZi5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIK
ICNpbmNsdWRlICJGaWxsTGF5ZXIuaCIKICNpbmNsdWRlICJMaW5lQ2xhbXBWYWx1ZS5oIgogI2lu
Y2x1ZGUgIk5pbmVQaWVjZUltYWdlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTEzNiw4ICsxMzYsOCBAQCBwdWJsaWM6CiAKICAgICBMZW5ndGhT
aXplIG1fcGFnZVNpemU7CiAKLSAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gbV9zaGFw
ZUluc2lkZTsKLSAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gbV9zaGFwZU91dHNpZGU7
CisgICAgUmVmUHRyPFNoYXBlVmFsdWU+IG1fc2hhcGVJbnNpZGU7CisgICAgUmVmUHRyPFNoYXBl
VmFsdWU+IG1fc2hhcGVPdXRzaWRlOwogICAgIExlbmd0aCBtX3NoYXBlTWFyZ2luOwogICAgIExl
bmd0aCBtX3NoYXBlUGFkZGluZzsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203953</attachid>
            <date>2013-06-06 11:19:04 -0700</date>
            <delta_ts>2013-06-06 14:20:05 -0700</delta_ts>
            <desc>Adding directory</desc>
            <filename>bug-117162-20130606111732.patch</filename>
            <type>text/plain</type>
            <size>285817</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzljMDg4N2EyYTdjYTIx
YTBiZGQwZjBjYTY3OWMyMTBjMzUzYzNlYy4uOWFjYTM2YmQ3NGFkYTE0ZDgxOTM1YTRkZjIzY2Ux
Y2I1YWI0ZmVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMiBAQAorMjAxMy0wNi0wNiAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSBz
cGxpdCBiZXR3ZWVuIHRoZSBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9ucywKKyAgICAgICAgc29tZSByZW5hbWluZyBpcyBuZWNlc3NhcnkuIEluIGdlbmVyYWwsIHRo
aXMgcGF0Y2ggcmVtb3ZlcyAnRXhjbHVzaW9uJyBmcm9tCisgICAgICAgIGFueSBTaGFwZXMgY29k
ZSwgbW9zdGx5IHJlbmFtaW5nIEV4Y2x1c2lvblNoYXBlIC0+IFNoYXBlLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAg
ICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
cHJvcGVydHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAg
ICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVNoYXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5U2hhcGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVNoYXBlOjpjcmVhdGVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVu
Yyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFw
cGVyU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmVuc3Vy
ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlv
dXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2hhcGVJbnNpZGVJbmZv
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVTaGFwZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0
ZXJDaGlsZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0Rmxv
YXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dp
Y2FsTG9jYXRpb25Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9z
aXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5zdXJlU2hhcGVJbnNpZGVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaGFwZUluc2lkZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNldFNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnlQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRTaGFwZUluc2lkZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpMaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rp
b25Qb3NpdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5z
Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMb2dpY2FsTGluZVRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5k
TG9naWNhbEhlaWdodElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6d2lsbEJlRGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJT
dHlsZUNoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzaGFwZU91dHNpZGVJbmZvKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50T2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmll
dy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JlZmxleFZlcnRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjppbndhcmRFZGdlTm9ybWFsKToKKyAgICAgICAgKFdlYkNvcmU6Om91dHdhcmRFZGdlTm9ybWFs
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
VmVydGljZXNUb0xheW91dFVuaXRHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTaGFw
ZVBhZGRpbmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNoYXBlTWFyZ2luQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVF
ZGdlSW50ZXJzZWN0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdl
YkNvcmU6OmFib3ZlT3JUb1RoZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBl
OjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1BvbHlnb25TaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25F
ZGdlOjpPZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29u
RWRnZTo6ZWRnZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpi
YXNpcyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OlBvbHlnb25TaGFwZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlw
c2VZSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OnBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2Vw
dEZvcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBlTWFyZ2lu
Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZElu
dGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJ
bnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFu
Z2xlU2hhcGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OkZsb2F0
Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cngpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVjdGFuZ2xlU2hhcGU6OlJlY3RhbmdsZVNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWN0YW5nbGVTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9seWdv
blNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUmVjdFRvTG9naWNhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6
OnBoeXNpY2FsU2l6ZVRvTG9naWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRl
U2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oLgorICAgICAgICAoV2Vi
Q29yZTo6TGluZVNlZ21lbnQ6OkxpbmVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
Ojp+U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlTWFyZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpzaGFwZVBhZGRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wdXRlZFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hcHBlZEluZm86OmVuc3VyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6
cmVtb3ZlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjppbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcHBlZEluZm86OmluZm9NYXApOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVJbmZvOjp+U2hhcGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2V0U2hh
cGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6Y2xlYXJTZWdtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJ
bmZvOjpzaGFwZUxvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNo
YXBlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dp
Y2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExpbmVUb3Ap
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGluZUJvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsaW5lV2l0aGluU2hhcGVCb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpkaXJ0eVNoYXBlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlU2l6ZURpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5m
bzo6b3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpTaGFwZUluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsVG9wT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6TGluZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZVNlZ21lbnRJdGVyYXRvcjo6TGluZVNlZ21lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJ
bnNpZGVJbmZvOjpoYXNTZWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUlu
Zm86OnNlZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2VnbWVu
dFJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OmN1cnJlbnRTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2V0TmVlZHNMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpuZWVkc0xheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OlNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUludGVydmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFNoYXBl
SW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlU2hhcGVJbnRlcnZhbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6c3VidHJhY3RTaGFwZUludGVydmFscyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUludGVydmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uSW50ZXJ2YWwuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW50ZXJ2YWw6OlNoYXBl
SW50ZXJ2YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjppc0Vu
YWJsZWRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNl
Z21lbnRzRm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJ
bmZvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hh
cGVMb2dpY2FsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86Omxl
ZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
T3V0c2lkZUluZm86OnJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlT3V0c2lkZUluZm86OlNoYXBlT3V0c2lkZUluZm8pOgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6aW5pdGlhbFNoYXBlSW5zaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUu
aC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcGVWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpzaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZVZhbHVlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVl
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OlNoYXBlVmFsdWUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6
CisKIDIwMTMtMDYtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFJlc291cmNlTG9hZGVyOjpyZXNvdXJjZURhdGEoKSBzaG91bGQgbm90IHJl
dHVybiBhIFBhc3NSZWZQdHIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGU4MzczNTljOTM1NjZk
YzU1NmE0ZTNmMjg3OWNjNmI3OTcyMWVmZC4uZWJmZmE0ZGY0NTkzODM0ODNiM2FhY2MxZTQwNjJi
MjU2NGRjN2U3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTc2LDYgKzc2LDcgQEAgc2V0KFdl
YkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zIgog
ICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRl
cmluZy9tYXRobWwiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zaGFwZXMiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zdHlsZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVu
ZGVyaW5nL3N2ZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3RvcmFnZSIKQEAgLTIwOTMsMTMgKzIw
OTQsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiAg
ICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwCi0gICAgcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAK
LSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5mby5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNw
cAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcAogICAgIHJlbmRl
cmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxh
eW91dC5jcHAKICAgICByZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCkBAIC0yMjAw
LDYgKzIxOTQsMTMgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJX
b3JkQnJlYWsuY3BwCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgcmVuZGVy
aW5nL1Njcm9sbEJlaGF2aW9yLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBl
LmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCisgICAgcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAK
KyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAKKyAgICByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmNwcAogICAgIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAogICAgIHJlbmRlcmlu
Zy9icmVha19saW5lcy5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggODQx
YTU0MTk1MDRiODYwN2VjMjRhYTQzZjE3Yzk2MTkyNmY1Y2JmMS4uNDcwOTBjZWZjZTUyOGRlYzBh
ZjJiMmZlMDUzMWQ1NzBjY2ExODYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC00Mzg1LDIwICs0Mzg1LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmgg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uUmVjdGFuZ2xlLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXApAQCAtNDYxMCw2ICs0NTk2LDIwIEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvUmVjdGFuZ2xlU2hhcGUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXpl
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmgg
XApAQCAtNDY0Niw3ICs0NjQ2LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvQ3Vyc29yRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvQ3Vyc29yTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRGF0YVJlZi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9u
U2hhcGVWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVy
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uLmggXApAQCAtNDY2Myw2
ICs0NjYyLDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1NoYWRvd0RhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93
RGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJveERhdGEuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCmluZGV4IDBiNGE0ZmQ5ZDA2ZGRkODUzZjIwNmMxNTJiMDdkYzAyYzJmMmE2NzkuLjA3
YmE4YmQ5NzdhZjc4M2ZkMTE1ZjMwY2Q2MWRjNGVmMjRkODRiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAt
MTE0NSwxMyArMTE0NSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNw
cCBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcCBcCiAgICAgcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBcCi0gICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9u
UmVjdGFuZ2xlLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBcCi0gICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5jcHAgXAogICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAog
ICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL0Zsb3dU
aHJlYWRDb250cm9sbGVyLmNwcCBcCkBAIC0xMjQ1LDYgKzEyMzgsMTMgQEAgU09VUkNFUyArPSBc
CiAgICAgcmVuZGVyaW5nL1JlbmRlcldvcmRCcmVhay5jcHAgXAogICAgIHJlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcCBcCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCisgICAg
cmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVz
L1JlY3RhbmdsZVNoYXBlLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgXAor
ICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2
YWwuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIFwKICAg
ICByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwIFwKICAgICByZW5kZXJpbmcvc3R5bGUv
Q29udGVudERhdGEuY3BwIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ291bnRlckRpcmVjdGl2ZXMu
Y3BwIFwKQEAgLTI0MDMsMTMgKzI0MDMsNiBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcv
YnJlYWtfbGluZXMuaCBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmggXAogICAgIHJlbmRl
cmluZy9FbGxpcHNpc0JveC5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCBc
Ci0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1
c2lvblJlY3RhbmdsZS5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBcCi0gICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvLmggXAogICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIFwKICAgICByZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKICAgICByZW5kZXJpbmcvSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlLmggXApAQCAtMjUxMywxOCArMjUwNiwyNSBAQCBIRUFERVJTICs9IFwKICAgICBy
ZW5kZXJpbmcvUmVuZGVyV29yZEJyZWFrLmggXAogICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94
LmggXAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5oIFwKKyAgICByZW5kZXJpbmcvc2hh
cGVzL1BvbHlnb25TaGFwZS5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBl
LmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluZm8uaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaCBc
CisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmggXAorICAgIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFw
ZXMuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRhLmggXAogICAgIHJlbmRlcmlu
Zy9zdHlsZS9Db3VudGVyRGlyZWN0aXZlcy5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ3Vyc29y
RGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ3Vyc29yTGlzdC5oIFwKLSAgICByZW5kZXJp
bmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvRmls
bExheWVyLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaCBcCiAgICAgcmVu
ZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9RdW90
ZXNEYXRhLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIFwKICAgICByZW5k
ZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oIFwKKyAgICByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1
ZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIFwKICAgICBy
ZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRhLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHls
ZUNhY2hlZEltYWdlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oKaW5kZXggZTgwNzIwMWI0MTEwYjljYWNlNzVmMGUxNjA3NGQzMmQyZWMwZDc2
OS4uMGQ5NWEyMjkyY2Y1MGUwYTdjZTU1N2Y5NmUyYmIyMDRiNDQ2MjAyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC01NDIyLDEyICs1
NDIyLDYgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAiPgogICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNh
aXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC02MzA2LDYgKzYzMDAsMTIg
QEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzaGFwZXNcUG9seWdvblNoYXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50
ZXJ2YWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBl
c1xTaGFwZU91dHNpZGVJbmZvLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzdmdcU1ZHUGF0aERhdGEuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4z
MiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMTIxMDksMTEgKzEyMTA5LDYgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xicmVha19saW5lcy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXENvdW50ZXJOb2RlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRWxsaXBzaXNCb3guaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZS5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXEZpeGVkVGFibGVMYXlvdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGbG93VGhyZWFkQ29udHJvbGxlci5oIiAvPgpAQCAtMTIx
OTcsNiArMTIxOTIsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xS
ZW5kZXJTZWxlY3Rpb25JbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyU2xpZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUG9seWdvblNoYXBlLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUlu
dGVydmFsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVz
XFNoYXBlT3V0c2lkZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdmdcUmVuZGVyU1ZHQmxvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHQ29udGFpbmVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIiAvPgpAQCAt
MTIyNjksNyArMTIyNzAsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHN0eWxlXEN1cnNvckRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdHlsZVxDdXJzb3JMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcc3R5bGVcRGF0YVJlZi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHN0eWxlXEV4Y2x1c2lvblNoYXBlVmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxGaWxsTGF5ZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxHcmlkUG9zaXRpb24uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxHcmlkVHJhY2tTaXplLmgiIC8+
CkBAIC0xMjI4MCw2ICsxMjI4MCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc3R5bGVcUmVuZGVyU3R5bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzdHlsZVxSZW5kZXJTdHlsZUNvbnN0YW50cy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFNoYWRvd0RhdGEuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFwZVZhbHVlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVCYWNrZ3JvdW5kRGF0
YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxl
Qm94RGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxl
XFN0eWxlQ2FjaGVkSW1hZ2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBmNWU4NzIzOGM3ZjIwOGI3
NThhMGZkNzE2MThkMDJmNGQyMmRjNzAzLi41ZTJjZTA5ZWE0ZjRjM2Y4NTMyYThiMmNkYTMxYWQy
ZTY0MDgzYTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0yNDMyLDIzICsyNDMyLDIzIEBACiAgICAgPC9D
bENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRWxsaXBzaXNC
b3guY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2
YWwuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUG9s
eWdvblNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lv
blBvbHlnb24uY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFw
ZXNcUmVjdGFuZ2xlU2hhcGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
RXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc2hhcGVzXFNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XEV4Y2x1c2lvblNoYXBlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIj4KKyAgICA8L0NsQ29tcGlsZT4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnRlcnZh
bC5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFNoYXBlT3V0c2lkZUluZm8uY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIj4KQEAgLTkxMjAsMTkgKzkxMjAsMjIgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFbGxpcHNpc0JveC5oIj4KICAgICAg
IDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuaCI+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5oIj4KKyAg
ICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmgiPgog
ICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmgiPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5oIj4KICAgICAg
IDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGUuaCI+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5oIj4KICAg
ICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgi
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUludGVy
dmFsLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBl
c1xTaGFwZU91dHNpZGVJbmZvLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xG
aWx0ZXJFZmZlY3RSZW5kZXJlci5oIj4KQEAgLTk1ODgsOSArOTU5MSw2IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRGF0YVJlZi5oIj4KICAgICAgIDxGaWx0
ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIj4K
LSAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRmlsbExheWVyLmgi
PgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KQEAgLTk2MjEsNiArOTYyMSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc3R5bGVcU2hhZG93RGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxl
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcc3R5bGVcU2hhcGVWYWx1ZS5oIj4KKyAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0
eWxlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xNTE4NCw0ICsx
NTE4Nyw0IEBACiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ3VzdG9t
QnVpbGRTdGVwPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDUwZjJjNWY1YmQ2NDA0Y2ZmY2Q3OTk1ZTY2YTdm
ZGY5MzU0Zjk4Ny4uNGM0ODdlYTUzYTE1MzlkMGQ4YWQ4ZTM1MzdhYzdlOTcxMTFlMjhkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTgzNSwxNCArMTgzNSw2IEBACiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5j
cHAgKi87IH07CiAJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVu
R0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdE
MkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsgfTsKIAkJNkU2
N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRC5oICovOyB9OwotCQk2RTg3OThCQTE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkU4Nzk4QjQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNw
cCAqLzsgfTsKLQkJNkU4Nzk4QkIxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThC
NTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2RTg3OThCQzE1RjgxRTRBMDBCRkU0
QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI2MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25S
ZWN0YW5nbGUuY3BwICovOyB9OwotCQk2RTg3OThCRDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uUmVjdGFuZ2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi87
IH07Ci0JCTZFODc5OEJFMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCODE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovOyB9OwotCQk2RTg3OThCRjE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNp
b25TaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTZFQUYzNDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQUYzNDBEMTYxMzg2
OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLzsgfTsKLQkJNkVBRjM0MTAxNjEz
ODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNs
dXNpb25Qb2x5Z29uLmggKi87IH07CiAJCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zs
b2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovOyB9
OwogCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFFMTM4QjUwRjIw
MEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovOyB9OwogCQk2RUJGMEU0ODEyQTg5MjYxMDBE
QjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJl
RmxvYXQuY3BwICovOyB9OwpAQCAtMzI2Myw4ICszMjU1LDYgQEAKIAkJOThDRTQzMkExMjlFMDBF
NTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk4Q0U0MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmgg
Ki87IH07CiAJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThFQjFGOTQxMzEz
RkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUExQjZGOTcxNTg4NjlDODAwMTFBOEM0IC8qIEpT
RE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QTFCNkY5NjE1ODg2OUM4MDAxMUE4QzQgLyogSlNET01TdHJpbmdMaXN0
Q3VzdG9tLmNwcCAqLzsgfTsKLQkJOUE5Q0VGOEQxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUE5Q0VGOEIxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8uY3BwICovOyB9OwotCQk5QTlDRUY4RTE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUE5Q0VGOEMxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5QjFBQjA3QzE2NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjFBQjA3QjE2NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTlCMjRERThFMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1M
QkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi87IH07CiAJ
CTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8q
IFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU3MzksNyArNTcyOSw3IEBACiAJCUZEMDZERkE1MTM0QTRERUYwMDZGNUQ3RCAvKiBE
ZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwNkRGQTMxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi87IH07CiAJCUZEMDZERkE2MTM0QTRERUYwMDZGNUQ3
RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDZERkE0MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAqLzsgfTsKIAkJRkQxNjYwQTUxMzc4N0M2RDAwMUZG
QTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2Fi
bGVyLmggKi87IH07Ci0JCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBFeGNsdXNpb25TaGFw
ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZEMUFGMTUwMTY1NkYx
NTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZEMjNB
MTI1MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDIzQTEyMzEz
RjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovOyB9
OwogCQlGRDIzQTEyNjEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
MjNBMTI0MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
ICovOyB9OwogCQlGRDJEQkYxMjEyQjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDJE
QkYwRTEyQjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5mcmFtZXdvcmsgKi87IH07CkBAIC01
ODU2LDYgKzU4NDYsMjAgQEAKIAkJRkQzMTYwQzAxMkIwMjcyQTAwQzFBMzU5IC8qIEZGVEZyYW1l
TWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
MzE2MEJBMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRGcmFtZU1hYy5jcHAgKi87IH07CiAJCUZEMzU5
MThGMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzNTkxOEQxMzhEQjIyMDAwRTFF
QkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5jcHAgKi87IH07CiAJCUZEMzU5MTkwMTM4REIyMjAw
MEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzU5MThFMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1Bh
cmFtVGltZWxpbmUuaCAqLzsgfTsKKwkJRkQ0NUE5NEYxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3
RjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1MDE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4
QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTExNzVEM0YzRTAwQzIxRUM4IC8q
IFNoYXBlSW5zaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQwOEE4ODMxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTUy
MTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4NzE3NUQzOTI2MDAyQ0QzNjAgLyog
U2hhcGVPdXRzaWRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3RTE3NUQzOTI2
MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovOyB9OworCQlGRDQ1QTk1NDE3NUQzRkI4MDBDMjFFQzgg
LyogU2hhcGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZEMDhBODgwMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uY3BwICovOyB9Owor
CQlGRDQ1QTk1NTE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgyMTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uY3BwICovOyB9OworCQlGRDQ1QTk1NjE3NUQzRkI4
MDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVP
dXRzaWRlSW5mby5jcHAgKi87IH07CisJCUZENDVBOTU3MTc1RDQxNEMwMEMyMUVDOCAvKiBQb2x5
Z29uU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEMDhBODdCMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1ODE3NUQ0MTRDMDBD
MjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZE
NDVBOTU5MTc1RDQxNzEwMEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0ExNzVEMzkyNjAwMkNEMzYw
IC8qIFBvbHlnb25TaGFwZS5jcHAgKi87IH07CisJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAv
KiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRDA4QTg3QzE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuY3Bw
ICovOyB9OworCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODUxNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1QzE3NUQ0MjBEMDBDMjFFQzggLyogU2hh
cGVJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRDA4QTg4NDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5jcHAgKi87IH07
CiAJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1MDEzN0I2NTE4MDAwMDhE
Q0UgLyogWmVyb1BvbGUuY3BwICovOyB9OwogCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyog
WmVyb1BvbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZENTM3MzUxMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oICovOyB9OwogCQlGRDUzNzM1
NjEzN0I2NTNCMDAwMDhEQ0UgLyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTM3MzU0MTM3QjY1M0Iw
MDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwICovOyB9OwpAQCAtNTg3OCw4
ICs1ODgyLDYgQEAKIAkJRkQ2RUQyQzgxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJl
c3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ2
RUQyQzYxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5oICovOyB9OwogCQlG
RDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkYyNTI5
MTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovOyB9
OwogCQlGRDZGMjUyRDEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZG
MjUyQTEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi87
IH07Ci0JCUZENzQ4QUJGMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3
NDhBQkQxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgKi87
IH07Ci0JCUZENzQ4QUMwMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENzQ4
QUJFMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRDc4NjhCOTEzNkI5
OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENzg2OEI3MTM2Qjk5OTIwMEQ0MDNE
RiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwICovOyB9OwogCQlGRDc4NjhCQTEzNkI5
OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc4NjhCODEzNkI5OTkyMDBENDAzREYg
LyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi87IH07CiAJCUZEN0YyOTkxMTNENEMwQ0Iw
MEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEN0YyOThBMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZl
U2hhcGVyRFNQS2VybmVsLmNwcCAqLzsgfTsKQEAgLTU5NDAsOCArNTk0Miw2IEBACiAJCUZEQjA1
MkUwMTU2MUE0MkMwMEI1MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCMDUyREUxNTYxQTQyQzAwQjUw
MEQ2IC8qIEF1ZGlvU3VtbWluZ0p1bmN0aW9uLmggKi87IH07CiAJCUZEQjE3MDA1MTRBMkJBQjIw
MEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCMTcwMDMxNEEyQkFCMjAwQTJCNUQ5IC8qIE11
bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAgKi87IH07CiAJCUZEQjE3MDA2MTRBMkJBQjIwMEEyQjVE
OSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjE3MDA0MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5u
ZWxSZXNhbXBsZXIuaCAqLzsgfTsKLQkJRkRCOEQxREExNkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1
c2lvblNoYXBlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkRCOEQxRDkxNkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZEQjhEMUU1
MTZCMENDOTcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEw
IC8qIEV4Y2x1c2lvblNoYXBlSW5mby5jcHAgKi87IH07CiAJCUZEQkQxREZDMTY3RkUyN0QwMDUx
QTExRSAvKiBKU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQxREZCMTY3RkUyN0QwMDUxQTExRSAvKiBKU09z
Y2lsbGF0b3JOb2RlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRkRCRDQ4MEMxNTlCQzY4NzAwOTNFQjRG
IC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCRDQ4MEExNTlCQzY4NzAwOTNFQjRGIC8qIEpT
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwICovOyB9OwogCQlGREJENDgwRDE1OUJDNjg3
MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCRDQ4MEIxNTlCQzY4NzAwOTNFQjRG
IC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCAqLzsgfTsKQEAgLTgyMjgsMTQgKzgy
MjgsNiBAQAogCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdM
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9w
ZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE1MTI4MEU4QTQw
MDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZFODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZh
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25JbnRl
cnZhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI1MTVGODFFNEEw
MEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFeGNsdXNpb25JbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk2RTg3OThCNjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblJlY3RhbmdsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAv
KiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhjbHVzaW9uUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5
OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFeGNsdXNpb25Qb2x5Z29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVB
RjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFz
L0Zsb2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RUFE
MTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTcwNiw4ICs5Njk4LDYgQEAKIAkJOThDRTQzMjkx
MjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGlua0xvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OEVC
MUY5NDEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVN0cmluZ0xp
c3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QTlDRUY4QjE2M0Iz
RUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUE5Q0VGOEMxNjNCM0VBMTAwREU3RUZFIC8q
IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5QjFBQjA3OTE2NDhDNjlEMDA1MUYzRjIgLyogSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxQUIwN0IxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1M
QkRJRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQkRJRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1ODAsOCArMTI1NzAsMjIg
QEAKIAkJRkQwMEQ3QTMxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2luY1Jlc2FtcGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRDA2REZBMzEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZEMDZERkE0MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdBMTc1
RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUG9seWdvblNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkQwOEE4N0IxNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5Z29uU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlY3RhbmdsZVNoYXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0QxNzVEMzkyNjAwMkNE
MzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlY3RhbmdsZVNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdF
MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhB
ODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4MDE3
NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNoYXBlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZEMDhBODgxMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZEMDhBODgyMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGVJbnNpZGVJbmZvLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODMxNzVEMzkyNjAwMkNEMzYwIC8qIFNo
YXBlSW5zaWRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZUlu
c2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODQxNzVEMzky
NjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2hhcGVJbnRlcnZhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZEMDhBODg1MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlSW50ZXJ2YWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUlu
Zm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGVPdXRzaWRl
SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg3MTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNoYXBlT3V0c2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkQxNjYwQTQxMzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVub3JtYWxEaXNhYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hh
cGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGNsdXNpb25TaGFw
ZVZhbHVlLmg7IHBhdGggPSBzdHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBTaGFwZVZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYXBlVmFsdWUuaDsgcGF0aCA9
IHN0eWxlL1NoYXBlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQyM0Ex
MjMxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQyM0ExMjQxM0Y1
RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAv
KiBBY2NlbGVyYXRlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQWNjZWxlcmF0ZS5mcmFt
ZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1l
d29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKQEAgLTEyNzQyLDggKzEyNzQ2LDYg
QEAKIAkJRkQ2RjI1MjkxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDZG
MjUyQTEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDZGMjUyQjEzRjVFRjBFMDA2NTE2
NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGRDc0OEFCRDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZENzQ4
QUJFMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENzg2OEI3MTM2Qjk5OTIwMEQ0MDNERiAvKiBK
U0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkQ3ODY4QjgxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVz
c29yTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0R5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ3RjI5OEExM0Q0
QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjgwNyw4ICsxMjgwOSw2IEBACiAJCUZEQjA1MkRFMTU2MUE0
MkMwMEI1MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGREIxNzAwMzE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1w
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11bHRpQ2hhbm5l
bFJlc2FtcGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQjE3MDA0MTRB
MkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTXVsdGlDaGFubmVsUmVzYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZEQjhEMUQ5MTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFw
ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJ
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEQjhEMURCMTZCMEMwRjYwMDM0
MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkRCRDFERkIxNjdGRTI3RDAwNTFBMTFFIC8qIEpTT3NjaWxsYXRvck5vZGVDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNPc2NpbGxhdG9y
Tm9kZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQkQ0ODBBMTU5
QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREJENDgwQjE1OUJDNjg3MDA5
M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODkyMiw3ICsxODkyMiw2IEBACiAJCQkJQkMyMjcyQTEw
RTgyRTg3QzAwRTdGOTc1IC8qIEN1cnNvckRhdGEuaCAqLywKIAkJCQlCQzIyNzJBQzBFODJFOEYz
MDBFN0Y5NzUgLyogQ3Vyc29yTGlzdC5oICovLAogCQkJCUJDMjI3NDZFMEU4MzY2NDUwMEU3Rjk3
NSAvKiBEYXRhUmVmLmggKi8sCi0JCQkJRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIEV4Y2x1
c2lvblNoYXBlVmFsdWUuaCAqLywKIAkJCQlCQzVFQjY5QzBFODFEQUVCMDBCMjU5NjUgLyogRmls
bExheWVyLmNwcCAqLywKIAkJCQlCQzVFQjY5RDBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVy
LmggKi8sCiAJCQkJQTEyNzA1QzIxNjU2QkQ2NTAwQzJFMjdDIC8qIEdyaWRQb3NpdGlvbi5oICov
LApAQCAtMTg5NDAsNiArMTg5MzksNyBAQAogCQkJCUJDNUVCNjY3MEU4MUNCNzEwMEIyNTk2NSAv
KiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oICovLAogCQkJCUJDNUVCOEMxMEU4MjAzMUIwMEIyNTk2
NSAvKiBTaGFkb3dEYXRhLmNwcCAqLywKIAkJCQlCQzVFQjhDMjBFODIwMzFCMDBCMjU5NjUgLyog
U2hhZG93RGF0YS5oICovLAorCQkJCUZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBTaGFwZVZh
bHVlLmggKi8sCiAJCQkJQkM1RUI2QTAwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3Vu
ZERhdGEuY3BwICovLAogCQkJCUJDNUVCNkExMEU4MURDNEYwMEIyNTk2NSAvKiBTdHlsZUJhY2tn
cm91bmREYXRhLmggKi8sCiAJCQkJQkM1RUI2N0MwRTgxRDQyMDAwQjI1OTY1IC8qIFN0eWxlQm94
RGF0YS5jcHAgKi8sCkBAIC0xOTg3Miw2ICsxOTg3Miw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTQzOTA0NkMyMTJEQTI1Q0UwMEFGODBBMiAvKiBtYXRobWwg
Ki8sCisJCQkJRkQwOEE4NzkxNzVEMzkyNjAwMkNEMzYwIC8qIHNoYXBlcyAqLywKIAkJCQlCQzhD
OEZBQTBERENEMkYyMDBCNTkyRjQgLyogc3R5bGUgKi8sCiAJCQkJMDg4QzJGNzQxMjM5MDA4MDAw
M0Q2NUNFIC8qIHN2ZyAqLywKIAkJCQlBOENGRjA0QjBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1Rh
YmxlTGF5b3V0LmNwcCAqLywKQEAgLTE5ODg1LDIwICsxOTg4Niw2IEBACiAJCQkJOTM5MkYxNEIw
QUQxODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8sCiAJCQkJQThDRkY2Q0EwQTE1NjFD
RDAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmNwcCAqLywKIAkJCQlBOENGRjZCRDBBMTU2MTE4MDAw
QTQyMzQgLyogRWxsaXBzaXNCb3guaCAqLywKLQkJCQk2RTg3OThCNDE1RjgxRTRBMDBCRkU0QUEg
LyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwICovLAotCQkJCTZFODc5OEI1MTVGODFFNEEwMEJGRTRB
QSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oICovLAotCQkJCTZFQUYzNDBEMTYxMzg2OUEwMDg1OTYy
NSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLywKLQkJCQk2RUFGMzQwRTE2MTM4NjlBMDA4NTk2
MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICovLAotCQkJCTZFODc5OEI2MTVGODFFNEEwMEJGRTRB
QSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwICovLAotCQkJCTZFODc5OEI3MTVGODFFNEEwMEJG
RTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLywKLQkJCQk2RTg3OThCODE1RjgxRTRBMDBC
RkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovLAotCQkJCTZFODc5OEI5MTVGODFFNEEwMEJG
RTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICovLAotCQkJCUZEQjhEMURCMTZCMEMwRjYwMDM0MEYx
MCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwICovLAotCQkJCUZEQjhEMUQ5MTZCMEMwRDcwMDM0
MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCAqLywKLQkJCQlGRDc0OEFCRDE1QkY3NEVEMDA1
OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCAqLywKLQkJCQlGRDc0OEFCRTE1
QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggKi8sCi0JCQkJOUE5
Q0VGOEIxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwICov
LAotCQkJCTlBOUNFRjhDMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvLmggKi8sCiAJCQkJMzEzMTNGNjMxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcCAqLywKIAkJCQkzMTMxM0Y2NDE0NDNCMzVFMDA2RTJBOTAgLyogRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuaCAqLywKIAkJCQlBOENGRjA0ODBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRU
YWJsZUxheW91dC5jcHAgKi8sCkBAIC0yMDU1Miw2ICsyMDUzOSwyNyBAQAogCQkJcGF0aCA9IG9w
ZW5nbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUZEMDhBODc5MTc1RDM5
MjYwMDJDRDM2MCAvKiBzaGFwZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCUZEMDhBODdBMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuY3Bw
ICovLAorCQkJCUZEMDhBODdCMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuaCAqLywK
KwkJCQlGRDA4QTg3QzE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuY3BwICovLAor
CQkJCUZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5oICovLAorCQkJ
CUZEMDhBODdFMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi8sCisJCQkJRkQwOEE4N0Yx
NzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi8sCisJCQkJRkQwOEE4ODAxNzVEMzkyNjAwMkNE
MzYwIC8qIFNoYXBlSW5mby5jcHAgKi8sCisJCQkJRkQwOEE4ODExNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlSW5mby5oICovLAorCQkJCUZEMDhBODgyMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUlu
c2lkZUluZm8uY3BwICovLAorCQkJCUZEMDhBODgzMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUlu
c2lkZUluZm8uaCAqLywKKwkJCQlGRDA4QTg4NDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRl
cnZhbC5jcHAgKi8sCisJCQkJRkQwOEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2
YWwuaCAqLywKKwkJCQlGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5m
by5jcHAgKi8sCisJCQkJRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUlu
Zm8uaCAqLywKKwkJCSk7CisJCQlwYXRoID0gc2hhcGVzOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKIAkJRkQzMTVGQTIxMkIwMjVCMTAwQzFBMzU5IC8qIHdlYmF1ZGlvICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIxNzE2LDE0ICsyMTcy
NCw2IEBACiAJCQkJMTQ4QUZEQTUwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzY3Q0UwQjE0NUFCQzEzMDA1RTY0REIgLyogRXhjZXB0
aW9uSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2N0NFMEMxNDVBQkMxMzAwNUU2NERC
IC8qIEV4Y2VwdGlvbkludGVyZmFjZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFODc5OEJCMTVG
ODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTZFODc5OEJEMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUu
aCBpbiBIZWFkZXJzICovLAotCQkJCTZFODc5OEJGMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNp
b25TaGFwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkRCOEQxREExNkIwQzBENzAwMzQwRjEwIC8q
IEV4Y2x1c2lvblNoYXBlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkQ3NDhBQzAxNUJGNzRF
RDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJOUE5Q0VGOEUxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8u
aCBpbiBIZWFkZXJzICovLAotCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBFeGNsdXNp
b25TaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDI0NTc1MjE2Q0VBQTI3MDAwRTU2
NzEgLyogRVhURHJhd0J1ZmZlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE5MTI4MEU4
QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE3
MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovLApA
QCAtMjI5ODcsNiArMjI5ODcsNyBAQAogCQkJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQ
b2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzA1OTk3ODEwN0Q5NzUyMDBB
NTBBN0MgLyogUG9saWN5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MDU5OTdBMTA3
RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1
QTk1NzE3NUQ0MTRDMDBDMjFFQzggLyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTc0RTIwQTEwQTFGNDRGMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDY2OEUxOEIwQUREOTYyNDAwNDEyOEUwIC8qIFBvcHVwTWVudS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUJDMTI4NzcwQjMzQUE2RDAwQzY5M0Q1IC8qIFBvcHVwTWVudUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMzAyOCw2ICsyMzAyOSw3IEBACiAJCQkJQTg0RDgyN0MxMUQz
MzNFRDAwOTcyOTkwIC8qIFJhd0RhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkQzMTYwM0MxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNDM2OEU4MEMyMjZFMzIwMDVFRkI1RiAvKiBSZWN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRDQ1QTk1ODE3NUQ0MTRDMDBDMjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MkVBM0JCMTU4NUNGNTUwMDRGQUEyNiAvKiBSZWZDb3VudGVk
U3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTgzMUFFNEExNTQyMjVDOTAwRkUyNjQ0
IC8qIFJlZmVycmVyUG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0FCNDE4MjEzRTM1NkU4
MDBEOEFBRjMgLyogUmVnaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMjk4LDYgKzIzMzAwLDEy
IEBACiAJCQkJQkM1RUI4QzQwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE2RDE2OTY0MTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODBFNkNFODBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTRGMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NTAxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5m
by5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NTExNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBl
SW5zaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NUIxNzVENDFFRTAwQzIxRUM4
IC8qIFNoYXBlSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTUyMTc1RDNGM0Uw
MEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDFBRjE1
MDE2NTZGMTUxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0
QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTdCMUYwMkYxM0IwMjVEMjAwRjUxMDNGIC8qIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGlt
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQzNDIsNiArMjQzNTAsMTMgQEAKIAkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJ
CWZpbGVzID0gKAorCQkJCUZENDVBOTVDMTc1RDQyMEQwMEMyMUVDOCAvKiBTaGFwZUludGVydmFs
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTU5MTc1RDQxNzEwMEMyMUVDOCAvKiBQb2x5
Z29uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NUExNzVENDE3MTAwQzIxRUM4
IC8qIFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTUzMTc1RDNG
QjgwMEMyMUVDOCAvKiBTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1NDE3NUQz
RkI4MDBDMjFFQzggLyogU2hhcGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTU1
MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkQ0NUE5NTYxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDFFMUIxRDAwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjlDMTZFMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nl
c3NpYmlsaXR5QWxsSW5PbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZDREQyRjIxMTAzREE2
NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI0OTE3LDEzICsyNDkzMiw2IEBACiAJCQkJOTczREM2M0YxNDVBOTQwOTAwMjg0MkMyIC8qIEV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBQ0RCMTEz
Q0U4NzVDMDBCQkJFM0YgLyogRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0OEFGREE2MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5t
bSBpbiBTb3VyY2VzICovLAotCQkJCTZFODc5OEJBMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNp
b25JbnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2RUFGMzQwRjE2MTM4NjlBMDA4NTk2
MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2RTg3OThCQzE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTZFODc5OEJFMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlGREI4RDFFNTE2QjBDQzk3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZENzQ4QUJGMTVCRjc0RUQwMDU5Q0YwRCAvKiBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUE5Q0VGOEQx
NjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTAyNDU3NTExNkNFQUEyNzAwMEU1NjcxIC8qIEVYVERyYXdCdWZmZXJzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDREQUI1QjExNUE2MjM1ODAwOTdD
MUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5k
ZXggM2E5NGVmODhiMzE3MmJlYzFhMTYyMDI0NWZlNjc1ZTQzNzIxMzcxNi4uNGZiNDlmZTA4NzYz
OTczNWIyMDJkZGEyNmI2ZGE2NjU5Zjg1MjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTY2LDcgKzY2LDcgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1
ZS5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCkBAIC0yNjk5LDI0ICsyNjk5
LDI0IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRTaGFwZUluc2lkZToKICAgICAgICAgICAgIGlmICghc3R5bGUtPnNoYXBlSW5zaWRlKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgp
LT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6T3V0c2lkZSkKKyAgICAgICAgICAgIGlm
IChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6Ok91dHNpZGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU91dHNpZGVTaGFwZSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5z
aWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpJbWFnZSkgeworICAgICAgICAg
ICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6SW1hZ2Up
IHsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPmltYWdlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+c2hhcGVJbnNpZGUoKS0+aW1hZ2UoKS0+
Y3NzVmFsdWUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBBU1NFUlQoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZh
bHVlOjpTaGFwZSk7CisgICAgICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5
cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JC
YXNpY1NoYXBlKHN0eWxlLT5zaGFwZUluc2lkZSgpLT5zaGFwZSgpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKICAgICAgICAgICAgIGlmICghc3R5bGUtPnNo
YXBlT3V0c2lkZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+
c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpJbWFnZSkgewor
ICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFs
dWU6OkltYWdlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+
aW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5zaGFwZU91dHNpZGUo
KS0+aW1hZ2UoKS0+Y3NzVmFsdWUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gRXhj
bHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFw
ZU91dHNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlNoYXBlKTsKICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZUZvckJhc2ljU2hhcGUoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5zaGFwZSgpKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmgKaW5kZXggNjcyY2E0ZTE5NTUyMTk1M2Q5MGZiNTg3NDZiZDlhOGFhYmViY2Qz
ZS4uMzcyYzFiM2Y0NjgwODFmNTZjN2Q0ZWE4MTQzNzQzNzM3MmI4NjU1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBjb3VudGVyIG5hbWVzIChhcyBv
cHBvc2VkIHRvIGNvdW50ZXIgdmFsdWVzKQogICAgICAgICBDU1NfQ09VTlRFUl9OQU1FID0gMTEw
LAogCi0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgQ1NTIEV4Y2x1c2lvbnMgZHJhZnQK
KyAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGJ5IHRoZSBDU1MgU2hhcGVzIGRyYWZ0CiAgICAgICAg
IENTU19TSEFQRSA9IDExMSwKIAogICAgICAgICAvLyBVc2VkIGJ5IGJvcmRlciBpbWFnZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKaW5kZXggMDBm
MGJlM2E1N2IzOTI2OGMwOThjYTVlM2FmMzdhYmJiNzdkZmRlMC4uYzBjMzdiMWIyYWYwMDgwMzU1
ZDQyODA0ZmM0MGE3ZTRkM2Y1MGQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Rl
cHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkU3R5bGVCdWlsZGVyLmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lv
blNoYXBlVmFsdWUuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjZW5kaWYKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKQEAgLTE5MzMsMTAgKzE5MzMsMTAgQEAgcHVibGljOgogfTsKIAogI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQotdGVtcGxhdGUgPEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5k
ZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KSwgRXhjbHVzaW9u
U2hhcGVWYWx1ZSogKCppbml0aWFsRnVuY3Rpb24pKCk+Ci1jbGFzcyBBcHBseVByb3BlcnR5RXhj
bHVzaW9uU2hhcGUgewordGVtcGxhdGUgPFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRl
ckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQ
YXNzUmVmUHRyPFNoYXBlVmFsdWU+KSwgU2hhcGVWYWx1ZSogKCppbml0aWFsRnVuY3Rpb24pKCk+
CitjbGFzcyBBcHBseVByb3BlcnR5U2hhcGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNl
dFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVl
PiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CisgICAgc3RhdGlj
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+
IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKSB7CkBAIC0xOTQ1LDIwICsxOTQ1LDIwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsKICAgICAg
ICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDI1NzE6IExheW91dCBmb3IgdGhlIHZhbHVlICdvdXRzaWRl
LXNoYXBlJyBpcyBub3QgeWV0IGltcGxlbWVudGVkCiAgICAgICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNpZGVTaGFwZSkKLSAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBFeGNsdXNpb25TaGFwZVZh
bHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOwog
ICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAg
ICAgICAgICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNo
YXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgcHJpbWl0aXZl
VmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFwZVZh
bHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOwogICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25T
aGFwZVZhbHVlOjpjcmVhdGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJv
cGVydHksIHZhbHVlKSk7CisgICAgICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBT
aGFwZVZhbHVlOjpjcmVhdGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJv
cGVydHksIHZhbHVlKSk7CiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBzaGFwZS5yZWxlYXNlKCkpOwogICAgICAgICB9CiAKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFu
ZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEV4Y2x1c2lvblNoYXBlVmFs
dWUqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiwgc2V0
dGVyRnVuY3Rpb24sIEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVh
dGVIYW5kbGVyKCk7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPFNoYXBlVmFsdWUqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxT
aGFwZVZhbHVlPiwgc2V0dGVyRnVuY3Rpb24sIFNoYXBlVmFsdWUqLCBpbml0aWFsRnVuY3Rpb24+
OjpjcmVhdGVIYW5kbGVyKCk7CiAgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxl
ci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFs
dWUpOwogICAgIH0KIH07CkBAIC0yMzQzLDggKzIzNDMsOCBAQCBEZXByZWNhdGVkU3R5bGVCdWls
ZGVyOjpEZXByZWNhdGVkU3R5bGVCdWlsZGVyKCkKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU1hcmdpbiwgQXBwbHlQ
cm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNl
dFNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU1hcmdpbj46OmNyZWF0ZUhh
bmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVQ
YWRkaW5nLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6c2hhcGVQYWRkaW5nLCAm
UmVuZGVyU3R5bGU6OnNldFNoYXBlUGFkZGluZywgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVQ
YWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRTaGFwZUluc2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlPCZSZW5k
ZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGUsIEFwcGx5UHJvcGVy
dHlFeGNsdXNpb25TaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxl
OjpzZXRTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlT3V0c2lkZT46OmNy
ZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
U2hhcGVJbnNpZGUsIEFwcGx5UHJvcGVydHlTaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRl
LCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFw
ZUluc2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlLCBBcHBseVByb3BlcnR5U2hhcGU8JlJlbmRlclN0eWxl
OjpzaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxTaGFwZU91dHNpZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwogI2VuZGlmCiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQXBwbHlQcm9wZXJ0eURl
ZmF1bHQ8RVdoaXRlU3BhY2UsICZSZW5kZXJTdHlsZTo6d2hpdGVTcGFjZSwgRVdoaXRlU3BhY2Us
ICZSZW5kZXJTdHlsZTo6c2V0V2hpdGVTcGFjZSwgRVdoaXRlU3BhY2UsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbFdoaXRlU3BhY2U+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdpZG93cywgQXBwbHlQcm9wZXJ0eUF1dG88c2hvcnQsICZSZW5kZXJT
dHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cywgJlJlbmRlclN0eWxlOjpoYXNB
dXRvV2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldEhhc0F1dG9XaWRvd3M+OjpjcmVhdGVIYW5kbGVy
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCmluZGV4IDUyNDQwMDNjZDFjMDk3Nzk2OWVjMGVlMTlkNWQxNDU2NTBh
MWVmMDkuLmZjYTYyNmY4MGQ2NmExMmIxMjZhNGE4MTY1NWZiZmZjNGYyYzIzN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHAKQEAgLTE0NCwxMCArMTQ0LDEwIEBAIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxDbGlw
UGF0aE9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBDbGlwCiB9CiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxFeGNsdXNp
b25TaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIEV4Y2x1c2lvblNo
YXBlVmFsdWUqIGZyb20sIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IEFu
aW1hdGlvbkJhc2UqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0bywgZG91YmxlIHBy
b2dyZXNzKQogewogICAgIC8vIEZJWE1FIEJ1ZyAxMDI3MjM6IFNoYXBlLWluc2lkZSBzaG91bGQg
YmUgYWJsZSB0byBhbmltYXRlIGEgdmFsdWUgb2YgJ291dHNpZGUtc2hhcGUnIHdoZW4gc2hhcGUt
b3V0c2lkZSBpcyBzZXQgdG8gYSBCYXNpY1NoYXBlCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBF
eGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IEV4Y2x1c2lvblNoYXBl
VmFsdWU6OlNoYXBlKQorICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUg
fHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpTaGFwZSkKICAgICAgICAgcmV0dXJuIHRvOwog
CiAgICAgY29uc3QgQmFzaWNTaGFwZSogZnJvbVNoYXBlID0gZnJvbS0+c2hhcGUoKTsKQEAgLTE1
Niw3ICsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1
ZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBFeAogICAgIGlmICghZnJvbVNoYXBl
LT5jYW5CbGVuZCh0b1NoYXBlKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgcmV0dXJuIEV4
Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUodG9TaGFwZS0+YmxlbmQoZnJvbVNo
YXBlLCBwcm9ncmVzcykpOworICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVl
KHRvU2hhcGUtPmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsKIH0KICNlbmRpZgogCkBAIC00
MDUsMTAgKzQwNSwxMCBAQCBwdWJsaWM6CiB9OwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1j
bGFzcyBQcm9wZXJ0eVdyYXBwZXJFeGNsdXNpb25TaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHsKK2NsYXNzIFByb3BlcnR5V3JhcHBl
clNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U2hhcGVWYWx1ZT4gewog
cHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlckV4Y2x1c2lvblNoYXBlKENTU1Byb3BlcnR5SUQg
cHJvcCwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZh
bHVlPikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxFeGNsdXNpb25TaGFw
ZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShD
U1NQcm9wZXJ0eUlEIHByb3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4p
KQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U2hhcGVWYWx1ZT4ocHJvcCwg
Z2V0dGVyLCBzZXR0ZXIpCiAgICAgewogICAgIH0KIH07CkBAIC0xMTY1LDcgKzExNjUsNyBAQCB2
b2lkIENTU1Byb3BlcnR5QW5pbWF0aW9uOjplbnN1cmVQcm9wZXJ0eU1hcCgpCiAgICAgZ1Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVy
dHlXZWJraXRDbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpjbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpz
ZXRDbGlwUGF0aCkpOwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgZ1Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyRXhjbHVzaW9uU2hhcGUoQ1NTUHJvcGVy
dHlXZWJraXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZUluc2lkZSkpOworICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsICZSZW5k
ZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUpKTsKICNl
bmRpZgogCiAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IsIE1h
eWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0
eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTBlZjdhOThiYWE2ODEwOWE4ODkxOTU4YWI5Yzkw
MTU2M2M4N2NhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
Ci0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJFeGNsdXNpb25JbnRlcnZhbC5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgSW50ZXJ2YWxYMUNvbXBhcmF0b3Igewot
ICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGkxLCBjb25zdCBF
eGNsdXNpb25JbnRlcnZhbCYgaTIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaTEueDEg
PCBpMi54MTsKLSAgICB9Ci19OwotCi1ib29sIEV4Y2x1c2lvbkludGVydmFsOjppbnRlcnNlY3Qo
Y29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGksIEV4Y2x1c2lvbkludGVydmFsJiBydikgY29uc3QK
LXsKLSAgICBpZiAoeDIgPCBpLngxIHx8IHgxID4gaS54MikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJ2LngxID0gc3RkOjptYXgoeDEsIGkueDEpOwotICAgIHJ2LngyID0gc3RkOjptaW4o
eDIsIGkueDIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIHNvcnRFeGNsdXNpb25JbnRl
cnZhbHMoVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdikKLXsKLSAgICBzdGQ6OnNvcnQodi5i
ZWdpbigpLCB2LmVuZCgpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKLX0KLQotdm9pZCBtZXJn
ZUV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MSwg
Y29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjIsIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4mIHJ2KQotewotICAgIGlmICghdjEuc2l6ZSgpKQotICAgICAgICBydi5hcHBlbmRSYW5n
ZSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSk7Ci0gICAgZWxzZSBpZiAoIXYyLnNpemUoKSkKLSAgICAg
ICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwotICAgIGVsc2UgewotICAg
ICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHYodjEuc2l6ZSgpICsgdjIuc2l6ZSgpKTsK
LSAgICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwqIGludGVydmFsID0gMDsKLQotICAgICAgICBzdGQ6
Om1lcmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgdi5iZWdp
bigpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghaW50ZXJ2YWwpCi0gICAg
ICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZbaV0u
eDEgPj0gaW50ZXJ2YWwtPngxICYmIHZbaV0ueDEgPD0gaW50ZXJ2YWwtPngyKSAvLyBGSVhNRTog
MXN0IDw9IHRlc3Qgbm90IG5lZWRlZD8KLSAgICAgICAgICAgICAgICBpbnRlcnZhbC0+eDIgPSBz
dGQ6Om1heChpbnRlcnZhbC0+eDIsIHZbaV0ueDIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgaW50ZXJ2
YWwgPSAmdltpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnRl
cnZhbCkKLSAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOwotICAgIH0KLX0KLQotdm9p
ZCBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+JiBydikKLXsKLSAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOwot
ICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7Ci0KLSAgICBpZiAoIXYxU2l6ZSB8fCAhdjJT
aXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbDsK
LSAgICBib29sIG92ZXJsYXAgPSBmYWxzZTsKLSAgICBzaXplX3QgaTEgPSAwOwotICAgIHNpemVf
dCBpMiA9IDA7Ci0KLSAgICB3aGlsZSAoaTEgPCB2MVNpemUgJiYgaTIgPCB2MlNpemUpIHsKLSAg
ICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwgdjEyOwotICAgICAgICBpZiAodjFbaTFdLmludGVyc2Vj
dCh2MltpMl0sIHYxMikpIHsKLSAgICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmludGVy
c2VjdChpbnRlcnZhbCwgaW50ZXJ2YWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAp
Ci0gICAgICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci0gICAgICAgICAgICAg
ICAgaW50ZXJ2YWwgPSB2MTI7Ci0gICAgICAgICAgICAgICAgb3ZlcmxhcCA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodjFbaTFdLngyIDwgdjJbaTJdLngyKQotICAgICAg
ICAgICAgICAgIGkxKys7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaTIrKzsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvdmVybGFwKQotICAgICAgICAgICAg
ICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci0gICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAodjFbaTFdLngxIDwgdjJbaTJdLngxKQotICAgICAgICAgICAgICAgIGkx
Kys7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaTIrKzsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChvdmVybGFwKQotICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOwot
fQotCi12b2lkIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MiwgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcnYpCi17Ci0gICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNp
emUoKTsKLSAgICBzaXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOwotCi0gICAgaWYgKCF2MVNpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdjJTaXplKQotICAgICAgICBydi5hcHBlbmRS
YW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNpemVfdCBp
MSA9IDAsIGkyID0gMDsKLSAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5k
KCkpOwotCi0gICAgICAgIHdoaWxlIChpMSA8IHJ2LnNpemUoKSAmJiBpMiA8IHYyU2l6ZSkgewot
ICAgICAgICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwmIGludGVydmFsMSA9IHJ2W2kxXTsKLSAgICAg
ICAgICAgIGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpbnRlcnZhbDIgPSB2MltpMl07Ci0KLSAg
ICAgICAgICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54
MiA+PSBpbnRlcnZhbDEueDIpCi0gICAgICAgICAgICAgICAgcnYucmVtb3ZlKGkxKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MiA8IGludGVydmFsMS54MSkKLSAgICAgICAgICAg
ICAgICBpMiArPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2
YWwxLngyKQotICAgICAgICAgICAgICAgIGkxICs9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChp
bnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngy
KSB7Ci0gICAgICAgICAgICAgICAgcnYuaW5zZXJ0KGkxLCBFeGNsdXNpb25JbnRlcnZhbChpbnRl
cnZhbDEueDEsIGludGVydmFsMi54MSkpOwotICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9
IGludGVydmFsMi54MjsKLSAgICAgICAgICAgICAgICBpMiArPSAxOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxKSB7Ci0gICAgICAgICAgICAgICAg
aW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOwotICAgICAgICAgICAgICAgIGkyICs9IDE7Ci0g
ICAgICAgICAgICB9IGVsc2UgIHsgLy8gKGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIpCi0g
ICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngyID0gaW50ZXJ2YWwyLngxOwotICAgICAgICAgICAg
ICAgIGkxICs9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25JbnRlcnZhbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbklu
dGVydmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMzFmZWIxODExM2RlOGMx
ZTQzNDFlMDEwMzcwOGI3NzRjYTM1MWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFs
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgot
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNp
b25JbnRlcnZhbF9oCi0jZGVmaW5lIEV4Y2x1c2lvbkludGVydmFsX2gKLQotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRXhjbHVzaW9uSW50
ZXJ2YWwgewotcHVibGljOgotICAgIGZsb2F0IHgxOwotICAgIGZsb2F0IHgyOwotCi0gICAgRXhj
bHVzaW9uSW50ZXJ2YWwoZmxvYXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApCi0gICAgICAgIDogeDEo
eDEpCi0gICAgICAgICwgeDIoeDIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaW50ZXJzZWN0
KGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiwgRXhjbHVzaW9uSW50ZXJ2YWwmKSBjb25zdDsKLX07
Ci0KLXZvaWQgc29ydEV4Y2x1c2lvbkludGVydmFscyhWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
Jik7Ci12b2lkIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiYpOwotdm9pZCBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoY29uc3Qg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZh
bD4mLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jik7Ci12b2lkIHN1YnRyYWN0RXhjbHVzaW9u
SW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+JiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpOwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFeGNsdXNpb25JbnRlcnZhbF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE5Zjk3OGYzMGI1OGUyMTRiODRhOWQzZDFmOGQ0MDg3YWUwYjJh
MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhj
bHVzaW9uUG9seWdvbi5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1lbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsKLSAgICBOb3JtYWws
Ci0gICAgVmVydGV4TWluWSwKLSAgICBWZXJ0ZXhNYXhZLAotICAgIFZlcnRleFlCb3RoCi19Owot
Ci1zdHJ1Y3QgRWRnZUludGVyc2VjdGlvbiB7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSog
ZWRnZTsKLSAgICBGbG9hdFBvaW50IHBvaW50OwotICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHR5
cGU7Ci19OwotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0IEZsb2F0UG9pbnQm
IHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQotewotICAgIHJldHVybiAoKHBvaW50LngoKSAtIHZlcnRleDEueCgpKSAqICh2ZXJ0ZXgy
LnkoKSAtIHZlcnRleDEueSgpKSkgLSAoKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpICogKHBv
aW50LnkoKSAtIHZlcnRleDEueSgpKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlZmxl
eFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiB2
ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCi17Ci0gICAgcmV0dXJuIGxlZnRT
aWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAwOwotfQotCi1zdGF0aWMgYm9v
bCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9pbnRl
ciwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQotewotICAgIGNvbnN0IEZsb2F0
UG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7Ci0KLSAgICBpZiAoZWRnZS5taW5ZKCkg
PiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOwotICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKLSAgICBmbG9hdCBkeSA9IHZlcnRleDIu
eSgpIC0gdmVydGV4MS55KCk7Ci0KLSAgICBmbG9hdCBpbnRlcnNlY3Rpb25YOwotICAgIEVkZ2VJ
bnRlcnNlY3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7Ci0KLSAgICBpZiAoIWR5KSB7Ci0gICAg
ICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKLSAgICAgICAgaW50ZXJzZWN0aW9u
WCA9IGVkZ2UubWluWCgpOwotICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1pblkoKSkgewotICAg
ICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKLSAgICAgICAgaW50ZXJzZWN0aW9u
WCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4Mi54
KCk7Ci0gICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7Ci0gICAgICAgIGludGVyc2Vj
dGlvblR5cGUgPSBWZXJ0ZXhNYXhZOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEu
eSgpID4gdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOwotICAgICAgICBpbnRlcnNl
Y3Rpb25YID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkp
IC8gZHkpICsgdmVydGV4MS54KCk7Ci0gICAgfQotCi0gICAgcmVzdWx0LmVkZ2UgPSBlZGdlUG9p
bnRlcjsKLSAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7Ci0gICAgcmVzdWx0LnBv
aW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgaW5saW5lIEZsb2F0U2l6ZSBpbndhcmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UmIGVkZ2UpCi17Ci0gICAgRmxvYXRTaXplIGVkZ2VEZWx0YSA9IGVkZ2UudmVydGV4MigpIC0g
ZWRnZS52ZXJ0ZXgxKCk7Ci0gICAgaWYgKCFlZGdlRGVsdGEud2lkdGgoKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0U2l6ZSgoZWRnZURlbHRhLmhlaWdodCgpID4gMCA/IC0xIDogMSksIDApOwotICAg
IGlmICghZWRnZURlbHRhLmhlaWdodCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKDAsIChl
ZGdlRGVsdGEud2lkdGgoKSA+IDAgPyAxIDogLTEpKTsKLSAgICBmbG9hdCBlZGdlTGVuZ3RoID0g
ZWRnZURlbHRhLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZSgtZWRnZURl
bHRhLmhlaWdodCgpIC8gZWRnZUxlbmd0aCwgZWRnZURlbHRhLndpZHRoKCkgLyBlZGdlTGVuZ3Ro
KTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFNpemUgb3V0d2FyZEVkZ2VOb3JtYWwoY29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKLXsKLSAgICByZXR1cm4gLWlud2FyZEVkZ2VOb3JtYWwo
ZWRnZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBcmMoVmVjdG9yPEZsb2F0UG9p
bnQ+JiB2ZXJ0aWNlcywgY29uc3QgRmxvYXRQb2ludCYgYXJjQ2VudGVyLCBmbG9hdCBhcmNSYWRp
dXMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0QXJjVmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiBl
bmRBcmNWZXJ0ZXgsIGJvb2wgcGFkZGluZykKLXsKLSAgICBmbG9hdCBzdGFydEFuZ2xlID0gYXRh
bjIoc3RhcnRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgc3RhcnRBcmNWZXJ0ZXgueCgp
IC0gYXJjQ2VudGVyLngoKSk7Ci0gICAgZmxvYXQgZW5kQW5nbGUgPSBhdGFuMihlbmRBcmNWZXJ0
ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgZW5kQXJjVmVydGV4LngoKSAtIGFyY0NlbnRlci54KCkp
OwotICAgIGNvbnN0IGZsb2F0IHR3b1BJID0gcGlGbG9hdCAqIDI7Ci0gICAgaWYgKHN0YXJ0QW5n
bGUgPCAwKQotICAgICAgICBzdGFydEFuZ2xlICs9IHR3b1BJOwotICAgIGlmIChlbmRBbmdsZSA8
IDApCi0gICAgICAgIGVuZEFuZ2xlICs9IHR3b1BJOwotICAgIGZsb2F0IGFuZ2xlID0gKHN0YXJ0
QW5nbGUgPiBlbmRBbmdsZSkgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSA6IChzdGFydEFuZ2xl
ICsgdHdvUEkgLSBlbmRBbmdsZSk7Ci0gICAgY29uc3QgZmxvYXQgYXJjU2VnbWVudENvdW50ID0g
NjsgLy8gQW4gZXZlbiBudW1iZXIgc28gdGhhdCBvbmUgYXJjIHZlcnRleCB3aWxsIGJlIGVhY3Rs
eSBhcmNSYWRpdXMgZnJvbSBhcmNDZW50ZXIuCi0gICAgZmxvYXQgYXJjU2VnbWVudEFuZ2xlID0g
ICgocGFkZGluZykgPyAtYW5nbGUgOiB0d29QSSAtIGFuZ2xlKSAvIGFyY1NlZ21lbnRDb3VudDsK
LQotICAgIHZlcnRpY2VzLmFwcGVuZChzdGFydEFyY1ZlcnRleCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IGFyY1NlZ21lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGFuZ2xl
ID0gc3RhcnRBbmdsZSArIGFyY1NlZ21lbnRBbmdsZSAqIGk7Ci0gICAgICAgIHZlcnRpY2VzLmFw
cGVuZChhcmNDZW50ZXIgKyBGbG9hdFBvaW50KGNvcyhhbmdsZSkgKiBhcmNSYWRpdXMsIHNpbihh
bmdsZSkgKiBhcmNSYWRpdXMpKTsKLSAgICB9Ci0gICAgdmVydGljZXMuYXBwZW5kKGVuZEFyY1Zl
cnRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbmFwVmVydGljZXNUb0xheW91dFVuaXRH
cmlkKFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHZlcnRpY2VzLnNpemUoKTsgKytpKQotICAgICAgICB2ZXJ0aWNlc1tpXS5zZXQo
TGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS54KCkpLnRvRmxvYXQoKSwgTGF5b3V0VW5pdCh2ZXJ0aWNl
c1tpXS55KCkpLnRvRmxvYXQoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUGFzc093blB0cjxGbG9h
dFBvbHlnb24+IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMoY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uLCBmbG9hdCBwYWRkaW5nLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBPd25QdHI8
VmVjdG9yPEZsb2F0UG9pbnQ+ID4gcGFkZGVkVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PEZsb2F0UG9pbnQ+KCkpOwotICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9uOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChp
KTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5w
cmV2aW91c0VkZ2UoKTsKLSAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2Uo
dGhpc0VkZ2UsIGlud2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogcGFkZGluZyk7Ci0gICAgICAg
IE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBpbndhcmRFZGdlTm9y
bWFsKHByZXZFZGdlKSAqIHBhZGRpbmcpOwotCi0gICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5p
bnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCi0gICAgICAgICAgICBw
YWRkZWRWZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKGlz
UmVmbGV4VmVydGV4KHByZXZFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2UudmVydGV4MSgpLCB0aGlz
RWRnZS52ZXJ0ZXgyKCkpKQotICAgICAgICAgICAgYXBwZW5kQXJjKCpwYWRkZWRWZXJ0aWNlcywg
dGhpc0VkZ2UudmVydGV4MSgpLCBwYWRkaW5nLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0ZXgyKCksIHRo
aXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgc25hcFZlcnRpY2Vz
VG9MYXlvdXRVbml0R3JpZCgqcGFkZGVkVmVydGljZXMpOwotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRmxvYXRQb2x5Z29uKHBhZGRlZFZlcnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKLX0K
LQotc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBlTWFy
Z2luQm91bmRzKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgbWFyZ2luLCBXaW5k
UnVsZSBmaWxsUnVsZSkKLXsKLSAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gbWFyZ2lu
VmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkpOwotICAgIEZsb2F0
UG9pbnQgaW50ZXJzZWN0aW9uOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHln
b24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5
Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsKLSAgICAgICAgT2Zm
c2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIG91dHdhcmRFZGdlTm9ybWFs
KHRoaXNFZGdlKSAqIG1hcmdpbik7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZz
ZXRFZGdlKHByZXZFZGdlLCBvdXR3YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkgKiBtYXJnaW4pOwot
Ci0gICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2Us
IGludGVyc2VjdGlvbikpCi0gICAgICAgICAgICBtYXJnaW5WZXJ0aWNlcy0+YXBwZW5kKGludGVy
c2VjdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZEFyYygqbWFyZ2luVmVy
dGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgbWFyZ2luLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0ZXgy
KCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIHNuYXBW
ZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKm1hcmdpblZlcnRpY2VzKTsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEZsb2F0UG9seWdvbihtYXJnaW5WZXJ0aWNlcy5yZWxlYXNlKCksIGZpbGxSdWxl
KSk7Ci19Ci0KLWNvbnN0IEZsb2F0UG9seWdvbiYgRXhjbHVzaW9uUG9seWdvbjo6c2hhcGVQYWRk
aW5nQm91bmRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2hhcGVQYWRkaW5nKCkgPj0gMCk7Ci0g
ICAgaWYgKCFzaGFwZVBhZGRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbjsKLQotICAg
IGlmICghbV9wYWRkaW5nQm91bmRzKQotICAgICAgICBtX3BhZGRpbmdCb3VuZHMgPSBjb21wdXRl
U2hhcGVQYWRkaW5nQm91bmRzKG1fcG9seWdvbiwgc2hhcGVQYWRkaW5nKCksIG1fcG9seWdvbi5m
aWxsUnVsZSgpKTsKLQotICAgIHJldHVybiAqbV9wYWRkaW5nQm91bmRzOwotfQotCi1jb25zdCBG
bG9hdFBvbHlnb24mIEV4Y2x1c2lvblBvbHlnb246OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQoc2hhcGVNYXJnaW4oKSA+PSAwKTsKLSAgICBpZiAoIXNoYXBlTWFyZ2lu
KCkpCi0gICAgICAgIHJldHVybiBtX3BvbHlnb247Ci0KLSAgICBpZiAoIW1fbWFyZ2luQm91bmRz
KQotICAgICAgICBtX21hcmdpbkJvdW5kcyA9IGNvbXB1dGVTaGFwZU1hcmdpbkJvdW5kcyhtX3Bv
bHlnb24sIHNoYXBlTWFyZ2luKCksIG1fcG9seWdvbi5maWxsUnVsZSgpKTsKLQotICAgIHJldHVy
biAqbV9tYXJnaW5Cb3VuZHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBnZXRWZXJ0ZXhJbnRl
cnNlY3Rpb25WZXJ0aWNlcyhjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24sIEZs
b2F0UG9pbnQmIHByZXZWZXJ0ZXgsIEZsb2F0UG9pbnQmIHRoaXNWZXJ0ZXgsIEZsb2F0UG9pbnQm
IG5leHRWZXJ0ZXgpCi17Ci0gICAgaWYgKGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1pblkg
JiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWF4WSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQVNTRVJUKGludGVyc2VjdGlvbi5lZGdlICYmIGludGVyc2VjdGlvbi5lZGdlLT5w
b2x5Z29uKCkpOwotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9ICooaW50ZXJzZWN0
aW9uLmVkZ2UtPnBvbHlnb24oKSk7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0Vk
Z2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKLQotICAgIGlmICgoaW50ZXJzZWN0aW9uLnR5cGUg
PT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRoaXNFZGdlLnZlcnRl
eDIoKS55KCkpKQotICAgICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSAm
JiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIoKS55KCkpKSkgewot
ICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS5wcmV2aW91c0Vk
Z2UoKS52ZXJ0ZXhJbmRleDEoKSk7Ci0gICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRl
eEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsKLSAgICAgICAgbmV4dFZlcnRleCA9IHBvbHln
b24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgyKCkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgp
KTsKLSAgICAgICAgdGhpc1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4
SW5kZXgyKCkpOwotICAgICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRn
ZS5uZXh0RWRnZSgpLnZlcnRleEluZGV4MigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGFwcGVuZEludGVydmFsWChmbG9hdCB4LCBib29sIGlu
c2lkZSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQotewotICAgIGlmICghaW5z
aWRlKQotICAgICAgICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgpKTsKLSAgICBl
bHNlCi0gICAgICAgIHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMV0ueDIgPSB4OwotCi0gICAgcmV0
dXJuICFpbnNpZGU7Ci19Ci0KLXN0YXRpYyBib29sIGNvbXBhcmVFZGdlSW50ZXJzZWN0aW9uWChj
b25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24xLCBjb25zdCBFZGdlSW50ZXJzZWN0
aW9uJiBpbnRlcnNlY3Rpb24yKQotewotICAgIGZsb2F0IHgxID0gaW50ZXJzZWN0aW9uMS5wb2lu
dC54KCk7Ci0gICAgZmxvYXQgeDIgPSBpbnRlcnNlY3Rpb24yLnBvaW50LngoKTsKLSAgICByZXR1
cm4gKHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlvbjIudHlwZSA6
IHgxIDwgeDI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhjb25zdCBG
bG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8RXhjbHVz
aW9uSW50ZXJ2YWw+JiByZXN1bHQpCi17Ci0gICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UqPiBlZGdlczsKLSAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5LCB5LCBlZGdl
cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxFZGdlSW50ZXJzZWN0aW9uPiBpbnRl
cnNlY3Rpb25zOwotICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoY29t
cHV0ZVhJbnRlcnNlY3Rpb24oZWRnZXNbaV0sIHksIGludGVyc2VjdGlvbikgJiYgaW50ZXJzZWN0
aW9uLnR5cGUgIT0gVmVydGV4WUJvdGgpCi0gICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVu
ZChpbnRlcnNlY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChpbnRlcnNlY3Rpb25zLnNpemUoKSA8
IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJlZ2lu
KCksIGludGVyc2VjdGlvbnMuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50ZXJzZWN0aW9u
WCk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgaW50IHdpbmRDb3VudCA9IDA7Ci0g
ICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKLQotICAgIHdoaWxlIChpbmRleCA8IGludGVyc2VjdGlv
bnMuc2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIHRoaXNJbnRlcnNl
Y3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4XTsKLSAgICAgICAgaWYgKGluZGV4ICsgMSA8IGlu
dGVyc2VjdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9u
JiBuZXh0SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArIDFdOwotICAgICAgICAg
ICAgaWYgKCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSA9PSBuZXh0SW50ZXJzZWN0aW9uLnBv
aW50LngoKSkgJiYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZIHx8IHRoaXNJ
bnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKSkgewotICAgICAgICAgICAgICAgIGlmICh0
aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gbmV4dEludGVyc2VjdGlvbi50eXBlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFNraXAgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBh
cmUgVmVydGV4TWF4WSxWZXJ0ZXhNYXhZIGFuZCBWZXJ0ZXhNaW5ZLFZlcnRleE1pblkuCi0gICAg
ICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3Nl
IHR5cGVzIGFyZSBWZXJ0ZXhNaW5ZLFZlcnRleE1heFkgb3IgVmVydGV4TWF4WSxWZXJ0ZXhNaW5Z
IHdpdGggb25lIGludGVyc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9
ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7Ci0gICAgICAgIGJvb2wgZXZlbk9kZENyb3NzaW5nID0g
IXdpbmRDb3VudDsKLQotICAgICAgICBpZiAocG9seWdvbi5maWxsUnVsZSgpID09IFJVTEVfRVZF
Tk9ERCkgewotICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCkueSgp
ID4gdGhpc0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7Ci0gICAgICAgICAgICBldmVuT2Rk
Q3Jvc3NpbmcgPSBldmVuT2RkQ3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChldmVuT2RkQ3Jvc3NpbmcpIHsKLSAgICAgICAgICAgIGJvb2wgZWRnZUNyb3Nz
aW5nID0gdGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbDsKLSAgICAgICAgICAgIGlmICgh
ZWRnZUNyb3NzaW5nKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwcmV2VmVydGV4Owot
ICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgdGhpc1ZlcnRleDsKLSAgICAgICAgICAgICAgICBG
bG9hdFBvaW50IG5leHRWZXJ0ZXg7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2V0VmVydGV4SW50
ZXJzZWN0aW9uVmVydGljZXModGhpc0ludGVyc2VjdGlvbiwgcHJldlZlcnRleCwgdGhpc1ZlcnRl
eCwgbmV4dFZlcnRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgueSgp
ID09IHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/
IHByZXZWZXJ0ZXgueSgpID4geSA6IHByZXZWZXJ0ZXgueSgpIDwgeTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAocHJldlZlcnRleC55KCkgPT0geSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gbmV4dFZlcnRleC55KCkgPiB5IDogbmV4dFZl
cnRleC55KCkgPCB5OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBlZGdlQ3Jvc3NpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChlZGdlQ3Jvc3NpbmcpCi0gICAgICAgICAgICAgICAgaW5z
aWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpLCBpbnNpZGUs
IHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICArK2luZGV4OwotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhjb25zdCBGbG9hdFBv
bHlnb24mIHBvbHlnb24sIGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiYgcmVzdWx0KQotewotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRn
ZXM7Ci0gICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBlZGdlcykpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBGbG9hdFBvbHlnb25FZGdlICplZGdlID0gZWRnZXNbaV07Ci0gICAgICAgIGZsb2F0IHgx
OwotICAgICAgICBmbG9hdCB4MjsKLQotICAgICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEpIHsK
LSAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rpb24p
OwotICAgICAgICAgICAgeDEgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHgxID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPCBlZGdlLT52ZXJ0ZXgy
KCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOwotCi0g
ICAgICAgIGlmIChlZGdlLT5tYXhZKCkgPiB5MikgewotICAgICAgICAgICAgY29tcHV0ZVhJbnRl
cnNlY3Rpb24oZWRnZSwgeTIsIGludGVyc2VjdGlvbik7Ci0gICAgICAgICAgICB4MiA9IGludGVy
c2VjdGlvbi5wb2ludC54KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeDIgPSAoZWRn
ZS0+dmVydGV4MSgpLnkoKSA+IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgp
LngoKSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7Ci0KLSAgICAgICAgaWYgKHgxID4geDIpCi0gICAg
ICAgICAgICBzdGQ6OnN3YXAoeDEsIHgyKTsKLQotICAgICAgICBpZiAoeDIgPiB4MSkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeDEsIHgyKSk7Ci0gICAgfQot
Ci0gICAgc29ydEV4Y2x1c2lvbkludGVydmFscyhyZXN1bHQpOwotfQotCi12b2lkIEV4Y2x1c2lv
blBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAg
IGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7Ci0gICAg
aWYgKHBvbHlnb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9
IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsK
LQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZh
bHM7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRl
cnZhbHMpOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHky
WEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdlZEludGVy
dmFsczsKLSAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVy
dmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4g
ZWRnZUludGVydmFsczsKLSAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBv
bHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IGV4Y2x1ZGVkSW50ZXJ2YWxzOwotICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKG1l
cmdlZEludGVydmFscywgZWRnZUludGVydmFscywgZXhjbHVkZWRJbnRlcnZhbHMpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gZXhjbHVkZWRJbnRlcnZhbHNb
aV07Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVy
dmFsLngyKSk7Ci0gICAgfQotfQotCi12b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVk
SW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYg
cG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwotICAgIGlmIChwb2x5Z29uLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZs
b2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBWZWN0b3I8RXhjbHVz
aW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVYSW50
ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKLSAgICBjb21wdXRl
WEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOwotCi0gICAg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBjb21tb25JbnRlcnZhbHM7Ci0gICAgaW50ZXJzZWN0
RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBjb21tb25JbnRl
cnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOwot
ICAgIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBl
ZGdlSW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gaW5jbHVkZWRJ
bnRlcnZhbHM7Ci0gICAgc3VidHJhY3RFeGNsdXNpb25JbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxz
LCBlZGdlSW50ZXJ2YWxzLCBpbmNsdWRlZEludGVydmFscyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaW5jbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRXhj
bHVzaW9uSW50ZXJ2YWwgaW50ZXJ2YWwgPSBpbmNsdWRlZEludGVydmFsc1tpXTsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3Qg
RmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9m
ZnNldEVkZ2VJbmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDIpCi17Ci0gICAgVmVjdG9y
PGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBpZiAoIXBvbHlnb24ub3Zlcmxh
cHBpbmdFZGdlcyhyZWN0LnkoKSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOwotICAg
ICAgICBpZiAoZWRnZS0+ZWRnZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdlLT5l
ZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChyZWN0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0
JiByMSwgY29uc3QgRmxvYXRSZWN0JiByMikKLXsKLSAgICBpZiAocjEueSgpIDwgcjIueSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocjEueSgpID09IHIyLnkoKSkKLSAgICAgICAg
cmV0dXJuIHIxLngoKSA8IHIyLngoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXhj
bHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0
IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVy
dmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAotewotICAgIGZsb2F0IG1pbkludGVy
dmFsVG9wID0gbWluTG9naWNhbEludGVydmFsVG9wOwotICAgIGZsb2F0IG1pbkludGVydmFsSGVp
Z2h0ID0gbWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKLSAgICBmbG9hdCBtaW5JbnRl
cnZhbFdpZHRoID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOwotCi0gICAgY29uc3Qg
RmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAgY29uc3Qg
RmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcG9seWdvbi5ib3VuZGluZ0JveCgpOwotICAgIGlmICht
aW5JbnRlcnZhbFdpZHRoID4gYm91bmRpbmdCb3gud2lkdGgoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluSW50
ZXJ2YWxUb3ApOwotICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7Ci0K
LSAgICBpZiAobWF4WSA+IGJvdW5kaW5nQm94Lm1heFkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBwb2x5
Z29uLm92ZXJsYXBwaW5nRWRnZXMobWluSW50ZXJ2YWxUb3AsIGJvdW5kaW5nQm94Lm1heFkoKSwg
ZWRnZXMpOwotCi0gICAgZmxvYXQgZHggPSBtaW5JbnRlcnZhbFdpZHRoIC8gMjsKLSAgICBmbG9h
dCBkeSA9IG1pbkludGVydmFsSGVpZ2h0IC8gMjsKLSAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVk
Z2U+IG9mZnNldEVkZ2VzOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqKGVk
Z2VzW2ldKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJldmlv
dXNFZGdlKCkudmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0g
ZWRnZS52ZXJ0ZXgxKCk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdl
LnZlcnRleDIoKTsKLSAgICAgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRFZGdl
QnVmZmVyOwotCi0gICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA+IHZlcnRleDEueSgpID8gdmVydGV4
Mi54KCkgPj0gdmVydGV4MS54KCkgOiB2ZXJ0ZXgxLngoKSA+PSB2ZXJ0ZXgyLngoKSkgewotICAg
ICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwg
RmxvYXRTaXplKGR4LCAtZHkpKSk7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVu
ZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKGVkZ2UsIEZsb2F0U2l6ZShkeCwgZHkpKSk7Ci0gICAgICAgICAgICBvZmZzZXRFZGdl
QnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCAtZHkp
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNSZWZsZXhWZXJ0ZXgodmVydGV4MCwgdmVy
dGV4MSwgdmVydGV4MikpIHsKLSAgICAgICAgICAgIGlmICh2ZXJ0ZXgyLngoKSA8PSB2ZXJ0ZXgx
LngoKSAmJiB2ZXJ0ZXgwLngoKSA8PSB2ZXJ0ZXgxLngoKSkKLSAgICAgICAgICAgICAgICBvZmZz
ZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUo
ZHgsIC1keSksIEZsb2F0U2l6ZShkeCwgZHkpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2ZXJ0
ZXgyLngoKSA+PSB2ZXJ0ZXgxLngoKSAmJiB2ZXJ0ZXgwLngoKSA+PSB2ZXJ0ZXgxLngoKSkKLSAg
ICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2
ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCAtZHkpLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKLSAgICAg
ICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0ZXgwLnkoKSA8PSB2
ZXJ0ZXgxLnkoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZz
ZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCBkeSksIEZsb2F0U2l6ZShkeCwg
ZHkpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+PSB2ZXJ0ZXgxLnkoKSAm
JiB2ZXJ0ZXgwLnkoKSA+PSB2ZXJ0ZXgxLnkoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRFZGdl
QnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCAt
ZHkpLCBGbG9hdFNpemUoZHgsIC1keSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBvZmZzZXRFZGdlQnVmZmVyLnNpemUoKTsgKytqKQotICAgICAgICAg
ICAgaWYgKG9mZnNldEVkZ2VCdWZmZXJbal0ubWF4WSgpID49IG1pblkpCi0gICAgICAgICAgICAg
ICAgb2Zmc2V0RWRnZXMuYXBwZW5kKG9mZnNldEVkZ2VCdWZmZXJbal0pOwotICAgIH0KLQotICAg
IG9mZnNldEVkZ2VzLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShwb2x5Z29uLCBtaW5JbnRlcnZh
bFRvcCwgRmxvYXRTaXplKDAsIGR5KSkpOwotCi0gICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0lu
dGVyc2VjdGlvbjsKLSAgICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OwotICAgIGJvb2wgZmlyc3RG
aXRGb3VuZCA9IGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9mZnNldEVk
Z2VzLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsg
aiA8IG9mZnNldEVkZ2VzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0RWRn
ZXNbaV0uaW50ZXJzZWN0aW9uKG9mZnNldEVkZ2VzW2pdLCBvZmZzZXRFZGdlc0ludGVyc2VjdGlv
bikpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHBvdGVudGlhbEZpcnN0Rml0TG9jYXRp
b24ob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueCgpIC0gZHgsIG9mZnNldEVkZ2VzSW50ZXJzZWN0
aW9uLnkoKSAtIGR5KTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcG90ZW50aWFsRmlyc3RG
aXRSZWN0KHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUp
OwotICAgICAgICAgICAgICAgIGlmICgob2Zmc2V0RWRnZXNbaV0uYmFzaXMoKSA9PSBPZmZzZXRQ
b2x5Z29uRWRnZTo6TGluZVRvcAotICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXRFZGdlc1tq
XS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCi0gICAgICAgICAgICAgICAg
ICAgIHx8IHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ueSgpID49IG1pbkludGVydmFsVG9wKQot
ICAgICAgICAgICAgICAgICAgICAmJiAoIWZpcnN0Rml0Rm91bmQgfHwgYWJvdmVPclRvVGhlTGVm
dChwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIGZpcnN0Rml0UmVjdCkpCi0gICAgICAgICAgICAgICAg
ICAgICYmIHBvbHlnb24uY29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCi0gICAgICAg
ICAgICAgICAgICAgICYmIGZpcnN0Rml0UmVjdEluUG9seWdvbihwb2x5Z29uLCBwb3RlbnRpYWxG
aXJzdEZpdFJlY3QsIG9mZnNldEVkZ2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdlc1tqXS5l
ZGdlSW5kZXgoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRGb3VuZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0UmVjdCA9IHBvdGVudGlhbEZpcnN0Rml0UmVj
dDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoZmlyc3RGaXRGb3VuZCkKLSAgICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5p
dChmaXJzdEZpdFJlY3QueSgpKTsKLSAgICByZXR1cm4gZmlyc3RGaXRGb3VuZDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblBvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ODU1M2FiMjFkMDY0NDFi
ZWJhMzAxOWFjMGI5YTUyODZhNWZlZTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24u
aAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgot
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNp
b25Qb2x5Z29uX2gKLSNkZWZpbmUgRXhjbHVzaW9uUG9seWdvbl9oCi0KLSNpbmNsdWRlICJFeGNs
dXNpb25JbnRlcnZhbC5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAi
RmxvYXRQb2x5Z29uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgT2Zmc2V0UG9s
eWdvbkVkZ2UgOiBwdWJsaWMgVmVydGV4UGFpciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBCYXNpcyB7
Ci0gICAgICAgIEVkZ2UsCi0gICAgICAgIFZlcnRleCwKLSAgICAgICAgTGluZVRvcAotICAgIH07
Ci0KLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBj
b25zdCBGbG9hdFNpemUmIG9mZnNldCkKLSAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgx
KCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0
KQotICAgICAgICAsIG1fZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkpCi0gICAgICAgICwgbV9i
YXNpcyhFZGdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBG
bG9hdFBvaW50JiByZWZsZXhWZXJ0ZXgsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MSwgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQyKQotICAgICAgICA6IG1fdmVydGV4MShyZWZsZXhWZXJ0ZXggKyBv
ZmZzZXQxKQotICAgICAgICAsIG1fdmVydGV4MihyZWZsZXhWZXJ0ZXggKyBvZmZzZXQyKQotICAg
ICAgICAsIG1fZWRnZUluZGV4KC0xKQotICAgICAgICAsIG1fYmFzaXMoVmVydGV4KQotICAgIHsK
LSAgICB9Ci0KLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBvbHln
b24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQp
Ci0gICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLngo
KSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKLSAgICAgICAgLCBtX3ZlcnRleDIo
RmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2
YWxUb3ApICsgb2Zmc2V0KQotICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQotICAgICAgICAsIG1f
YmFzaXMoTGluZVRvcCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgxOyB9Ci0gICAg
dmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV92ZXJ0ZXgyOyB9Ci0gICAgaW50IGVkZ2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRn
ZUluZGV4OyB9Ci0gICAgQmFzaXMgYmFzaXMoKSBjb25zdCB7IHJldHVybiBtX2Jhc2lzOyB9Ci0K
LXByaXZhdGU6Ci0gICAgRmxvYXRQb2ludCBtX3ZlcnRleDE7Ci0gICAgRmxvYXRQb2ludCBtX3Zl
cnRleDI7Ci0gICAgaW50IG1fZWRnZUluZGV4OwotICAgIEJhc2lzIG1fYmFzaXM7Ci19OwotCi1j
bGFzcyBFeGNsdXNpb25Qb2x5Z29uIDogcHVibGljIEV4Y2x1c2lvblNoYXBlIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShFeGNsdXNpb25Qb2x5Z29uKTsKLXB1YmxpYzoKLSAgICBFeGNsdXNp
b25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRS
dWxlIGZpbGxSdWxlKQotICAgICAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAgICAgLCBtX3Bv
bHlnb24odmVydGljZXMsIGZpbGxSdWxlKQotICAgICAgICAsIG1fbWFyZ2luQm91bmRzKG51bGxw
dHIpCi0gICAgICAgICwgbV9wYWRkaW5nQm91bmRzKG51bGxwdHIpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2lu
Qm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQ
YWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9s
eWdvbi5pc0VtcHR5KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMo
TGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRM
aXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2
YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVk
SW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25z
dCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3Qg
T1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZU1hcmdp
bkJvdW5kcygpIGNvbnN0OwotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVQYWRkaW5nQm91
bmRzKCkgY29uc3Q7Ci0KLSAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOwotICAgIG11dGFibGUg
T3duUHRyPEZsb2F0UG9seWdvbj4gbV9tYXJnaW5Cb3VuZHM7Ci0gICAgbXV0YWJsZSBPd25QdHI8
RmxvYXRQb2x5Z29uPiBtX3BhZGRpbmdCb3VuZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFeGNsdXNpb25Qb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQ2YjUyMDI2ZThhMWUxNmNmNGUzZjliNmM5ZDJhYjFkMjVmMGVmYmQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAot
ICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot
ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25SZWN0
YW5nbGUuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5LCBm
bG9hdCByeCwgZmxvYXQgcnkpCi17Ci0gICAgQVNTRVJUKHJ5ID4gMCk7Ci0gICAgcmV0dXJuIHJ4
ICogc3FydCgxIC0gKHkgKiB5KSAvIChyeSAqIHJ5KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxv
YXQgZWxsaXBzZVlJbnRlcmNlcHQoZmxvYXQgeCwgZmxvYXQgcngsIGZsb2F0IHJ5KQotewotICAg
IEFTU0VSVChyeCA+IDApOwotICAgIHJldHVybiByeSAqIHNxcnQoMSAtICh4ICogeCkgLyAocngg
KiByeCkpOwotfQotCi1GbG9hdFJvdW5kZWRSZWN0IEZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdC
b3VuZHMoZmxvYXQgcGFkZGluZykgY29uc3QKLXsKLSAgICBBU1NFUlQocGFkZGluZyA+PSAwKTsK
LSAgICBpZiAoIXBhZGRpbmcgfHwgaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0K
LSAgICBmbG9hdCBib3VuZHNYID0geCgpICsgc3RkOjptaW4od2lkdGgoKSAvIDIsIHBhZGRpbmcp
OwotICAgIGZsb2F0IGJvdW5kc1kgPSB5KCkgKyBzdGQ6Om1pbihoZWlnaHQoKSAvIDIsIHBhZGRp
bmcpOwotICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gc3RkOjptYXgoMC4wZiwgd2lkdGgoKSAtIHBh
ZGRpbmcgKiAyKTsKLSAgICBmbG9hdCBib3VuZHNIZWlnaHQgPSBzdGQ6Om1heCgwLjBmLCBoZWln
aHQoKSAtIHBhZGRpbmcgKiAyKTsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gc3RkOjptYXgo
MC4wZiwgcngoKSAtIHBhZGRpbmcpOwotICAgIGZsb2F0IGJvdW5kc1JhZGl1c1kgPSBzdGQ6Om1h
eCgwLjBmLCByeSgpIC0gcGFkZGluZyk7Ci0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxv
YXRSZWN0KGJvdW5kc1gsIGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9h
dFNpemUoYm91bmRzUmFkaXVzWCwgYm91bmRzUmFkaXVzWSkpOwotfQotCi1GbG9hdFJvdW5kZWRS
ZWN0IEZsb2F0Um91bmRlZFJlY3Q6Om1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1hcmdpbiA+PSAwKTsKLSAgICBpZiAoIW1hcmdpbikKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotCi0gICAgZmxvYXQgYm91bmRzWCA9IHgoKSAtIG1hcmdpbjsKLSAgICBmbG9h
dCBib3VuZHNZID0geSgpIC0gbWFyZ2luOwotICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gd2lkdGgo
KSArIG1hcmdpbiAqIDI7Ci0gICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gaGVpZ2h0KCkgKyBtYXJn
aW4gKiAyOwotICAgIGZsb2F0IGJvdW5kc1JhZGl1c1ggPSByeCgpICsgbWFyZ2luOwotICAgIGZs
b2F0IGJvdW5kc1JhZGl1c1kgPSByeSgpICsgbWFyZ2luOwotICAgIHJldHVybiBGbG9hdFJvdW5k
ZWRSZWN0KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVp
Z2h0KSwgRmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKLX0KLQotRmxv
YXRQb2ludCBGbG9hdFJvdW5kZWRSZWN0Ojpjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3
aWR0aEF0SW50ZXJjZXB0KSBjb25zdAotewotICAgIGZsb2F0IHhpID0gKHdpZHRoKCkgLSB3aWR0
aEF0SW50ZXJjZXB0KSAvIDI7Ci0gICAgZmxvYXQgeWkgPSByeSgpIC0gZWxsaXBzZVlJbnRlcmNl
cHQocngoKSAtIHhpLCByeCgpLCByeSgpKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludCh4aSwgeWkp
OwotfQotCi1GbG9hdFJvdW5kZWRSZWN0IEV4Y2x1c2lvblJlY3RhbmdsZTo6c2hhcGVQYWRkaW5n
Qm91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5k
cykgewotICAgICAgICBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgPSB0cnVlOwotICAg
ICAgICBtX3BhZGRpbmdCb3VuZHMgPSBtX2JvdW5kcy5wYWRkaW5nQm91bmRzKHNoYXBlUGFkZGlu
ZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fcGFkZGluZ0JvdW5kczsKLX0KLQotRmxvYXRSb3Vu
ZGVkUmVjdCBFeGNsdXNpb25SZWN0YW5nbGU6OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzKSB7Ci0gICAgICAgIG1faGF2
ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJnaW5Cb3VuZHMg
PSBtX2JvdW5kcy5tYXJnaW5Cb3VuZHMoc2hhcGVNYXJnaW4oKSk7Ci0gICAgfQotICAgIHJldHVy
biBtX21hcmdpbkJvdW5kczsKLX0KLQotdm9pZCBFeGNsdXNpb25SZWN0YW5nbGU6OmdldEV4Y2x1
ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIGJvdW5kcyA9IHNoYXBlTWFyZ2luQm91bmRzKCk7Ci0gICAgaWYgKGJvdW5kcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAg
ICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgaWYgKHkyIDwg
Ym91bmRzLnkoKSB8fCB5MSA+PSBib3VuZHMubWF4WSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBmbG9hdCB4MSA9IGJvdW5kcy54KCk7Ci0gICAgZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOwot
Ci0gICAgaWYgKGJvdW5kcy5yeSgpID4gMCkgewotICAgICAgICBpZiAoeTIgPCBib3VuZHMueSgp
ICsgYm91bmRzLnJ5KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0geTIgLSBib3VuZHMueSgp
IC0gYm91bmRzLnJ5KCk7Ci0gICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0
KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgeDEgPSBib3VuZHMu
eCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKLSAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAt
IGJvdW5kcy5yeCgpICsgeGk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeTEgPiBib3VuZHMubWF4WSgp
IC0gYm91bmRzLnJ5KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0gIHkxIC0gKGJvdW5kcy5t
YXhZKCkgLSBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50
ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgeDEgPSBi
b3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKLSAgICAgICAgICAgIHgyID0gYm91bmRzLm1h
eFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQu
YXBwZW5kKExpbmVTZWdtZW50KHgxLCB4MikpOwotfQotCi12b2lkIEV4Y2x1c2lvblJlY3Rhbmds
ZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAgaWYg
KGJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9n
aWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0g
ICAgaWYgKHkxIDwgYm91bmRzLnkoKSB8fCB5MiA+IGJvdW5kcy5tYXhZKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZsb2F0IHgxID0gYm91bmRzLngoKTsKLSAgICBmbG9hdCB4MiA9IGJvdW5k
cy5tYXhYKCk7Ci0KLSAgICBpZiAoYm91bmRzLnJ5KCkgPiAwKSB7Ci0gICAgICAgIGJvb2wgeTFJ
bnRlcmNlcHRzQ29ybmVyID0geTEgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCk7Ci0gICAgICAg
IGJvb2wgeTJJbnRlcmNlcHRzQ29ybmVyID0geTIgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5
KCk7Ci0gICAgICAgIGZsb2F0IHhpID0gMDsKLQotICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29y
bmVyICYmIHkySW50ZXJjZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgaWYgICh5MSA8IGJvdW5k
cy5oZWlnaHQoKSArIDIgKiBib3VuZHMueSgpIC0geTIpIHsKLSAgICAgICAgICAgICAgICBmbG9h
dCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICAgICAgICAgIHhp
ID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0gKGJvdW5k
cy5tYXhZKCkgLSBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWElu
dGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIGZsb2F0
IHlpID0geTEgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7Ci0gICAgICAgICAgICB4aSA9IGVs
bGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICB9
IGVsc2UgaWYgKHkySW50ZXJjZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgZmxvYXQgeWkgPSAg
eTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIHhpID0gZWxs
aXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyIHx8IHkySW50ZXJjZXB0c0Nvcm5lcikg
ewotICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKLSAgICAg
ICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KHgxLCB4MikpOwotfQotCi1i
b29sIEV4Y2x1c2lvblJlY3RhbmdsZTo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChM
YXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9n
aWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAotewotICAgIGZsb2F0
IG1pbkludGVydmFsVG9wID0gbWluTG9naWNhbEludGVydmFsVG9wOwotICAgIGZsb2F0IG1pbklu
dGVydmFsSGVpZ2h0ID0gbWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKLSAgICBmbG9h
dCBtaW5JbnRlcnZhbFdpZHRoID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOwotCi0g
ICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7
Ci0gICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkgfHwgbWluSW50ZXJ2YWxXaWR0aCA+IGJvdW5kcy53
aWR0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBtaW5ZID0gc3RkOjpt
YXgoYm91bmRzLnkoKSwgbWluSW50ZXJ2YWxUb3ApOwotICAgIGZsb2F0IG1heFkgPSBtaW5ZICsg
bWluSW50ZXJ2YWxIZWlnaHQ7Ci0KLSAgICBpZiAobWF4WSA+IGJvdW5kcy5tYXhZKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciA9
IG1pblkgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCk7Ci0gICAgYm9vbCBpbnRlcnZhbE92ZXJs
YXBzTWF4Q29ybmVyID0gbWF4WSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKLQotICAg
IGlmICghaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciAmJiAhaW50ZXJ2YWxPdmVybGFwc01heENv
cm5lcikgewotICAgICAgICByZXN1bHQgPSBtaW5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAv
IDI7Ci0gICAgYm9vbCBtaW5Db3JuZXJEZWZpbmVzWCA9IGZhYnMoY2VudGVyWSAtIG1pblkpID4g
ZmFicyhjZW50ZXJZIC0gbWF4WSk7Ci0gICAgYm9vbCBpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJz
ID0gbWluSW50ZXJ2YWxXaWR0aCArIDIgKiBib3VuZHMucngoKSA8PSBib3VuZHMud2lkdGgoKTsK
LSAgICBGbG9hdFBvaW50IGNvcm5lckludGVyY2VwdCA9IGJvdW5kcy5jb3JuZXJJbnRlcmNlcHRG
b3JXaWR0aChtaW5JbnRlcnZhbFdpZHRoKTsKLQotICAgIGlmIChpbnRlcnZhbE92ZXJsYXBzTWlu
Q29ybmVyICYmICghaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciB8fCBtaW5Db3JuZXJEZWZpbmVz
WCkpIHsKLSAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgYm91bmRzLnko
KSArIGNvcm5lckludGVyY2VwdC55KCkgPCBtaW5ZKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBt
aW5ZOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1p
bkludGVydmFsSGVpZ2h0IDwgYm91bmRzLmhlaWdodCgpIC0gKDIgKiBjb3JuZXJJbnRlcmNlcHQu
eSgpKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChib3VuZHMueSgp
ICsgY29ybmVySW50ZXJjZXB0LnkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyICYmICghaW50
ZXJ2YWxPdmVybGFwc01pbkNvcm5lciB8fCAhbWluQ29ybmVyRGVmaW5lc1gpKSB7Ci0gICAgICAg
IGlmIChpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8IG1pblkgPD0gIGJvdW5kcy5tYXhZKCkg
LSBjb3JuZXJJbnRlcmNlcHQueSgpIC0gbWluSW50ZXJ2YWxIZWlnaHQpIHsKLSAgICAgICAgICAg
IHJlc3VsdCA9IG1pblk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzMDlmZGFjMTYzYzEyZWU3M2QyYmU4OTNlZjMxODhiZDMyNzdj
MmEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblJlY3RhbmdsZV9oCi0jZGVm
aW5lIEV4Y2x1c2lvblJlY3RhbmdsZV9oCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFJvdW5kZWRS
ZWN0IDogcHVibGljIEZsb2F0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCgp
IHsgfQotICAgIEZsb2F0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0
IEZsb2F0U2l6ZSYgcmFkaWkpCi0gICAgICAgIDogRmxvYXRSZWN0KGJvdW5kcykKLSAgICAgICAg
LCBtX3JhZGlpKHJhZGlpKQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCByeCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmFkaWkud2lkdGgoKTsgfQotICAgIGZsb2F0IHJ5KCkgY29uc3QgeyByZXR1cm4g
bV9yYWRpaS5oZWlnaHQoKTsgfQotICAgIEZsb2F0Um91bmRlZFJlY3QgbWFyZ2luQm91bmRzKGZs
b2F0IG1hcmdpbikgY29uc3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBwYWRkaW5nQm91bmRzKGZs
b2F0IHBhZGRpbmcpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0Rm9yV2lk
dGgoZmxvYXQgd2lkdGgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZsb2F0U2l6ZSBtX3JhZGlp
OwotfTsKLQotY2xhc3MgRXhjbHVzaW9uUmVjdGFuZ2xlIDogcHVibGljIEV4Y2x1c2lvblNoYXBl
IHsKLXB1YmxpYzoKLSAgICBFeGNsdXNpb25SZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiBib3Vu
ZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCi0gICAgICAgIDogRXhjbHVzaW9uU2hhcGUoKQot
ICAgICAgICAsIG1fYm91bmRzKGJvdW5kcywgcmFkaWkpCi0gICAgICAgICwgbV9oYXZlSW5pdGlh
bGl6ZWRNYXJnaW5Cb3VuZHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRQYWRk
aW5nQm91bmRzKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qg
c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBz
dGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpKTsgfQotICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMo
KSk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fYm91bmRzLmlzRW1wdHkoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVy
dmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJ
bnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5j
bHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3As
IGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBj
b25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlTWFy
Z2luQm91bmRzKCkgY29uc3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZVBhZGRpbmdCb3Vu
ZHMoKSBjb25zdDsKLQotICAgIEZsb2F0Um91bmRlZFJlY3QgbV9ib3VuZHM7Ci0gICAgbXV0YWJs
ZSBGbG9hdFJvdW5kZWRSZWN0IG1fbWFyZ2luQm91bmRzOwotICAgIG11dGFibGUgRmxvYXRSb3Vu
ZGVkUmVjdCBtX3BhZGRpbmdCb3VuZHM7Ci0gICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxp
emVkTWFyZ2luQm91bmRzIDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRQ
YWRkaW5nQm91bmRzIDogMTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEV4Y2x1c2lvblJlY3RhbmdsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlNjQwZGI1ZDc2
MTc0NGE0YTAxYjY4MDViODVjNzhjYmIwNjdkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK
LSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKLQotI2luY2x1ZGUgIkJhc2lj
U2hhcGVGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCi0jaW5jbHVk
ZSAiRXhjbHVzaW9uUmVjdGFuZ2xlLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVk
ZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiV2luZFJ1bGUuaCIKLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBQYXNzT3duUHRy
PEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0
JiBib3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCi17Ci0gICAgQVNTRVJUKGJvdW5kcy53
aWR0aCgpID49IDAgJiYgYm91bmRzLmhlaWdodCgpID49IDAgJiYgcmFkaWkud2lkdGgoKSA+PSAw
ICYmIHJhZGlpLmhlaWdodCgpID49IDApOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVz
aW9uUmVjdGFuZ2xlKGJvdW5kcywgcmFkaWkpKTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8RXhj
bHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50
ZXIsIGZsb2F0IHJhZGl1cykKLXsKLSAgICBBU1NFUlQocmFkaXVzID49IDApOwotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0g
cmFkaXVzLCBjZW50ZXIueSgpIC0gcmFkaXVzLCByYWRpdXMqMiwgcmFkaXVzKjIpLCBGbG9hdFNp
emUocmFkaXVzLCByYWRpdXMpKSk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNo
YXBlPiBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgY29u
c3QgRmxvYXRTaXplJiByYWRpaSkKLXsKLSAgICBBU1NFUlQocmFkaWkud2lkdGgoKSA+PSAwICYm
IHJhZGlpLmhlaWdodCgpID49IDApOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9u
UmVjdGFuZ2xlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaWkud2lkdGgoKSwgY2VudGVyLnko
KSAtIHJhZGlpLmhlaWdodCgpLCByYWRpaS53aWR0aCgpKjIsIHJhZGlpLmhlaWdodCgpKjIpLCBy
YWRpaSkpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhj
bHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBX
aW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblBv
bHlnb24odmVydGljZXMsIGZpbGxSdWxlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0
IHBoeXNpY2FsUmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxvZ2lj
YWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiByZWN0OwotICAg
IGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QocmVjdC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSByZWN0Lm1heFgoKSwg
cmVjdC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpKTsKLSAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2Vk
UmVjdCgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9n
aWNhbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIHBvaW50OwotICAgIGlmIChpc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50
KHBvaW50LnkoKSwgbG9naWNhbEJveEhlaWdodCAtIHBvaW50LngoKSk7Ci0gICAgcmV0dXJuIHBv
aW50LnRyYW5zcG9zZWRQb2ludCgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBwaHlz
aWNhbFNpemVUb0xvZ2ljYWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
KQotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICByZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgp
OwotfQotCi1QYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRl
RXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZSogYmFzaWNTaGFwZSwgY29uc3QgTGF5b3V0
U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMZW5ndGggbWFy
Z2luLCBMZW5ndGggcGFkZGluZykKLXsKLSAgICBBU1NFUlQoYmFzaWNTaGFwZSk7Ci0KLSAgICBi
b29sIGhvcml6b250YWxXcml0aW5nTW9kZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRp
bmdNb2RlKTsKLSAgICBmbG9hdCBib3hXaWR0aCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGxv
Z2ljYWxCb3hTaXplLndpZHRoKCkgOiBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKTsKLSAgICBmbG9h
dCBib3hIZWlnaHQgPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94U2l6ZS5oZWln
aHQoKSA6IGxvZ2ljYWxCb3hTaXplLndpZHRoKCk7Ci0gICAgT3duUHRyPEV4Y2x1c2lvblNoYXBl
PiBleGNsdXNpb25TaGFwZTsKLQotICAgIHN3aXRjaCAoYmFzaWNTaGFwZS0+dHlwZSgpKSB7Ci0K
LSAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVSZWN0YW5nbGVUeXBlOiB7Ci0gICAgICAg
IGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEJhc2ljU2hhcGVSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgRmxvYXRSZWN0IGJv
dW5kcygKLSAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT54KCksIGJv
eFdpZHRoKSwKLSAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT55KCks
IGJveEhlaWdodCksCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+
d2lkdGgoKSwgYm94V2lkdGgpLAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0
YW5nbGUtPmhlaWdodCgpLCBib3hIZWlnaHQpKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1hMZW5n
dGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1lM
ZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKLSAgICAgICAgRmxvYXRTaXplIGNv
cm5lclJhZGlpKAotICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6
IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAotICAgICAgICAg
ICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgo
cmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsQm91
bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVpZ2h0
KCksIHdyaXRpbmdNb2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1
c2lvblJlY3RhbmdsZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVy
UmFkaWksIHdyaXRpbmdNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
QmFzaWNTaGFwZTo6QmFzaWNTaGFwZUNpcmNsZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNT
aGFwZUNpcmNsZSogY2lyY2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUNpcmNsZSo+
KGJhc2ljU2hhcGUpOwotICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxlbmd0
aChjaXJjbGUtPmNlbnRlclgoKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9hdCBjZW50ZXJZID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKLSAgICAg
ICAgZmxvYXQgcmFkaXVzID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPnJhZGl1cygpLCBz
dGQ6Om1pbihib3hIZWlnaHQsIGJveFdpZHRoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9naWNh
bENlbnRlciA9IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50
ZXJZKSwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLQotICAgICAgICBl
eGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShsb2dpY2FsQ2VudGVyLCByYWRp
dXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2lj
U2hhcGVFbGxpcHNlVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSogZWxs
aXBzZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4oYmFzaWNTaGFwZSk7
Ci0gICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNl
bnRlclgoKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1ZUZv
ckxlbmd0aChlbGxpcHNlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7Ci0gICAgICAgIGZsb2F0IHJh
ZGl1c1ggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1goKSwgYm94V2lkdGgp
OwotICAgICAgICBmbG9hdCByYWRpdXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5y
YWRpdXNZKCksIGJveEhlaWdodCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRlciA9
IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgbG9n
aWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgRmxvYXRTaXplIGxv
Z2ljYWxSYWRpaSA9IHBoeXNpY2FsU2l6ZVRvTG9naWNhbChGbG9hdFNpemUocmFkaXVzWCwgcmFk
aXVzWSksIHdyaXRpbmdNb2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4
Y2x1c2lvbkVsbGlwc2UobG9naWNhbENlbnRlciwgbG9naWNhbFJhZGlpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUG9seWdvblR5cGU6
IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZVBvbHlnb24qIHBvbHlnb24gPSBzdGF0aWNfY2Fz
dDxjb25zdCBCYXNpY1NoYXBlUG9seWdvbio+KGJhc2ljU2hhcGUpOwotICAgICAgICBjb25zdCBW
ZWN0b3I8TGVuZ3RoPiYgdmFsdWVzID0gcG9seWdvbi0+dmFsdWVzKCk7Ci0gICAgICAgIHNpemVf
dCB2YWx1ZXNTaXplID0gdmFsdWVzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWVzU2l6
ZSAlIDIpKTsKLSAgICAgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzID0g
YWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50Pih2YWx1ZXNTaXplIC8gMikpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzU2l6ZTsgaSArPSAyKSB7Ci0gICAgICAg
ICAgICBGbG9hdFBvaW50IHZlcnRleCgKLSAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVu
Z3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgpLAotICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVG
b3JMZW5ndGgodmFsdWVzLmF0KGkgKyAxKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgICAgICAoKnZl
cnRpY2VzKVtpIC8gMl0gPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKHZlcnRleCwgbG9naWNhbEJv
eFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4Y2x1
c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUG9seWdvbih2ZXJ0aWNlcy5yZWxlYXNlKCksIHBv
bHlnb24tPndpbmRSdWxlKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJh
c2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZVR5cGU6IHsKLSAgICAgICAgY29uc3Qg
QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBC
YXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgZmxvYXQgbGVm
dCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5sZWZ0KCksIGJveFdpZHRoKTsKLSAg
ICAgICAgZmxvYXQgdG9wID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnRvcCgpLCBi
b3hIZWlnaHQpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAotICAgICAgICAgICAgbGVmdCwK
LSAgICAgICAgICAgIHRvcCwKLSAgICAgICAgICAgIGJveFdpZHRoIC0gbGVmdCAtIGZsb2F0VmFs
dWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5yaWdodCgpLCBib3hXaWR0aCksCi0gICAgICAgICAgICBi
b3hIZWlnaHQgLSB0b3AgLSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+Ym90dG9tKCks
IGJveEhlaWdodCkpOwotICAgICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+
Y29ybmVyUmFkaXVzWCgpOwotICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3Rhbmds
ZS0+Y29ybmVyUmFkaXVzWSgpOwotICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCi0gICAg
ICAgICAgICByYWRpdXNYTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxl
bmd0aChyYWRpdXNYTGVuZ3RoLCBib3hXaWR0aCksCi0gICAgICAgICAgICByYWRpdXNZTGVuZ3Ro
LmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBi
b3hIZWlnaHQpKTsKLSAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJl
Y3RUb0xvZ2ljYWwoYm91bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUp
OwotCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKGxv
Z2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3JpdGluZ01v
ZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgZXhjbHVzaW9uU2hhcGUtPm1fd3JpdGlu
Z01vZGUgPSB3cml0aW5nTW9kZTsKLSAgICBleGNsdXNpb25TaGFwZS0+bV9tYXJnaW4gPSBmbG9h
dFZhbHVlRm9yTGVuZ3RoKG1hcmdpbiwgMCk7Ci0gICAgZXhjbHVzaW9uU2hhcGUtPm1fcGFkZGlu
ZyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocGFkZGluZywgMCk7Ci0KLSAgICByZXR1cm4gZXhjbHVz
aW9uU2hhcGUucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlM2Q1MWYwNDE2ODIzMjE4MjE1MmMzMjgwM2ZhNzNmYTQ4OWQ0NTFkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25TaGFwZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVfaAotI2RlZmluZSBFeGNsdXNpb25TaGFwZV9o
Ci0KLSNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNp
bmNsdWRlICJXcml0aW5nTW9kZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBMaW5l
U2VnbWVudCB7Ci0gICAgTGluZVNlZ21lbnQoZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2lj
YWxSaWdodCkKLSAgICAgICAgOiBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKLSAgICAgICAgLCBs
b2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQotICAgIHsKLSAgICB9Ci0KLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0OwotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0OwotfTsKLQotdHlwZWRl
ZiBWZWN0b3I8TGluZVNlZ21lbnQ+IFNlZ21lbnRMaXN0OwotCi0KLS8vIEEgcmVwcmVzZW50YXRp
b24gb2YgYSBCYXNpY1NoYXBlIHRoYXQgZW5hYmxlcyBsYXlvdXQgY29kZSB0byBkZXRlcm1pbmUg
aG93IHRvIGJyZWFrIGEgbGluZSB1cCBpbnRvIHNlZ21lbnRzCi0vLyB0aGF0IHdpbGwgZml0IHdp
dGhpbiBvciBhcm91bmQgYSBzaGFwZS4gVGhlIGxpbmUgaXMgZGVmaW5lZCBieSBhIHBhaXIgb2Yg
bG9naWNhbCBZIGNvb3JkaW5hdGVzIGFuZCB0aGUKLS8vIGNvbXB1dGVkIHNlZ21lbnRzIGFyZSBy
ZXR1cm5lZCBhcyBwYWlycyBvZiBsb2dpY2FsIFggY29vcmRpbmF0ZXMuIFRoZSBCYXNpY1NoYXBl
IGl0c2VsZiBpcyBkZWZpbmVkIGluCi0vLyBwaHlzaWNhbCBjb29yZGluYXRlcy4KLQotY2xhc3Mg
RXhjbHVzaW9uU2hhcGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lv
blNoYXBlPiBjcmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlKiwgY29uc3QgTGF5
b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5n
dGggcGFkZGluZyk7Ci0KLSAgICB2aXJ0dWFsIH5FeGNsdXNpb25TaGFwZSgpIHsgfQotCi0gICAg
dmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdC
b3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQg
bWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAg
IGZsb2F0IHNoYXBlTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAgICBmbG9h
dCBzaGFwZVBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0KLQotcHJpdmF0ZToK
LSAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOwotICAgIGZsb2F0IG1fbWFyZ2luOwotICAg
IGZsb2F0IG1fcGFkZGluZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEV4Y2x1c2lvblNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMTRmODIy
Yjc4NTQxZWRlM2UzYzQ4YjgzNGQ4MmMzMjhhY2UxYjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5mby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICog
ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNp
b25TaGFwZUluZm8uaCIKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGUuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIEV4
Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChFeGNsdXNpb25TaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRV
bml0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgotY29uc3QgRXhjbHVzaW9uU2hhcGUqIEV4Y2x1c2lv
blNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpjb21w
dXRlZFNoYXBlKCkgY29uc3QKLXsKLSAgICBpZiAoRXhjbHVzaW9uU2hhcGUqIGV4Y2x1c2lvblNo
YXBlID0gbV9zaGFwZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGV4Y2x1c2lvblNoYXBlOwotCi0g
ICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IChtX3JlbmRlcmVyLT5zdHlsZSgp
LT4qc2hhcGVHZXR0ZXIpKCk7Ci0gICAgQmFzaWNTaGFwZSogc2hhcGUgPSAoc2hhcGVWYWx1ZSAm
JiBzaGFwZVZhbHVlLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpID8gc2hh
cGVWYWx1ZS0+c2hhcGUoKSA6IDA7Ci0KLSAgICBBU1NFUlQoc2hhcGUpOwotCi0gICAgbV9zaGFw
ZSA9IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShzaGFwZSwgTGF5b3V0U2l6
ZShtX3NoYXBlTG9naWNhbFdpZHRoLCBtX3NoYXBlTG9naWNhbEhlaWdodCksIG1fcmVuZGVyZXIt
PnN0eWxlKCktPndyaXRpbmdNb2RlKCksIG1fcmVuZGVyZXItPnN0eWxlKCktPnNoYXBlTWFyZ2lu
KCksIG1fcmVuZGVyZXItPnN0eWxlKCktPnNoYXBlUGFkZGluZygpKTsKLSAgICBBU1NFUlQobV9z
aGFwZSk7Ci0gICAgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJl
bmRlclR5cGUsIEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChFeGNsdXNpb25TaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRV
bml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgotYm9vbCBFeGNsdXNpb25TaGFw
ZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVydmFsR2V0dGVyPjo6Y29tcHV0ZVNl
Z21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkK
LXsKLSAgICBBU1NFUlQobGluZUhlaWdodCA+PSAwKTsKLSAgICBtX3NoYXBlTGluZVRvcCA9IGxp
bmVUb3AgLSBsb2dpY2FsVG9wT2Zmc2V0KCk7Ci0gICAgbV9saW5lSGVpZ2h0ID0gbGluZUhlaWdo
dDsKLSAgICBtX3NlZ21lbnRzLmNsZWFyKCk7Ci0KLSAgICBpZiAobGluZU92ZXJsYXBzU2hhcGVC
b3VuZHMoKSkKLSAgICAgICAgKGNvbXB1dGVkU2hhcGUoKS0+KmludGVydmFsR2V0dGVyKShtX3No
YXBlTGluZVRvcCwgc3RkOjptaW4obV9saW5lSGVpZ2h0LCBzaGFwZUxvZ2ljYWxCb3R0b20oKSAt
IGxpbmVUb3ApLCBtX3NlZ21lbnRzKTsKLQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZz
ZXQgPSB0aGlzLT5sb2dpY2FsTGVmdE9mZnNldCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9zZWdtZW50cy5zaXplKCk7IGkrKykgewotICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2lj
YWxMZWZ0ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0OwotICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2lj
YWxSaWdodCArPSBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zZWdt
ZW50cy5zaXplKCk7Ci19Ci0KLXRlbXBsYXRlIGNsYXNzIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5k
ZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmRXhjbHVzaW9uU2hh
cGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjsKLXRlbXBsYXRlIGNsYXNzIEV4Y2x1c2lvblNoYXBl
SW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hh
cGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1YTcwNzkyYTNmOTEyNmZkNzVjZmI3NjgyOWZiOWFhYzYwMThmZmI5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBA
Ci0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1l
dDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZQotKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotKiAgICBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0qICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0qICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotKiAg
ICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0qIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0qIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IKLSogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0qIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSov
Ci0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVJbmZvX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hhcGVJ
bmZvX2gKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hh
cGUuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBjbGFzcyBJbmZvVHlw
ZT4KLWNsYXNzIE1hcHBlZEluZm8gewotcHVibGljOgotICAgIHN0YXRpYyBJbmZvVHlwZSogZW5z
dXJlSW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpCi0gICAgewotICAgICAgICBJbmZvTWFwJiBpbmZv
TWFwID0gTWFwcGVkSW5mbzxLZXlUeXBlLCBJbmZvVHlwZT46OmluZm9NYXAoKTsKLSAgICAgICAg
aWYgKEluZm9UeXBlKiBpbmZvID0gaW5mb01hcC5nZXQoa2V5KSkKLSAgICAgICAgICAgIHJldHVy
biBpbmZvOwotICAgICAgICB0eXBlbmFtZSBJbmZvTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gaW5m
b01hcC5hZGQoa2V5LCBJbmZvVHlwZTo6Y3JlYXRlSW5mbyhrZXkpKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIHJl
bW92ZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IGluZm9NYXAoKS5yZW1vdmUoa2V5KTsgfQot
ICAgIHN0YXRpYyBJbmZvVHlwZSogaW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsgcmV0dXJuIGlu
Zm9NYXAoKS5nZXQoa2V5KTsgfQotcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
S2V5VHlwZSosIE93blB0cjxJbmZvVHlwZT4gPiBJbmZvTWFwOwotICAgIHN0YXRpYyBJbmZvTWFw
JiBpbmZvTWFwKCkKLSAgICB7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW5mb01hcCwg
c3RhdGljSW5mb01hcCwgKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljSW5mb01hcDsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAo
UmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6
OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBj
b25zdD4KLWNsYXNzIEV4Y2x1c2lvblNoYXBlSW5mbyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+RXhjbHVzaW9uU2hhcGVJbmZvKCkgeyB9Ci0K
LSAgICB2b2lkIHNldFNoYXBlU2l6ZShMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0KQotICAgIHsKLSAgICAgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCkt
PmJveFNpemluZygpID09IENPTlRFTlRfQk9YKSB7Ci0gICAgICAgICAgICBsb2dpY2FsV2lkdGgg
LT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwotICAgICAgICAg
ICAgbG9naWNhbEhlaWdodCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhl
aWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fc2hhcGVMb2dpY2FsV2lkdGggPT0g
bG9naWNhbFdpZHRoICYmIG1fc2hhcGVMb2dpY2FsSGVpZ2h0ID09IGxvZ2ljYWxIZWlnaHQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRpcnR5U2hhcGVTaXplKCk7Ci0gICAgICAgIG1f
c2hhcGVMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGg7Ci0gICAgICAgIG1fc2hhcGVMb2dpY2Fs
SGVpZ2h0ID0gbG9naWNhbEhlaWdodDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29tcHV0
ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdo
dCk7Ci0gICAgdm9pZCBjbGVhclNlZ21lbnRzKCkgeyBtX3NlZ21lbnRzLmNsZWFyKCk7IH0KLQot
ICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRT
aGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotICAg
IExheW91dFVuaXQgc2hhcGVMb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRT
aGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQot
ICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVk
U2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVk
U2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhYKCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9
Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS53aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBz
aGFwZUxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJv
dW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbExpbmVUb3Ao
KSBjb25zdCB7IHJldHVybiBtX3NoYXBlTGluZVRvcCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQot
ICAgIExheW91dFVuaXQgbG9naWNhbExpbmVCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX3NoYXBl
TGluZVRvcCArIG1fbGluZUhlaWdodCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotCi0gICAgTGF5
b3V0VW5pdCBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIChtX3Jl
bmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgPyAobV9zaGFwZUxv
Z2ljYWxIZWlnaHQgKyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgp
KSA6IG1fc2hhcGVMb2dpY2FsSGVpZ2h0OyB9Ci0KLSAgICBib29sIGxpbmVPdmVybGFwc1NoYXBl
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExpbmVUb3AoKSA8IHNoYXBlTG9naWNhbEJv
dHRvbSgpICYmIHNoYXBlTG9naWNhbFRvcCgpIDw9IGxvZ2ljYWxMaW5lQm90dG9tKCk7IH0KLSAg
ICBib29sIGxpbmVXaXRoaW5TaGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxpbmVPdmVybGFw
c1NoYXBlQm91bmRzKCkgJiYgKGxvZ2ljYWxMaW5lQm90dG9tKCkgPD0gc2hhcGVMb2dpY2FsQm90
dG9tKCkpOyB9Ci0KLSAgICB2b2lkIGRpcnR5U2hhcGVTaXplKCkgeyBtX3NoYXBlLmNsZWFyKCk7
IH0KLSAgICBib29sIHNoYXBlU2l6ZURpcnR5KCkgeyByZXR1cm4gIW1fc2hhcGUuZ2V0KCk7IH0K
LSAgICBjb25zdCBSZW5kZXJUeXBlKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7
IH0KLQotcHJvdGVjdGVkOgotICAgIEV4Y2x1c2lvblNoYXBlSW5mbyhjb25zdCBSZW5kZXJUeXBl
KiByZW5kZXJlcik6IG1fcmVuZGVyZXIocmVuZGVyZXIpIHsgfQotCi0gICAgY29uc3QgRXhjbHVz
aW9uU2hhcGUqIGNvbXB1dGVkU2hhcGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3Qg
Y29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKLQotICAgIExheW91
dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXItPnN0eWxl
KCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFk
ZGluZ0JlZm9yZSgpIDogTGF5b3V0VW5pdCgpOyB9OwotICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5n
KCkgPT0gQ09OVEVOVF9CT1ggJiYgIW1fcmVuZGVyZXItPmlzUmVuZGVyUmVnaW9uKCkpID8gbV9y
ZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1N0YXJ0KCkgOiBMYXlvdXRVbml0KCk7IH0KLQotICAg
IExheW91dFVuaXQgbV9zaGFwZUxpbmVUb3A7Ci0gICAgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7
Ci0gICAgU2VnbWVudExpc3QgbV9zZWdtZW50czsKLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIE93
blB0cjxFeGNsdXNpb25TaGFwZT4gbV9zaGFwZTsKLQotICAgIExheW91dFVuaXQgbV9zaGFwZUxv
Z2ljYWxXaWR0aDsKLSAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2FsSGVpZ2h0OwotICAgIGNv
bnN0IFJlbmRlclR5cGUqIG1fcmVuZGVyZXI7Ci19OwotfQotI2VuZGlmCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTc0NGZjYmE5OTU0ZDlkYTBhOTk1
NWRjYTg3YWJkZWQzZTkzMTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIklu
bGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1MaW5lU2VnbWVudFJhbmdlOjpMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGlu
ZUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCkKLSAgICA6IHN0YXJ0
KHN0YXJ0LnJvb3QoKSwgc3RhcnQub2JqZWN0KCksIHN0YXJ0Lm9mZnNldCgpKQotICAgICwgZW5k
KGVuZC5yb290KCksIGVuZC5vYmplY3QoKSwgZW5kLm9mZnNldCgpKQotICAgIHsKLSAgICB9Ci0K
LWJvb2wgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVy
QmxvY2sqIHJlbmRlcmVyKQotewotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlVmFsdWUg
PSByZW5kZXJlci0+c3R5bGUoKS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpOwotICAgIGlmICghc2hh
cGVWYWx1ZSB8fCBzaGFwZVZhbHVlLT50eXBlKCkgIT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hh
cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gc2hh
cGVWYWx1ZS0+c2hhcGUoKTsKLSAgICByZXR1cm4gc2hhcGUgJiYgc2hhcGUtPnR5cGUoKSAhPSBC
YXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOwotfQotCi1ib29sIEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVu
dFdpZHRoKQotewotICAgIGNvbnN0IEV4Y2x1c2lvblNoYXBlKiBzaGFwZSA9IGNvbXB1dGVkU2hh
cGUoKTsKLSAgICBpZiAoIXNoYXBlIHx8IG1fbGluZUhlaWdodCA8PSAwIHx8IGxvZ2ljYWxMaW5l
VG9wKCkgPiBzaGFwZUxvZ2ljYWxCb3R0b20oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgTGF5b3V0VW5pdCBuZXdMaW5lVG9wOwotICAgIGlmIChzaGFwZS0+Zmlyc3RJbmNsdWRlZElu
dGVydmFsTG9naWNhbFRvcChtX3NoYXBlTGluZVRvcCwgTGF5b3V0U2l6ZShtaW5TZWdtZW50V2lk
dGgsIG1fbGluZUhlaWdodCksIG5ld0xpbmVUb3ApKSB7Ci0gICAgICAgIGlmIChuZXdMaW5lVG9w
ID4gbV9zaGFwZUxpbmVUb3ApIHsKLSAgICAgICAgICAgIG1fc2hhcGVMaW5lVG9wID0gbmV3TGlu
ZVRvcDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzg0MDMyZmY5OWY2ZmRiN2RjYzI0Yjg2NmM5NDFiODYzMDI1ODAyYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
LSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mb19oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb19oCi0K
LSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5mby5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElubGluZUl0ZXJhdG9yOwotY2xhc3MgUmVu
ZGVyQmxvY2s7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci0KLXN0cnVjdCBMaW5lU2VnbWVudEl0ZXJh
dG9yIHsKLSAgICBSZW5kZXJPYmplY3QqIHJvb3Q7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3Q7
Ci0gICAgdW5zaWduZWQgb2Zmc2V0OwotICAgIExpbmVTZWdtZW50SXRlcmF0b3IoUmVuZGVyT2Jq
ZWN0KiByb290LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0KQotICAgICAg
ICA6IHJvb3Qocm9vdCkKLSAgICAgICAgLCBvYmplY3Qob2JqZWN0KQotICAgICAgICAsIG9mZnNl
dChvZmZzZXQpCi0gICAgewotICAgIH0KLX07Ci0KLXN0cnVjdCBMaW5lU2VnbWVudFJhbmdlIHsK
LSAgICBMaW5lU2VnbWVudEl0ZXJhdG9yIHN0YXJ0OwotICAgIExpbmVTZWdtZW50SXRlcmF0b3Ig
ZW5kOwotICAgIExpbmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIHN0YXJ0LCBj
b25zdCBJbmxpbmVJdGVyYXRvciYgZW5kKTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPExpbmVTZWdt
ZW50UmFuZ2U+IFNlZ21lbnRSYW5nZUxpc3Q7Ci0KLWNsYXNzIEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHls
ZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVy
dmFscz4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbz4gY3JlYXRlSW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8ocmVuZGVyZXIpKTsgfQotCi0g
ICAgc3RhdGljIGJvb2wgaXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcik7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1f
c2VnbWVudFJhbmdlcy5jbGVhcigpOwotICAgICAgICByZXR1cm4gRXhjbHVzaW9uU2hhcGVJbmZv
PFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNp
b25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKGxp
bmVUb3AsIGxpbmVIZWlnaHQpOwotICAgIH0KLQotICAgIGJvb2wgaGFzU2VnbWVudHMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgJiYgbV9z
ZWdtZW50cy5zaXplKCk7Ci0gICAgfQotICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50cygp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFzU2VnbWVudHMoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3NlZ21lbnRzOwotICAgIH0KLSAgICBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFu
Z2VzKCkgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9Ci0gICAgY29uc3QgU2VnbWVudFJhbmdl
TGlzdCYgc2VnbWVudFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQot
ICAgIGNvbnN0IExpbmVTZWdtZW50KiBjdXJyZW50U2VnbWVudCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoIWhhc1NlZ21lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
QVNTRVJUKG1fc2VnbWVudFJhbmdlcy5zaXplKCkgPCBtX3NlZ21lbnRzLnNpemUoKSk7Ci0gICAg
ICAgIHJldHVybiAmbV9zZWdtZW50c1ttX3NlZ21lbnRSYW5nZXMuc2l6ZSgpXTsKLSAgICB9Ci0g
ICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcChmbG9hdCBtaW5TZWdtZW50V2lkdGgpOwotCi0g
ICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIHZhbHVlKSB7IG1fbmVlZHNMYXlvdXQgPSB2YWx1
ZTsgfQotICAgIGJvb2wgbmVlZHNMYXlvdXQoKSB7IHJldHVybiBtX25lZWRzTGF5b3V0OyB9Ci0K
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxC
b3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS0+c2hh
cGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KLQotcHJpdmF0ZToKLSAgICBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQotICAgIDogRXhj
bHVzaW9uU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJ
bnNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IChyZW5kZXJlcikK
LSAgICAsIG1fbmVlZHNMYXlvdXQoZmFsc2UpCi0gICAgeyB9Ci0KLSAgICBTZWdtZW50UmFuZ2VM
aXN0IG1fc2VnbWVudFJhbmdlczsKLSAgICBib29sIG1fbmVlZHNMYXlvdXQ6MTsKLX07Ci0KLX0K
LSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGM0OWNjZTVhNTZmMWNhOWRjMDRjNDk4MzBmMmM4NWNkN2RkZTJhNWUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFT
IElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0g
KiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotYm9vbCBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3Qg
UmVuZGVyQm94KiBib3gpCi17Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogdmFsdWUgPSBib3gt
PnN0eWxlKCktPnNoYXBlT3V0c2lkZSgpOwotICAgIHJldHVybiBib3gtPmlzRmxvYXRpbmdXaXRo
U2hhcGVPdXRzaWRlKCkgJiYgdmFsdWUtPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpT
aGFwZSAmJiB2YWx1ZS0+c2hhcGUoKTsKLX0KLQotYm9vbCBFeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lSGVpZ2h0KQotewotICAgIGlmIChzaGFwZVNpemVEaXJ0eSgpIHx8IG1fbGluZVRvcCAh
PSBsaW5lVG9wIHx8IG1fbGluZUhlaWdodCAhPSBsaW5lSGVpZ2h0KSB7Ci0gICAgICAgIGlmIChF
eGNsdXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwg
JkV4Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0Zv
ckxpbmUobGluZVRvcCwgbGluZUhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fbGVmdFNlZ21lbnRT
aGFwZUJvdW5kaW5nQm94RGVsdGEgPSBtX3NlZ21lbnRzWzBdLmxvZ2ljYWxMZWZ0IC0gc2hhcGVM
b2dpY2FsTGVmdCgpOwotICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94
RGVsdGEgPSBtX3NlZ21lbnRzW21fc2VnbWVudHMuc2l6ZSgpLTFdLmxvZ2ljYWxSaWdodCAtIHNo
YXBlTG9naWNhbFJpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2xlZnRT
ZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKLSAgICAgICAgICAgIG1fcmlnaHRTZWdt
ZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKLSAgICAgICAgfQotICAgICAgICBtX2xpbmVU
b3AgPSBsaW5lVG9wOwotICAgIH0KLQotICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKLX0K
LQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3YTVj
NDhiN2IxZmZjZTIxNTZmODE3ODc0NmYzZjMzMjA3ODVmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
Ci0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mb19oCi0KLSNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5mby5oIgotI2luY2x1
ZGUgIkxheW91dFNpemUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJC
b3g7Ci0KLWNsYXNzIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gOiBwdWJsaWMgRXhjbHVzaW9u
U2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZFeGNsdXNp
b25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+LCBwdWJsaWMgTWFwcGVkSW5mbzxSZW5kZXJC
b3gsIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8+IHsKLXB1YmxpYzoKLSAgICBMYXlvdXRTaXpl
IHNoYXBlTG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFNpemUoc2hhcGVMb2dp
Y2FsTGVmdCgpLCBzaGFwZUxvZ2ljYWxUb3AoKSk7IH0KLQotICAgIExheW91dFVuaXQgbGVmdFNl
Z21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2xlZnRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhOyB9Ci0gICAgTGF5b3V0VW5pdCByaWdodFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0U2VnbWVudFNoYXBlQm91
bmRpbmdCb3hEZWx0YTsgfQotCi0gICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0Zvckxp
bmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFOwot
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbz4gY3JlYXRl
SW5mbyhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbyhyZW5kZXJlcikpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNF
bmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBM
YXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCktPnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94
KCk7IH0KLQotcHJpdmF0ZToKLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKGNvbnN0IFJl
bmRlckJveCogcmVuZGVyZXIpIDogRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRl
clN0eWxlOjpzaGFwZU91dHNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZh
bHM+KHJlbmRlcmVyKSB7IH0KLQotICAgIExheW91dFVuaXQgbV9sZWZ0U2VnbWVudFNoYXBlQm91
bmRpbmdCb3hEZWx0YTsKLSAgICBMYXlvdXRVbml0IG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGlu
Z0JveERlbHRhOwotICAgIExheW91dFVuaXQgbV9saW5lVG9wOwotfTsKLQotfQotI2VuZGlmCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCmluZGV4IDBmNmQ5
M2NhYjk1MzJkNDM3MzFjMGQ1YWIyNDMzMTVkZjM2MjVmMzIuLmQ5ZWJkNjQ3YTdkOTU4NTdkMjhh
OWFlOTk2ZjNlZWIzNGM4N2Y5MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0
YXRlLmNwcApAQCAtNDAsNyArNDAsNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IExheW91dFNpegogICAgICwg
bV9saW5lR3JpZCgwKQogICAgICwgbV9uZXh0KHByZXYpCiAjaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0gICAgLCBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygwKQorICAgICwgbV9zaGFwZUluc2lk
ZUluZm8oMCkKICNlbmRpZgogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocmVuZGVy
ZXIpCkBAIC0xMTMsOSArMTEzLDkgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0
YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRTaXoKICNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkgewogICAg
ICAgICBjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRl
cmVyKTsKLSAgICAgICAgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSByZW5kZXJCbG9jay0+
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgICAgIGlmICghbV9leGNsdXNpb25TaGFw
ZUluc2lkZUluZm8gJiYgbV9uZXh0LT5tX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyAmJiByZW5k
ZXJCbG9jay0+YWxsb3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQotICAgICAg
ICAgICAgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBtX25leHQtPm1fZXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvOworICAgICAgICBtX3NoYXBlSW5zaWRlSW5mbyA9IHJlbmRlckJsb2NrLT5z
aGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgaWYgKCFtX3NoYXBlSW5zaWRlSW5mbyAmJiBtX25l
eHQtPm1fc2hhcGVJbnNpZGVJbmZvICYmIHJlbmRlckJsb2NrLT5hbGxvd3NTaGFwZUluc2lkZUlu
Zm9TaGFyaW5nKCkpCisgICAgICAgICAgICBtX3NoYXBlSW5zaWRlSW5mbyA9IG1fbmV4dC0+bV9z
aGFwZUluc2lkZUluZm87CiAgICAgfQogI2VuZGlmCiAKQEAgLTE0OSw3ICsxNDksNyBAQCBMYXlv
dXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgICwgbV9saW5lR3Jp
ZCgwKQogICAgICwgbV9uZXh0KDApCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgLCBtX2V4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygwKQorICAgICwgbV9zaGFwZUluc2lkZUluZm8oMCkKICNl
bmRpZgogICAgICwgbV9wYWdlTG9naWNhbEhlaWdodCgwKQogI2lmbmRlZiBOREVCVUcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKaW5kZXggNzVjMzUzZDVkZGE4MDhmMTliYzhm
YmFlYzQ2ODczYjVlZjU2M2FkYS4uZDc3NDljNTJjNjBkNzU2MjAxYTk4MTM5MmU4M2I1YjVjMTcy
YTA5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKQEAgLTM5LDcgKzM5
LDcgQEAgY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVy
Rmxvd1RocmVhZDsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLWNsYXNzIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbzsKK2NsYXNzIFNoYXBlSW5zaWRlSW5mbzsKICNlbmRpZgogCiBjbGFzcyBMYXlv
dXRTdGF0ZSB7CkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2xpbmVHcmlk
KDApCiAgICAgICAgICwgbV9uZXh0KDApCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAg
ICwgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8oMCkKKyAgICAgICAgLCBtX3NoYXBlSW5zaWRl
SW5mbygwKQogI2VuZGlmCiAgICAgICAgICwgbV9wYWdlTG9naWNhbEhlaWdodCgwKQogI2lmbmRl
ZiBOREVCVUcKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNCbG9ja0Rp
cmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lR3Jp
ZCB8fCAobV9pc1BhZ2luYXRlZCAmJiBtX3BhZ2VMb2dpY2FsSGVpZ2h0KTsgfQogCiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25T
aGFwZUluc2lkZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
bzsgfQorICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFwZUluc2lkZUluZm87IH0KICNlbmRpZgogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9y
bWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkLgpAQCAtMTI1LDggKzEyNSw4IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGUgY3VycmVudCBsaW5lIGdyaWQgdGhhdCB3ZSdyZSBzbmFwcGluZyB0byBh
bmQgdGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIGdyaWQuCiAgICAgUmVuZGVyQmxvY2sq
IG1fbGluZUdyaWQ7CiAgICAgTGF5b3V0U3RhdGUqIG1fbmV4dDsKLSNpZiBFTkFCTEUoQ1NTX0VY
Q0xVU0lPTlMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBtX2V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbzsKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBTaGFwZUluc2lkZUluZm8q
IG1fc2hhcGVJbnNpZGVJbmZvOwogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2gg
YmV0d2VlbiB0aGUgbGF5b3V0IGNsaXAgcmVjdCBhbmQgdGhlIHBhaW50IGNsaXAgcmVjdCB3aGlj
aCBtYXkgYmUgbGFyZ2VyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
aW5kZXggYjBkMTU5ZjJlNzRhMDliMDc5ZDY3MjdlZDllYzEzYzBmMzA5NDQzNy4uZmE4MDNlOWY3
N2NhYWM4ZjAxMDI1YTE0ZTY1YWIwMzkzNTUxMmQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCkBAIC02Nyw4ICs2Nyw4IEBACiAjaW5jbHVkZSAiVHJhbnNmb3Jt
U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiCi0jaW5jbHVkZSAi
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIgorI2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5mby5o
IgorI2luY2x1ZGUgIlNoYXBlT3V0c2lkZUluZm8uaCIKICNlbmRpZgogI2luY2x1ZGUgPHd0Zi9T
dGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgpAQCAtMzYzLDkg
KzM2Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5CiAgICAgUmVuZGVyU3R5bGUqIG5ld1N0
eWxlID0gc3R5bGUoKTsKICAgICAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAvLyBGSVhN
RTogQnVnIDg5OTkzOiBTdHlsZSBjaGFuZ2VzIHNob3VsZCBhZmZlY3QgdGhlIEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mb3MgZm9yIG90aGVyIHJlbmRlciBibG9ja3MgdGhhdAotICAgIC8vIHNoYXJl
IHRoZSBzYW1lIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbwotICAgIHVwZGF0ZUV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UobmV3U3R5bGUtPnJlc29sdmVkU2hhcGVJbnNp
ZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpIDogMCk7Cisg
ICAgdXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShuZXdTdHlsZS0+cmVzb2x2
ZWRTaGFwZUluc2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5yZXNvbHZlZFNoYXBlSW5zaWRl
KCkgOiAwKTsKICNlbmRpZgogCiAgICAgaWYgKCFpc0Fub255bW91c0Jsb2NrKCkpIHsKQEAgLTE0
NDAsMTcgKzE0MzgsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKIH0KIAogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFw
ZUluc2lkZSwgY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVJbnNpZGUpCit2b2lk
IFJlbmRlckJsb2NrOjp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0
IFNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZUluc2lk
ZSkKIHsKICAgICAvLyBGSVhNRTogQSBmdXR1cmUgb3B0aW1pemF0aW9uIHdvdWxkIGRvIGEgZGVl
cCBjb21wYXJpc29uIGZvciBlcXVhbGl0eS4KICAgICBpZiAoc2hhcGVJbnNpZGUgPT0gb2xkU2hh
cGVJbnNpZGUpCiAgICAgICAgIHJldHVybjsKIAorICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJ
bnNpZGVJbmZvOwogICAgIGlmIChzaGFwZUluc2lkZSkgewotICAgICAgICBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGVuc3VyZUV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbygpOwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmRpcnR5
U2hhcGVTaXplKCk7CisgICAgICAgIHNoYXBlSW5zaWRlSW5mbyA9IGVuc3VyZVNoYXBlSW5zaWRl
SW5mbygpOworICAgICAgICBzaGFwZUluc2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgc2V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKG51bGxwdHIpOwor
ICAgICAgICBzZXRTaGFwZUluc2lkZUluZm8obnVsbHB0cik7CiAgICAgICAgIG1hcmtTaGFwZUlu
c2lkZURlc2NlbmRhbnRzRm9yTGF5b3V0KCk7CiAgICAgfQogfQpAQCAtMTQ3MiwxNiArMTQ3MSwx
NiBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrU2hhcGVJbnNpZGVEZXNjZW5kYW50c0ZvckxheW91
dCgpCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBib29sIGV4Y2x1c2lvbkluZm9SZXF1aXJl
c1JlbGF5b3V0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
aGFwZUluZm9SZXF1aXJlc1JlbGF5b3V0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKIHsKICNp
ZiAhRU5BQkxFKENTU19TSEFQRVMpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8qIGluZm8gPSBibG9jay0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBpbmZvID0gYmxvY2stPnNoYXBlSW5zaWRlSW5m
bygpOwogICAgIGlmIChpbmZvKQogICAgICAgICBpbmZvLT5zZXROZWVkc0xheW91dChpbmZvLT5z
aGFwZVNpemVEaXJ0eSgpKTsKICAgICBlbHNlCi0gICAgICAgIGluZm8gPSBibG9jay0+bGF5b3V0
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIGluZm8gPSBibG9jay0+bGF5b3V0
U2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgcmV0dXJuIGluZm8gJiYgaW5mby0+bmVlZHNMYXlvdXQo
KTsKICNlbmRpZgogfQpAQCAtMTQ4OSwxMSArMTQ4OCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
ZXhjbHVzaW9uSW5mb1JlcXVpcmVzUmVsYXlvdXQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQog
Ym9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExh
eW91dChSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogewogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotICAgIGlmICghZmxvd1RocmVhZCAmJiAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkp
CisgICAgaWYgKCFmbG93VGhyZWFkICYmICFzaGFwZUluc2lkZUluZm8oKSkKICNlbHNlCiAgICAg
aWYgKCFmbG93VGhyZWFkKQogI2VuZGlmCi0gICAgICAgIHJldHVybiBleGNsdXNpb25JbmZvUmVx
dWlyZXNSZWxheW91dCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHNoYXBlSW5mb1JlcXVpcmVzUmVs
YXlvdXQodGhpcyk7CiAKICAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQo
KTsKICAgICBMYXlvdXRVbml0IG9sZFRvcCA9IGxvZ2ljYWxUb3AoKTsKQEAgLTE1MDQsNyArMTUw
Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3Jl
Q2hpbGRMYXlvdXQoUmVuZGVyRmxvd1RocmVhZCoKICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7
CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBjb21wdXRlRXhjbHVzaW9uU2hhcGVTaXpl
KCk7CisgICAgY29tcHV0ZVNoYXBlU2l6ZSgpOwogI2VuZGlmCiAKICAgICAvLyBTZXQgb3VyIHN0
YXJ0IGFuZCBlbmQgcmVnaW9ucy4gTm8gcmVnaW9ucyBhYm92ZSBvciBiZWxvdyB1cyB3aWxsIGJl
IGNvbnNpZGVyZWQgYnkgb3VyIGNoaWxkcmVuLiBUaGV5IGFyZQpAQCAtMTUxNCwxNiArMTUxMywx
NiBAQCBib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0JlZm9yZUNo
aWxkTGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqCiAgICAgc2V0TG9naWNhbEhlaWdodChvbGRIZWln
aHQpOwogICAgIHNldExvZ2ljYWxUb3Aob2xkVG9wKTsKICAgICAKLSAgICByZXR1cm4gZXhjbHVz
aW9uSW5mb1JlcXVpcmVzUmVsYXlvdXQodGhpcyk7CisgICAgcmV0dXJuIHNoYXBlSW5mb1JlcXVp
cmVzUmVsYXlvdXQodGhpcyk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVu
ZGVyQmxvY2s6OmNvbXB1dGVFeGNsdXNpb25TaGFwZVNpemUoKQordm9pZCBSZW5kZXJCbG9jazo6
Y29tcHV0ZVNoYXBlU2l6ZSgpCiB7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNs
dXNpb25TaGFwZUluc2lkZUluZm8gPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsK
LSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKSB7CisgICAgU2hhcGVJbnNpZGVJbmZv
KiBzaGFwZUluc2lkZUluZm8gPSB0aGlzLT5zaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hh
cGVJbnNpZGVJbmZvKSB7CiAgICAgICAgIGJvb2wgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNv
bHZhYmxlID0gcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGVGcm9tQmxvY2sodGhp
cywgZmFsc2UpOwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNldFNoYXBlU2l6
ZShsb2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9n
aWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpKTsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5z
ZXRTaGFwZVNpemUobG9naWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2
YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IExheW91dFVuaXQoKSk7CiAgICAgfQogfQogI2VuZGlm
CkBAIC0xNTMyLDcgKzE1MzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5k
RXhjbHVzaW9uc0FmdGVyQ2hpbGRMYXlvdXQoUmVuZGVyRmxvd1RocmVhZCogZgogewogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQogICAgIC8vIEEgcHJldmlvdXMgc2libGluZyBoYXMgY2hhbmdlZCBk
aW1lbnNpb24sIHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQgdGhlIHNoYXBlIHdpdGggdGhlIGNvbnRl
bnQKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGxheW91
dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJ
bnNpZGVJbmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgaWYgKGhlaWdodENoYW5n
ZWQgJiYgc2hhcGVJbnNpZGVJbmZvKQogICAgICAgICBzaGFwZUluc2lkZUluZm8tPmRpcnR5U2hh
cGVTaXplKCk7CiAjZW5kaWYKQEAgLTQwMTEsMTAgKzQwMTAsMTAgQEAgUmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
KiBvKQogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG8tPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8o
KTsKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBvLT5zaGFwZU91dHNpZGVJ
bmZvKCk7CiAgICAgaWYgKHNoYXBlT3V0c2lkZSkgewogICAgICAgICBzaGFwZU91dHNpZGUtPnNl
dFNoYXBlU2l6ZShvLT5sb2dpY2FsV2lkdGgoKSwgby0+bG9naWNhbEhlaWdodCgpKTsKLSAgICAg
ICAgLy8gVGhlIENTUyBFeGNsdXNpb25zIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoZSBtYXJn
aW5zIGFyZSBpZ25vcmVkCisgICAgICAgIC8vIFRoZSBDU1MgU2hhcGVzIHNwZWNpZmljYXRpb24g
c2F5cyB0aGF0IHRoZSBtYXJnaW5zIGFyZSBpZ25vcmVkCiAgICAgICAgIC8vIHdoZW4gYSBmbG9h
dCBoYXMgYSBzaGFwZSBvdXRzaWRlLgogICAgICAgICBzZXRMb2dpY2FsV2lkdGhGb3JGbG9hdChu
ZXdPYmosIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsV2lkdGgoKSk7CiAgICAgfSBlbHNlCkBA
IC00MDkyLDcgKzQwOTEsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2lj
YWxMb2NhdGlvbkZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbAogICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0T2Zmc2V0OyAvLyBDb25zdGFudCBwYXJ0IG9mIHJpZ2h0IG9mZnNldC4K
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAvLyBGSVhNRSBCdWcgMTAyOTQ4OiBUaGlzIG9u
bHkgd29ya3MgZm9yIHNoYXBlIG91dHNpZGUgZGlyZWN0bHkgc2V0IG9uIHRoaXMgYmxvY2suCi0g
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBleGNsdXNpb25T
aGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9
IHRoaXMtPnNoYXBlSW5zaWRlSW5mbygpOwogICAgIC8vIEZJWE1FIEJ1ZyAxMDI4NDY6IFRha2Ug
aW50byBhY2NvdW50IHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRlbnQuIFRoZSBvZmZzZXQgc2hvdWxk
IGJlCiAgICAgLy8gZXF1YWwgdG8gdGhlIG1heGltdW0gc2VnbWVudCBsZW5ndGguCiAgICAgaWYg
KHNoYXBlSW5zaWRlSW5mbyAmJiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkgJiYgc2hh
cGVJbnNpZGVJbmZvLT5zZWdtZW50cygpLnNpemUoKSA9PSAxKSB7CkBAIC00MjQ3LDggKzQyNDYs
OCBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAKICAgICAgICAgc2V0
TG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi55
KCkpOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBpZiAoY2hpbGRCb3gtPmV4Y2x1
c2lvblNoYXBlT3V0c2lkZUluZm8oKSkKLSAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JG
bG9hdChmbG9hdGluZ09iamVjdCwgY2hpbGRCb3gtPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8o
KS0+c2hhcGVMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBpZiAoY2hpbGRCb3gtPnNoYXBlT3V0
c2lkZUluZm8oKSkKKyAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGlu
Z09iamVjdCwgY2hpbGRCb3gtPnNoYXBlT3V0c2lkZUluZm8oKS0+c2hhcGVMb2dpY2FsSGVpZ2h0
KCkpOwogICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRG
b3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkQm94KSAr
IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hp
bGRCb3gpKTsKQEAgLTQ0MzQsNyArNDQzMyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAj
aWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBsYXN0
RmxvYXQgPSBhZGFwdGVyLmxhc3RGbG9hdCgpOwogICAgICAgICBpZiAob2Zmc2V0TW9kZSA9PSBT
aGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0ICYmIGxhc3RGbG9hdCkgewotICAgICAgICAgICAg
aWYgKEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+
cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKSB7CisgICAgICAgICAgICBp
ZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigp
LT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKICAgICAgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNv
bXB1dGVTZWdtZW50c0ZvckxpbmUobG9naWNhbFRvcCAtIGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0
RmxvYXQpICsgc2hhcGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodCk7
CiAgICAgICAgICAgICAgICAgbGVmdCArPSBzaGFwZU91dHNpZGUtPnJpZ2h0U2VnbWVudFNoYXBl
Qm91bmRpbmdCb3hEZWx0YSgpOwogICAgICAgICAgICAgfQpAQCAtNDQ5Miw3ICs0NDkxLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExheW91dFUKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IGFkYXB0ZXIubGFzdEZsb2F0KCk7CiAg
ICAgICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYg
bGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyog
c2hhcGVPdXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvKCkpIHsKKyAgICAgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNp
ZGUgPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgewogICAgICAg
ICAgICAgICAgIHNoYXBlT3V0c2lkZS0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsb2dpY2FsVG9w
IC0gbG9naWNhbFRvcEZvckZsb2F0KGxhc3RGbG9hdCkgKyBzaGFwZU91dHNpZGUtPnNoYXBlTG9n
aWNhbFRvcCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICByaWdodEZsb2F0T2Zm
c2V0ICs9IHNoYXBlT3V0c2lkZS0+bGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEoKTsK
ICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXgg
ZDNkY2EzZjc1ODQyYzAxYzU4Y2FjZjE2MWU5NzA3OTlmYThjYWFkZi4uMGE3ZDU5OGFiYjQxMDEy
NjM5Yjg0YTZkYTY4ODQ3ODQzNjA4YjUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKQEAgLTM1LDggKzM1LDggQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
IAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKKyNpbmNsdWRlICJTaGFw
ZUluc2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDQ2LDI4ICs0NDYsMjggQEAgcHVibGljOgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGVuc3Vy
ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpCisgICAgU2hhcGVJbnNpZGVJbmZvKiBlbnN1cmVT
aGFwZUluc2lkZUluZm8oKQogICAgIHsKICAgICAgICAgaWYgKCFtX3JhcmVEYXRhIHx8ICFtX3Jh
cmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mbykKLSAgICAgICAgICAgIHNldEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyhFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8odGhpcykpOwor
ICAgICAgICAgICAgc2V0U2hhcGVJbnNpZGVJbmZvKFNoYXBlSW5zaWRlSW5mbzo6Y3JlYXRlSW5m
byh0aGlzKSk7CiAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mby5n
ZXQoKTsKICAgICB9CiAKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbygpIGNvbnN0CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUlu
Zm8oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX3JhcmVEYXRhIHx8ICFtX3JhcmVEYXRh
LT5tX3NoYXBlSW5zaWRlSW5mbykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1
cm4gRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IodGhpcykgPyBtX3JhcmVE
YXRhLT5tX3NoYXBlSW5zaWRlSW5mby5nZXQoKSA6IDA7CisgICAgICAgIHJldHVybiBTaGFwZUlu
c2lkZUluZm86OmlzRW5hYmxlZEZvcih0aGlzKSA/IG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJ
bmZvLmdldCgpIDogMDsKICAgICB9Ci0gICAgdm9pZCBzZXRFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8oUGFzc093blB0cjxFeGNsdXNpb25TaGFwZUluc2lkZUluZm8+IHZhbHVlKQorICAgIHZvaWQg
c2V0U2hhcGVJbnNpZGVJbmZvKFBhc3NPd25QdHI8U2hhcGVJbnNpZGVJbmZvPiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0YSkKICAgICAgICAgICAgIG1fcmFyZURhdGEgPSBh
ZG9wdFB0cihuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKSk7CiAgICAgICAgIG1fcmFyZURh
dGEtPm1fc2hhcGVJbnNpZGVJbmZvID0gdmFsdWU7CiAgICAgfQogICAgIHZvaWQgbWFya1NoYXBl
SW5zaWRlRGVzY2VuZGFudHNGb3JMYXlvdXQoKTsKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8qIGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpIGNvbnN0OwotICAgIGJvb2wgYWxs
b3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpIGNvbnN0IHsgcmV0dXJuICFpc0lu
bGluZSgpICYmICFpc0Zsb2F0aW5nKCk7IH0KKyAgICBTaGFwZUluc2lkZUluZm8qIGxheW91dFNo
YXBlSW5zaWRlSW5mbygpIGNvbnN0OworICAgIGJvb2wgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hh
cmluZygpIGNvbnN0IHsgcmV0dXJuICFpc0lubGluZSgpICYmICFpc0Zsb2F0aW5nKCk7IH0KICNl
bmRpZgogCiBwcm90ZWN0ZWQ6CkBAIC01ODUsOCArNTg1LDggQEAgcHJvdGVjdGVkOgogCiBwcml2
YXRlOgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIHZvaWQgY29tcHV0ZUV4Y2x1c2lvblNo
YXBlU2l6ZSgpOwotICAgIHZvaWQgdXBkYXRlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiwgY29uc3QgRXhjbHVzaW9uU2hh
cGVWYWx1ZSogb2xkRXhjbHVzaW9uU2hhcGUpOworICAgIHZvaWQgY29tcHV0ZVNoYXBlU2l6ZSgp
OworICAgIHZvaWQgdXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBT
aGFwZVZhbHVlKiwgY29uc3QgU2hhcGVWYWx1ZSogb2xkU2hhcGUpOwogI2VuZGlmCiAgICAgdmly
dHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNo
aWxkcmVuKCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmly
dHVhbENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQpAQCAtNzg5LDcgKzc4
OSw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGlu
Z01hcmdpbihjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAgewogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotICAgICAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvICpzaGFw
ZU91dHNpZGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygp
OworICAgICAgICBTaGFwZU91dHNpZGVJbmZvICpzaGFwZU91dHNpZGUgPSBjaGlsZC0+cmVuZGVy
ZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAgICBpZiAoc2hhcGVPdXRzaWRlKQogICAg
ICAgICAgICAgcmV0dXJuIGNoaWxkLT54KCk7CiAjZW5kaWYKQEAgLTgwMyw3ICs4MDMsNyBAQCBw
cml2YXRlOgogICAgIExheW91dFVuaXQgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4o
Y29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdAogICAgIHsKICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRl
ID0gY2hpbGQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAgICAg
ICAgU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRlcmVyKCktPnNo
YXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgaWYgKHNoYXBlT3V0c2lkZSkKICAgICAgICAgICAg
IHJldHVybiBjaGlsZC0+eSgpOwogI2VuZGlmCkBAIC0xMDg0LDggKzEwODQsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmLCBib29sIGhh
c0lubGluZUNoaWxkKTsKICAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVM
YXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBj
bGVhbkxpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgdW5z
aWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpOwogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgIHZvaWQgdXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyosIExheW91dFVuaXQmLCBMaW5lTGF5b3V0U3RhdGUmLCBib29sJik7Ci0g
ICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8qLCBMYXlvdXRVbml0LCBMaW5lTGF5b3V0U3RhdGUmLCBJbmxp
bmVCaWRpUmVzb2x2ZXImLCBGbG9hdGluZ09iamVjdCosIElubGluZUl0ZXJhdG9yJiwgV29yZE1l
YXN1cmVtZW50cyYpOworICAgIHZvaWQgdXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMoU2hh
cGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCYsIExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wmKTsKKyAg
ICBib29sIGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKFNoYXBl
SW5zaWRlSW5mbyosIExheW91dFVuaXQsIExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNv
bHZlciYsIEZsb2F0aW5nT2JqZWN0KiwgSW5saW5lSXRlcmF0b3ImLCBXb3JkTWVhc3VyZW1lbnRz
Jik7CiAjZW5kaWYKICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91dFJ1bnNB
bmRGbG9hdHNJblJhbmdlKExheW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBu
ZXdMb2dpY2FsSGVpZ2h0LCAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIElubGluZUJpZGlSZXNvbHZlciYsICBjb25zdCBJbmxpbmVJdGVyYXRvciYpOwogICAgIHZv
aWQgbGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYpOwpAQCAtMTI5Miw3ICsx
MjkyLDcgQEAgcHVibGljOgogCiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fbGluZUJyZWFrVG9B
dm9pZFdpZG93OwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBPd25QdHI8RXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvPiBtX3NoYXBlSW5zaWRlSW5mbzsKKyAgICAgICAgT3duUHRyPFNo
YXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CiAjZW5kaWYKICAgICAgICAgYm9vbCBt
X3Nob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93IDogMTsKICAgICAgICAgYm9vbCBtX2Rpc2Nh
cmRNYXJnaW5CZWZvcmUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBmZDljN2M5NDY1Y2Q2NjE5ZDJkMWY5ZGQ3MWYw
NzY0N2I0YzExMzZiLi43MDQ1OThkMjA3ZmY0Y2Q1MjE4ZDNiNDRhNWQwMDk5NDFjODYxY2UwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUluZm8uaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNWRykKQEAgLTc3LDE2ICs3NywxNiBAQCBzdGF0aWMgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0Rm9yTGluZShjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExp
bgogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1FeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IFJlbmRlckJsb2NrOjpsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25zdAorU2hh
cGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCkgY29uc3QK
IHsKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJ
bnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnNoYXBl
SW5zaWRlSW5mbygpOwogCi0gICAgaWYgKCFzaGFwZUluc2lkZUluZm8gJiYgZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpICYmIGFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmco
KSkgeworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYmIGZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSAmJiBhbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpIHsKICAgICAgICAgLy8gcmVn
aW9uQXRCbG9ja09mZnNldCByZXR1cm5zIHJlZ2lvbnMgbGlrZSBhbiBhcnJheSBmaXJzdD17MCxO
LTF9LCBzZWNvbmQ9e04sTS0xfSwgLi4uCiAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbG9n
aWNhbEhlaWdodCgpICsgbG9naWNhbEhlaWdodEZvckxpbmUodGhpcywgZmFsc2UpIC0gTGF5b3V0
VW5pdCgxKTsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zm
c2V0KG9mZnNldCk7CiAgICAgICAgIGlmIChyZWdpb24pCi0gICAgICAgICAgICBzaGFwZUluc2lk
ZUluZm8gPSByZWdpb24tPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICAgICAg
c2hhcGVJbnNpZGVJbmZvID0gcmVnaW9uLT5zaGFwZUluc2lkZUluZm8oKTsKICAgICB9CiAKICAg
ICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvOwpAQCAtMTE0LDkgKzExNCw5IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAg
ICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0g
bV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgICAgIGlmIChl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8pCi0gICAgICAgICAgICBtX3NlZ21lbnQgPSBleGNsdXNp
b25TaGFwZUluc2lkZUluZm8tPmN1cnJlbnRTZWdtZW50KCk7CisgICAgICAgIFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7
CisgICAgICAgIGlmIChzaGFwZUluc2lkZUluZm8pCisgICAgICAgICAgICBtX3NlZ21lbnQgPSBz
aGFwZUluc2lkZUluZm8tPmN1cnJlbnRTZWdtZW50KCk7CiAjZW5kaWYKICAgICAgICAgdXBkYXRl
QXZhaWxhYmxlV2lkdGgoKTsKICAgICB9CkBAIC0xOTYsMjEgKzE5NiwyMSBAQCBpbmxpbmUgdm9p
ZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChSZW5k
ZXJCbG9jazo6RmxvYQogICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9hdCBvbiB0
aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9yZGVyIHRv
IHBvc2l0aW9uCiAgICAgLy8gYmFzZWQgb24gdGhlIGJvdW5kaW5nIGJveC4gSW4gb3JkZXIgdG8g
ZG8gdGhpcywgd2UgbmVlZCB0byB3YWxrIGJhY2sgdGhyb3VnaCB0aGUgZmxvYXRpbmcgb2JqZWN0
IGxpc3QgdG8gZmluZAogICAgIC8vIHRoZSBmaXJzdCBwcmV2aW91cyBmbG9hdCB0aGF0IGlzIG9u
IHRoZSBzYW1lIHNpZGUgYXMgb3VyIG5ld0Zsb2F0LgotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lk
ZUluZm8qIGxhc3RTaGFwZU91dHNpZGVJbmZvID0gMDsKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBs
YXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CiAgICAgY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICBmb3Ig
KC0taXQ7IGl0ICE9IGJlZ2luOyAtLWl0KSB7CiAgICAgICAgIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCogbGFzdEZsb2F0ID0gKml0OwogICAgICAgICBpZiAobGFzdEZsb2F0ICE9IG5ld0Zs
b2F0ICYmIGxhc3RGbG9hdC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkpIHsKLSAgICAgICAg
ICAgIGxhc3RTaGFwZU91dHNpZGVJbmZvID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvKCk7CisgICAgICAgICAgICBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9
IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAgICAgICAg
aWYgKGxhc3RTaGFwZU91dHNpZGVJbmZvKQogICAgICAgICAgICAgICAgIGxhc3RTaGFwZU91dHNp
ZGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSAt
IG1fYmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgbGFzdFNoYXBlT3V0c2lk
ZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBt
X2lzRmlyc3RMaW5lKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9h
dC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgIFNoYXBlT3V0
c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVP
dXRzaWRlSW5mbygpOwogICAgIGlmIChzaGFwZU91dHNpZGVJbmZvKQogICAgICAgICBzaGFwZU91
dHNpZGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQo
KSAtIG1fYmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCkgKyBzaGFwZU91dHNpZGVJ
bmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9p
c0ZpcnN0TGluZSkpOwogI2VuZGlmCkBAIC0xMDM1LDEwICsxMDM1LDEwIEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVC
b3gqIGxpbmVCb3gsCiAgICAgdXBkYXRlTG9naWNhbElubGluZVBvc2l0aW9ucyh0aGlzLCBsaW5l
TG9naWNhbExlZnQsIGxpbmVMb2dpY2FsUmlnaHQsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaXNG
aXJzdExpbmUsIHNob3VsZEluZGVudFRleHQsIDApOwogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2lu
ZzsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
bygpOwotICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lkZUluZm8gJiYgZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUlu
c2lkZUluZm8gPSBsYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hhcGVJbnNpZGVJ
bmZvICYmIHNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgewogICAgICAgICBCaWRpUnVu
KiBzZWdtZW50U3RhcnQgPSBmaXJzdFJ1bjsKLSAgICAgICAgY29uc3QgU2VnbWVudExpc3QmIHNl
Z21lbnRzID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOworICAgICAgICBj
b25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMgPSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCk7
CiAgICAgICAgIGZsb2F0IGxvZ2ljYWxMZWZ0ID0gbWF4PGZsb2F0Pihyb3VuZFRvSW50KHNlZ21l
bnRzWzBdLmxvZ2ljYWxMZWZ0KSwgbGluZUxvZ2ljYWxMZWZ0KTsKICAgICAgICAgZmxvYXQgbG9n
aWNhbFJpZ2h0ID0gbWluPGZsb2F0PihmbG9vclRvSW50KHNlZ21lbnRzWzBdLmxvZ2ljYWxSaWdo
dCksIGxpbmVMb2dpY2FsUmlnaHQpOwogICAgICAgICBmbG9hdCBzdGFydExvZ2ljYWxMZWZ0ID0g
bG9naWNhbExlZnQ7CkBAIC0xMzU5LDEzICsxMzU5LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBj
b25zdHJ1Y3RCaWRpUnVuc0ZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBJbmxpbmVC
aWRpCiAgICAgVU5VU0VEX1BBUkFNKGJsb2NrKTsKICAgICBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNl
Z21lbnQodG9wUmVzb2x2ZXIsIGJpZGlSdW5zLCBlbmRPZkxpbmUsIG92ZXJyaWRlLCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkpOwogI2Vsc2UKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGJsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKTsKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyB8fCAhZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CisgICAgU2hhcGVJbnNpZGVJbmZv
KiBzaGFwZUluc2lkZUluZm8gPSBibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAg
aWYgKCFzaGFwZUluc2lkZUluZm8gfHwgIXNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkg
ewogICAgICAgICBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQodG9wUmVzb2x2ZXIsIGJpZGlS
dW5zLCBlbmRPZkxpbmUsIG92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVu
dFJhbmdlcyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOworICAg
IGNvbnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBzaGFwZUluc2lkZUluZm8t
PnNlZ21lbnRSYW5nZXMoKTsKICAgICBBU1NFUlQoc2VnbWVudFJhbmdlcy5zaXplKCkpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWdtZW50UmFuZ2VzLnNpemUoKTsgaSsrKSB7CkBA
IC0xNjMxLDI2ICsxNjMxLDI2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgZmlyc3RQb3NpdGl2ZVdp
ZHRoKGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBhZGp1c3RMb2dpY2FsTGluZVRvcChF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgSW5saW5l
SXRlcmF0b3Igc3RhcnQsIElubGluZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29yZE1lYXN1cmVtZW50
cyYgd29yZE1lYXN1cmVtZW50cykKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBhZGp1c3RMb2dp
Y2FsTGluZVRvcChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywgSW5saW5lSXRlcmF0
b3Igc3RhcnQsIElubGluZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29yZE1lYXN1cmVtZW50cyYgd29y
ZE1lYXN1cmVtZW50cykKIHsKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyB8fCBl
bmQgIT0gc3RhcnQpCisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8gfHwgZW5kICE9IHN0YXJ0KQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGZsb2F0IG1pbldpZHRoID0gZmlyc3RQb3NpdGl2ZVdp
ZHRoKHdvcmRNZWFzdXJlbWVudHMpOwogICAgIEFTU0VSVChtaW5XaWR0aCB8fCB3b3JkTWVhc3Vy
ZW1lbnRzLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1pbldpZHRoID4gMCAmJiBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8tPmFkanVzdExvZ2ljYWxMaW5lVG9wKG1pbldpZHRoKSkKLSAgICAgICAgcmV0
dXJuIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVUb3AoKTsKKyAgICBpZiAo
bWluV2lkdGggPiAwICYmIHNoYXBlSW5zaWRlSW5mby0+YWRqdXN0TG9naWNhbExpbmVUb3AobWlu
V2lkdGgpKQorICAgICAgICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvLT5sb2dpY2FsTGluZVRvcCgp
OwogCi0gICAgcmV0dXJuIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsQm90
dG9tKCk7CisgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsQm90dG9tKCk7
CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yRXhjbHVzaW9u
cyhFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgTGF5
b3V0VW5pdCYgYWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBib29sJiBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKQordm9pZCBSZW5kZXJCbG9jazo6
dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lk
ZUluZm8sIExheW91dFVuaXQmIGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgYm9vbCYgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSkKIHsKICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSB0aGlzLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgUmVu
ZGVyUmVnaW9uKiBjdXJyZW50UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChsb2dpY2FsSGVp
Z2h0KTsKICAgICBpZiAoY3VycmVudFJlZ2lvbikKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgaWYgKCFleGNs
dXNpb25TaGFwZUluc2lkZUluZm8pCisgICAgICAgIHNoYXBlSW5zaWRlSW5mbyA9IGxheW91dFNo
YXBlSW5zaWRlSW5mbygpOworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvKQogICAgICAgICByZXR1
cm47CiAKICAgICBMYXlvdXRVbml0IGxpbmVUb3AgPSBsb2dpY2FsSGVpZ2h0ICsgYWJzb2x1dGVM
b2dpY2FsVG9wOwpAQCAtMTY1OCwxOCArMTY1OCwxOCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRh
dGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBl
eAogCiAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkgewogICAgICAgICBSZW5kZXJS
ZWdpb24qIG5leHRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2ljYWxIZWlnaHQgKyBs
aW5lSGVpZ2h0IC0gTGF5b3V0VW5pdCgxKSk7Ci0gICAgICAgIGxpbmVUb3AgKz0gZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CisgICAg
ICAgIGxpbmVUb3AgKz0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5n
QmVmb3JlKCk7CiAgICAgICAgIC8vIENvbnRlbnQgaW4gYSBmbG93IHRocmVhZCBpcyByZWxhdGl2
ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aHJlYWQsIGJ1dCB0aGUgc2hhcGUgY2FsY3VsYXRp
b24gc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHJlZ2lvbi4KICAgICAgICAgaWYg
KGN1cnJlbnRSZWdpb24gPT0gbmV4dFJlZ2lvbikKICAgICAgICAgICAgIGxpbmVUb3AgLT0gY3Vy
cmVudFJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCk7CiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IEJ1ZyA5NTM2MTogSXQgaXMgcG9zc2libGUgZm9yIGEgbGluZSB0byBncm93
IGJleW9uZCBsaW5lSGVpZ2h0LCBpbiB3aGljaCBjYXNlIHRoZXNlIHNlZ21lbnRzIG1heSBiZSBp
bmNvcnJlY3QuCi0gICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5jb21wdXRlU2VnbWVudHNG
b3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpOworICAgIHNoYXBlSW5zaWRlSW5mby0+Y29tcHV0
ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKIAogICAgIC8vIFRoZSBvdmVy
ZmxvdyBzaG91bGQgYmUgcHVzaGVkIGJlbG93IHRoZSBjb250ZW50IGJveAotICAgIExheW91dFVu
aXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8t
PnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KCk7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8tPmxpbmVXaXRoaW5TaGFwZUJvdW5kcygpICYmICFsaW5lT3ZlcmZsb3dzRnJvbVNo
YXBlSW5zaWRlICYmIHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7CisgICAgTGF5b3V0VW5p
dCBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IHNoYXBlSW5zaWRlSW5mby0+c2hhcGVDb250
YWluaW5nQmxvY2tIZWlnaHQoKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mby0+bGluZVdpdGhp
blNoYXBlQm91bmRzKCkgJiYgIWxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUgJiYgc2hhcGVD
b250YWluaW5nQmxvY2tIZWlnaHQpIHsKICAgICAgICAgbGluZU92ZXJmbG93c0Zyb21TaGFwZUlu
c2lkZSA9IHRydWU7CiAgICAgICAgIExheW91dFVuaXQgbmV3TG9naWNhbEhlaWdodCA9IHNoYXBl
Q29udGFpbmluZ0Jsb2NrSGVpZ2h0OwogCkBAIC0xNjgxLDkgKzE2ODEsOSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKiBleAogICAgICAgICAgICAgbmV3TG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWln
aHQgKyBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCAtIGxpbmVUb3AgLSBjdXJyZW50UmVnaW9u
LT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAKICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiog
bmV4dFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobmV3TG9naWNhbEhlaWdodCk7Ci0gICAg
ICAgICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIG5leHRTaGFwZUluZm8gPSAwOworICAg
ICAgICAgICAgU2hhcGVJbnNpZGVJbmZvKiBuZXh0U2hhcGVJbmZvID0gMDsKICAgICAgICAgICAg
IGlmIChuZXh0UmVnaW9uKQotICAgICAgICAgICAgICAgIG5leHRTaGFwZUluZm8gPSBuZXh0UmVn
aW9uLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgICAgICAgICBuZXh0U2hh
cGVJbmZvID0gbmV4dFJlZ2lvbi0+c2hhcGVJbnNpZGVJbmZvKCk7CiAKICAgICAgICAgICAgIC8v
IFRoZSBvdmVyZmxvdyBmbG93cyBpbnRvIGFub3RoZXIgcmVnaW9uIHdpdGggc2hhcGUtaW5zaWRl
CiAgICAgICAgICAgICBpZiAoY3VycmVudFJlZ2lvbiAhPSBuZXh0UmVnaW9uICYmIG5leHRTaGFw
ZUluZm8pIHsKQEAgLTE2OTIsNyArMTY5Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUxp
bmVCb3VuZGFyaWVzRm9yRXhjbHVzaW9ucyhFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4CiAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBuZXh0U2hhcGVJbmZvLT5zaGFwZUxv
Z2ljYWxUb3AoKSAtIG5leHRSZWdpb24tPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKICAgICAg
ICAgICAgICAgICBuZXh0U2hhcGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKG9mZnNldCwg
bGluZUhlaWdodCk7CiAKLSAgICAgICAgICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8g
PSBuZXh0U2hhcGVJbmZvOworICAgICAgICAgICAgICAgIHNoYXBlSW5zaWRlSW5mbyA9IG5leHRT
aGFwZUluZm87CiAgICAgICAgICAgICAgICAgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSA9
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzAwLDkgKzE3MDAsOSBAQCB2
b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKiBleAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6YWRq
dXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIExheW91dFVuaXQgYWJzb2x1dGVM
b2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sdmVyLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwg
SW5saW5lSXRlcmF0b3ImIGVuZCwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cykK
K2Jvb2wgUmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElm
TmVlZGVkKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvLCBMYXlvdXRVbml0IGFic29s
dXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5lQmlkaVJl
c29sdmVyJiByZXNvbHZlciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIElubGluZUl0ZXJhdG9yJiBlbmQsIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVu
dHMpCiB7Ci0gICAgTGF5b3V0VW5pdCBhZGp1c3RlZExvZ2ljYWxMaW5lVG9wID0gYWRqdXN0TG9n
aWNhbExpbmVUb3AoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCByZXNvbHZlci5wb3NpdGlvbigp
LCBlbmQsIHdvcmRNZWFzdXJlbWVudHMpOworICAgIExheW91dFVuaXQgYWRqdXN0ZWRMb2dpY2Fs
TGluZVRvcCA9IGFkanVzdExvZ2ljYWxMaW5lVG9wKHNoYXBlSW5zaWRlSW5mbywgcmVzb2x2ZXIu
cG9zaXRpb24oKSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKTsKICAgICBpZiAoIWFkanVzdGVkTG9n
aWNhbExpbmVUb3ApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTcyOSwxOSArMTcyOSwx
OSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAg
ICAgTGF5b3V0VW5pdCBhYnNvbHV0ZUxvZ2ljYWxUb3A7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKTsKLSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKSB7Ci0gICAgICAg
IEFTU0VSVChleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPm93bmVyKCkgPT0gdGhpcyB8fCBhbGxv
d3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpOwotICAgICAgICBpZiAoZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvICE9IHRoaXMtPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpKSB7
CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBsYXlvdXRTaGFwZUluc2lk
ZUluZm8oKTsKKyAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKSB7CisgICAgICAgIEFTU0VSVChzaGFw
ZUluc2lkZUluZm8tPm93bmVyKCkgPT0gdGhpcyB8fCBhbGxvd3NTaGFwZUluc2lkZUluZm9TaGFy
aW5nKCkpOworICAgICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvICE9IHRoaXMtPnNoYXBlSW5zaWRl
SW5mbygpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAwMjg0OiBJZiBzdWJzZXF1ZW50
IExheW91dFN0YXRlcyBhcmUgcHVzaGVkLCB3ZSB3aWxsIGhhdmUgdG8gYWRkCiAgICAgICAgICAg
ICAvLyB0aGVpciBvZmZzZXRzIGZyb20gdGhlIG9yaWdpbmFsIHNoYXBlLWluc2lkZSBjb250YWlu
ZXIuCiAgICAgICAgICAgICBhYnNvbHV0ZUxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wKCk7CiAgICAg
ICAgIH0KICAgICAgICAgLy8gQmVnaW4gbGF5b3V0IGF0IHRoZSBsb2dpY2FsIHRvcCBvZiBvdXIg
c2hhcGUgaW5zaWRlLgotICAgICAgICBpZiAobG9naWNhbEhlaWdodCgpICsgYWJzb2x1dGVMb2dp
Y2FsVG9wIDwgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSkgewot
ICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSAtIGFic29sdXRlTG9naWNhbFRvcDsKKyAgICAgICAg
aWYgKGxvZ2ljYWxIZWlnaHQoKSArIGFic29sdXRlTG9naWNhbFRvcCA8IHNoYXBlSW5zaWRlSW5m
by0+c2hhcGVMb2dpY2FsVG9wKCkpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCA9IHNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkgLSBhYnNvbHV0ZUxvZ2lj
YWxUb3A7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKQotICAgICAg
ICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5vd25l
cigpLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CisgICAgICAgICAgICAgICAgbG9naWNhbEhl
aWdodCAtPSBzaGFwZUluc2lkZUluZm8tPm93bmVyKCktPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KTsKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0xNzY5LDcgKzE3NjksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgog
ICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSA9IChjb250
YWluc0Zsb2F0cygpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5sYXN0KCkgOiAwOwogCiAj
aWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yRXhj
bHVzaW9ucyhleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIGFic29sdXRlTG9naWNhbFRvcCwgbGF5
b3V0U3RhdGUsIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUpOworICAgICAgICB1cGRhdGVM
aW5lQm91bmRhcmllc0ZvclNoYXBlcyhzaGFwZUluc2lkZUluZm8sIGFic29sdXRlTG9naWNhbFRv
cCwgbGF5b3V0U3RhdGUsIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUpOwogI2VuZGlmCiAg
ICAgICAgIFdvcmRNZWFzdXJlbWVudHMgd29yZE1lYXN1cmVtZW50czsKICAgICAgICAgZW5kID0g
bGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhyZXNvbHZlciwgbGF5b3V0U3RhdGUubGluZUluZm8o
KSwgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZl
SHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKQEAgLTE3ODUsNyArMTc4NSw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIElubGluCiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotICAgICAgICBpZiAoYWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZO
ZWVkZWQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGxheW91
dFN0YXRlLCByZXNvbHZlciwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgZW5kLCB3b3JkTWVh
c3VyZW1lbnRzKSkKKyAgICAgICAgaWYgKGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhl
aWdodElmTmVlZGVkKHNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dpY2FsVG9wLCBsYXlvdXRT
dGF0ZSwgcmVzb2x2ZXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGVuZCwgd29yZE1lYXN1
cmVtZW50cykpCiAgICAgICAgICAgICBjb250aW51ZTsKICNlbmRpZgogICAgICAgICBBU1NFUlQo
ZW5kICE9IHJlc29sdmVyLnBvc2l0aW9uKCkpOwpAQCAtMjczOCwyOSArMjczOCwyOSBAQCBJbmxp
bmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWsoSW5saW5l
QmlkaVJlc29sdmVyJiByZXNvbAogI2lmICFFTkFCTEUoQ1NTX1NIQVBFUykKICAgICByZXR1cm4g
bmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRleHRJbmZvLCBsYXN0
RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgd29yZE1l
YXN1cmVtZW50cyk7CiAjZWxzZQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5s
YXlvdXRTaGFwZUluc2lkZUluZm8oKTsKIAotICAgIGlmICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvIHx8ICFleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxpbmVPdmVybGFwc1NoYXBlQm91bmRz
KCkpCisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8gfHwgIXNoYXBlSW5zaWRlSW5mby0+bGluZU92
ZXJsYXBzU2hhcGVCb3VuZHMoKSkKICAgICAgICAgcmV0dXJuIG5leHRTZWdtZW50QnJlYWsocmVz
b2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJlbWVudHMpOwogCiAgICAg
Ly8gSW4gbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2Ugd2UgaGF2ZSB0byB1c2UgbGluZU92ZXJs
YXBzU2hhcGVCb3VuZHMoKSB0byBkZXRlcm1pbmUgdGhlIGxpbmUgc2VnbWVudHMgc2luY2Ugc2hh
cGUtb3V0c2lkZSdzIGNvZGVwYXRocyB1c2VzIHRoZSBzYW1lIGNvZGUgdG8gZGV0ZXJtaW5lIGl0
cyBzZWdtZW50cy4gVGhlIGxpbmUgY29udGFpbmluZyBpcyBub3QgYSByZXF1aXJlbWVudCBmb3Ig
c2hhcGUtb3V0c2lkZSwKICAgICAvLyBzbyBpbiB0aGlzIGNhc2Ugd2UgY2FuIGVuZCB1cCB3aXRo
IHNvbWUgZXh0cmEgc2VnbWVudHMgZm9yIHRoZSBvdmVyZmxvd2luZyBjb250ZW50LCBidXQgd2Ug
ZG9uJ3Qgd2FudCB0byBhcHBseSB0aGUgc2VnbWVudHMgZm9yIHRoZSBvdmVyZmxvd2luZyBjb250
ZW50LCBzbyB3ZSBuZWVkIHRvIHJlc2V0IGl0LgotICAgIGlmICghbV9ibG9jay0+Zmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpICYmICFleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxpbmVXaXRo
aW5TaGFwZUJvdW5kcygpKSB7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+Y2xl
YXJTZWdtZW50cygpOworICAgIGlmICghbV9ibG9jay0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
aygpICYmICFzaGFwZUluc2lkZUluZm8tPmxpbmVXaXRoaW5TaGFwZUJvdW5kcygpKSB7CisgICAg
ICAgIHNoYXBlSW5zaWRlSW5mby0+Y2xlYXJTZWdtZW50cygpOwogICAgICAgICByZXR1cm4gbmV4
dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRleHRJbmZvLCBsYXN0Rmxv
YXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgd29yZE1lYXN1
cmVtZW50cyk7CiAgICAgfQogCiAgICAgSW5saW5lSXRlcmF0b3IgZW5kID0gcmVzb2x2ZXIucG9z
aXRpb24oKTsKICAgICBJbmxpbmVJdGVyYXRvciBvbGRFbmQgPSBlbmQ7CiAKLSAgICBpZiAoIWV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIGlmICghc2hhcGVJ
bnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CiAgICAgICAgIGVuZCA9IG5leHRTZWdtZW50QnJl
YWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJlbWVudHMpOwog
ICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMob2xkRW5k
KTsKICAgICAgICAgcmV0dXJuIG9sZEVuZDsKICAgICB9CiAKLSAgICBjb25zdCBTZWdtZW50TGlz
dCYgc2VnbWVudHMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCk7Ci0gICAg
U2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdlcyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by0+c2VnbWVudFJhbmdlcygpOworICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50cyA9IHNo
YXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsKKyAgICBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50
UmFuZ2VzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50UmFuZ2VzKCk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudHMuc2l6ZSgpICYmICFlbmQuYXRFbmQoKTsgaSsrKSB7
CiAgICAgICAgIElubGluZUl0ZXJhdG9yIHNlZ21lbnRTdGFydCA9IHJlc29sdmVyLnBvc2l0aW9u
KCk7CkBAIC0zMzk4LDcgKzMzOTgsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGlu
ZUJyZWFrZXI6Om5leHRTZWdtZW50QnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiByZQogCiAgZW5k
OgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyog
c2hhcGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Cisg
ICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRTaGFwZUluc2lk
ZUluZm8oKTsKICAgICBib29sIHNlZ21lbnRBbGxvd3NPdmVyZmxvdyA9ICFzaGFwZUluZm8gfHwg
IXNoYXBlSW5mby0+aGFzU2VnbWVudHMoKTsKICNlbHNlCiAgICAgYm9vbCBzZWdtZW50QWxsb3dz
T3ZlcmZsb3cgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRl
eCAxMTRkZjViMGIyNjI3OTJmMWI5M2Q3Njk0OTE5YWI1NmEyZjI1MTFlLi4yN2M0NmVmMDE0MGMy
NzQ1M2ZjNmM2NjY2MTY4MGE0YWUyNWJiMTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojp3aWxsQmVEZXN0
cm95ZWQoKQogICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudElm
TmVlZGVkKHRoaXMpOwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKKyAgICBTaGFwZU91dHNpZGVJbmZvOjpy
ZW1vdmVJbmZvKHRoaXMpOwogI2VuZGlmCiAKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6d2ls
bEJlRGVzdHJveWVkKCk7CkBAIC0zMTUsMjIgKzMxNSwyMiBAQCB2b2lkIFJlbmRlckJveDo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZQogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIHVwZGF0ZUV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKHN0eWxlKCktPnNoYXBlT3V0c2lkZSgp
LCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5zaGFwZU91dHNpZGUoKSA6IDApOworICAgIHVwZGF0ZVNo
YXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKHN0eWxlKCktPnNoYXBlT3V0c2lkZSgpLCBv
bGRTdHlsZSA/IG9sZFN0eWxlLT5zaGFwZU91dHNpZGUoKSA6IDApOwogI2VuZGlmCiB9CiAKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyQm94Ojp1cGRhdGVFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBz
aGFwZU91dHNpZGUsIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNoYXBlT3V0c2lkZSkK
K3ZvaWQgUmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShj
b25zdCBTaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBl
T3V0c2lkZSkKIHsKICAgICAvLyBGSVhNRTogQSBmdXR1cmUgb3B0aW1pemF0aW9uIHdvdWxkIGRv
IGEgZGVlcCBjb21wYXJpc29uIGZvciBlcXVhbGl0eS4gKGJ1ZyAxMDA4MTEpCiAgICAgaWYgKHNo
YXBlT3V0c2lkZSA9PSBvbGRTaGFwZU91dHNpZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChzaGFwZU91dHNpZGUpIHsKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogZXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbyA9IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmVuc3Vy
ZUluZm8odGhpcyk7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8tPmRpcnR5U2hh
cGVTaXplKCk7CisgICAgICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBT
aGFwZU91dHNpZGVJbmZvOjplbnN1cmVJbmZvKHRoaXMpOworICAgICAgICBzaGFwZU91dHNpZGVJ
bmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOwogICAgIH0gZWxzZQotICAgICAgICBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZv
OjpyZW1vdmVJbmZvKHRoaXMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaAppbmRleCA5YWJmNmI0ODBhZjdlMzhmNmE4N2JkNDQ1YzBhNzM5MGM0MDQwN2Y4Li5h
N2ZjMWVjZWNmZDNjODA2MWNhMWI2ZGYwYzAzZDc0Yzk4YjY2OTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT3Zl
cmZsb3cuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFw
ZU91dHNpZGVJbmZvLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTc3LDkg
KzU3Nyw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1NhbWVEaXJlY3Rpb25Bcyhjb25zdCBSZW5k
ZXJCb3gqIG9iamVjdCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gb2Jq
ZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKTsgfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0g
ICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygp
IGNvbnN0CisgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5mbygpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gaXNGbG9hdGluZ1dpdGhTaGFwZU91dHNpZGUoKSAmJiBFeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IodGhpcykgPyBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvOjppbmZvKHRoaXMpIDogMDsKKyAgICAgICAgcmV0dXJuIGlzRmxvYXRpbmdX
aXRoU2hhcGVPdXRzaWRlKCkgJiYgU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMp
ID8gU2hhcGVPdXRzaWRlSW5mbzo6aW5mbyh0aGlzKSA6IDA7CiAgICAgfQogI2VuZGlmCiAKQEAg
LTYyNCw3ICs2MjQsNyBAQCBwcm90ZWN0ZWQ6CiAgCiBwcml2YXRlOgogI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQotICAgIHZvaWQgdXBkYXRlRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5
bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBF
eGNsdXNpb25TaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUpOworICAgIHZvaWQgdXBkYXRlU2hh
cGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgU2hhcGVWYWx1ZSogc2hhcGVPdXRz
aWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUpOwogI2VuZGlmCiAKICAgICBi
b29sIGZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoRnJhbWUqLCBGcmFtZVZpZXcq
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCmluZGV4IDYxYmIxYzYzNzBjMDljOGVkNmVhNTVmZDFlMmE0NjQyMjVmNzIzOTUu
LmFiYWQ1YjcyYTM5NDI3YTMwNDhlNTFiZjQ5YWZjZmE1M2YwNDFlNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNjI3LDcg
KzYyNyw3IEBAIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50T2Zmc2V0KCkg
Y29uc3QKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlmIChpc0JveCgpICYmIGlzRmxv
YXRpbmcoKSkKLSAgICAgICAgaWYgKEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0
c2lkZSA9IHRvUmVuZGVyQm94KHRoaXMpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCkpCisg
ICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSB0b1JlbmRlckJveCh0
aGlzKS0+c2hhcGVPdXRzaWRlSW5mbygpKQogICAgICAgICAgICAgb2Zmc2V0IC09IHNoYXBlT3V0
c2lkZS0+c2hhcGVMb2dpY2FsT2Zmc2V0KCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgKaW5kZXggODhhMDhiODhhMzU2ZGQ3OTc0MGU2YWRhZDc5MzUzNWVlMjFl
ZDk2NS4uYWU1NDM0ZmM1OTdlOGE0YmZkNjkwNGMzNDEzYjA2YmJjNTZkNmRmMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yNDksOCArMjQ5LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgbV9sYXlvdXRTdGF0ZS0+aXNQYWdp
bmF0ZWQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IHJlbmRlcmVyLT5mbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAgICAgIHx8IG1fbGF5b3V0U3RhdGUtPmxpbmVHcmlk
KCkgfHwgKHJlbmRlcmVyLT5zdHlsZSgpLT5saW5lR3JpZCgpICE9IFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUdyaWQoKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkKICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLSAgICAgICAgICAgIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRv
UmVuZGVyQmxvY2socmVuZGVyZXIpLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSkKLSAgICAg
ICAgICAgIHx8IChtX2xheW91dFN0YXRlLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSAmJiBy
ZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICF0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+YWxs
b3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQorICAgICAgICAgICAgfHwgKHJl
bmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPnNoYXBl
SW5zaWRlSW5mbygpKQorICAgICAgICAgICAgfHwgKG1fbGF5b3V0U3RhdGUtPnNoYXBlSW5zaWRl
SW5mbygpICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVu
ZGVyZXIpLT5hbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpCiAjZW5kaWYKICAgICAgICAg
ICAgICkgewogICAgICAgICAgICAgcHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQo
cmVuZGVyZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Q
b2x5Z29uU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29u
U2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyMTI0ZmQ1NjA3MzM1NjNiNGEwYzg3OGEzODZmZDQ0MGNh
NTI4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1BvbHlnb25TaGFwZS5jcHAKQEAgLTAsMCArMSw1MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAq
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRWRnZUludGVyc2VjdGlvblR5
cGUgeworICAgIE5vcm1hbCwKKyAgICBWZXJ0ZXhNaW5ZLAorICAgIFZlcnRleE1heFksCisgICAg
VmVydGV4WUJvdGgKK307CisKK3N0cnVjdCBFZGdlSW50ZXJzZWN0aW9uIHsKKyAgICBjb25zdCBG
bG9hdFBvbHlnb25FZGdlKiBlZGdlOworICAgIEZsb2F0UG9pbnQgcG9pbnQ7CisgICAgRWRnZUlu
dGVyc2VjdGlvblR5cGUgdHlwZTsKK307CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgbGVmdFNpZGUo
Y29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4
MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2
ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGlzUmVmbGV4VmVydGV4KGNvbnN0IEZsb2F0UG9pbnQmIHByZXZWZXJ0ZXgsIGNv
bnN0IEZsb2F0UG9pbnQmIHZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKK3sK
KyAgICByZXR1cm4gbGVmdFNpZGUocHJldlZlcnRleCwgbmV4dFZlcnRleCwgdmVydGV4KSA8IDA7
Cit9CisKK3N0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCit7
CisgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICplZGdlUG9pbnRlcjsKKworICAg
IGlmIChlZGdlLm1pblkoKSA+IHkgfHwgZWRnZS5tYXhZKCkgPCB5KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52ZXJ0ZXgxKCk7
CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOworICAgIGZs
b2F0IGR5ID0gdmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKTsKKworICAgIGZsb2F0IGludGVyc2Vj
dGlvblg7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgaW50ZXJzZWN0aW9uVHlwZTsKKworICAg
IGlmICghZHkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleFlCb3RoOworICAg
ICAgICBpbnRlcnNlY3Rpb25YID0gZWRnZS5taW5YKCk7CisgICAgfSBlbHNlIGlmICh5ID09IGVk
Z2UubWluWSgpKSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNaW5ZOworICAg
ICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpIDwgdmVydGV4Mi55KCkpID8gdmVydGV4
MS54KCkgOiB2ZXJ0ZXgyLngoKTsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5tYXhZKCkpIHsK
KyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1heFk7CisgICAgICAgIGludGVyc2Vj
dGlvblggPSAodmVydGV4MS55KCkgPiB2ZXJ0ZXgyLnkoKSkgPyB2ZXJ0ZXgxLngoKSA6IHZlcnRl
eDIueCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBOb3JtYWw7
CisgICAgICAgIGludGVyc2VjdGlvblggPSAoKHkgLSB2ZXJ0ZXgxLnkoKSkgKiAodmVydGV4Mi54
KCkgLSB2ZXJ0ZXgxLngoKSkgLyBkeSkgKyB2ZXJ0ZXgxLngoKTsKKyAgICB9CisKKyAgICByZXN1
bHQuZWRnZSA9IGVkZ2VQb2ludGVyOworICAgIHJlc3VsdC50eXBlID0gaW50ZXJzZWN0aW9uVHlw
ZTsKKyAgICByZXN1bHQucG9pbnQuc2V0KGludGVyc2VjdGlvblgsIHkpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRTaXplIGlud2FyZEVkZ2VOb3JtYWwoY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKK3sKKyAgICBGbG9hdFNpemUgZWRnZURlbHRhID0g
ZWRnZS52ZXJ0ZXgyKCkgLSBlZGdlLnZlcnRleDEoKTsKKyAgICBpZiAoIWVkZ2VEZWx0YS53aWR0
aCgpKQorICAgICAgICByZXR1cm4gRmxvYXRTaXplKChlZGdlRGVsdGEuaGVpZ2h0KCkgPiAwID8g
LTEgOiAxKSwgMCk7CisgICAgaWYgKCFlZGdlRGVsdGEuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biBGbG9hdFNpemUoMCwgKGVkZ2VEZWx0YS53aWR0aCgpID4gMCA/IDEgOiAtMSkpOworICAgIGZs
b2F0IGVkZ2VMZW5ndGggPSBlZGdlRGVsdGEuZGlhZ29uYWxMZW5ndGgoKTsKKyAgICByZXR1cm4g
RmxvYXRTaXplKC1lZGdlRGVsdGEuaGVpZ2h0KCkgLyBlZGdlTGVuZ3RoLCBlZGdlRGVsdGEud2lk
dGgoKSAvIGVkZ2VMZW5ndGgpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvdXR3YXJk
RWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlKQoreworICAgIHJldHVybiAt
aW53YXJkRWRnZU5vcm1hbChlZGdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZEFy
YyhWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzLCBjb25zdCBGbG9hdFBvaW50JiBhcmNDZW50
ZXIsIGZsb2F0IGFyY1JhZGl1cywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRBcmNWZXJ0ZXgsIGNv
bnN0IEZsb2F0UG9pbnQmIGVuZEFyY1ZlcnRleCwgYm9vbCBwYWRkaW5nKQoreworICAgIGZsb2F0
IHN0YXJ0QW5nbGUgPSBhdGFuMihzdGFydEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgpLCBz
dGFydEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKKyAgICBmbG9hdCBlbmRBbmdsZSA9
IGF0YW4yKGVuZEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgpLCBlbmRBcmNWZXJ0ZXgueCgp
IC0gYXJjQ2VudGVyLngoKSk7CisgICAgY29uc3QgZmxvYXQgdHdvUEkgPSBwaUZsb2F0ICogMjsK
KyAgICBpZiAoc3RhcnRBbmdsZSA8IDApCisgICAgICAgIHN0YXJ0QW5nbGUgKz0gdHdvUEk7Cisg
ICAgaWYgKGVuZEFuZ2xlIDwgMCkKKyAgICAgICAgZW5kQW5nbGUgKz0gdHdvUEk7CisgICAgZmxv
YXQgYW5nbGUgPSAoc3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSA/IChzdGFydEFuZ2xlIC0gZW5kQW5n
bGUpIDogKHN0YXJ0QW5nbGUgKyB0d29QSSAtIGVuZEFuZ2xlKTsKKyAgICBjb25zdCBmbG9hdCBh
cmNTZWdtZW50Q291bnQgPSA2OyAvLyBBbiBldmVuIG51bWJlciBzbyB0aGF0IG9uZSBhcmMgdmVy
dGV4IHdpbGwgYmUgZWFjdGx5IGFyY1JhZGl1cyBmcm9tIGFyY0NlbnRlci4KKyAgICBmbG9hdCBh
cmNTZWdtZW50QW5nbGUgPSAgKChwYWRkaW5nKSA/IC1hbmdsZSA6IHR3b1BJIC0gYW5nbGUpIC8g
YXJjU2VnbWVudENvdW50OworCisgICAgdmVydGljZXMuYXBwZW5kKHN0YXJ0QXJjVmVydGV4KTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJjU2VnbWVudENvdW50OyArK2kpIHsKKyAg
ICAgICAgZmxvYXQgYW5nbGUgPSBzdGFydEFuZ2xlICsgYXJjU2VnbWVudEFuZ2xlICogaTsKKyAg
ICAgICAgdmVydGljZXMuYXBwZW5kKGFyY0NlbnRlciArIEZsb2F0UG9pbnQoY29zKGFuZ2xlKSAq
IGFyY1JhZGl1cywgc2luKGFuZ2xlKSAqIGFyY1JhZGl1cykpOworICAgIH0KKyAgICB2ZXJ0aWNl
cy5hcHBlbmQoZW5kQXJjVmVydGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNuYXBWZXJ0
aWNlc1RvTGF5b3V0VW5pdEdyaWQoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNlcykKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVydGljZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHZlcnRpY2VzW2ldLnNldChMYXlvdXRVbml0KHZlcnRpY2VzW2ldLngoKSkudG9GbG9hdCgpLCBM
YXlvdXRVbml0KHZlcnRpY2VzW2ldLnkoKSkudG9GbG9hdCgpKTsKK30KKworc3RhdGljIGlubGlu
ZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyhjb25z
dCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHBhZGRpbmcsIFdpbmRSdWxlIGZpbGxSdWxl
KQoreworICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBwYWRkZWRWZXJ0aWNlcyA9IGFk
b3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKSk7CisgICAgRmxvYXRQb2ludCBpbnRlcnNl
Y3Rpb247CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seWdvbi5udW1iZXJPZkVk
Z2VzKCk7ICsraSkgeworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9
IHBvbHlnb24uZWRnZUF0KGkpOworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2
RWRnZSA9IHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpOworICAgICAgICBPZmZzZXRQb2x5Z29uRWRn
ZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRnZSwgaW53YXJkRWRnZU5vcm1hbCh0aGlzRWRnZSkgKiBw
YWRkaW5nKTsKKyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9mZnNldEVkZ2UocHJldkVk
Z2UsIGlud2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogcGFkZGluZyk7CisKKyAgICAgICAgaWYg
KHByZXZPZmZzZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9u
KSkKKyAgICAgICAgICAgIHBhZGRlZFZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAg
ICAgICAgZWxzZSBpZiAoaXNSZWZsZXhWZXJ0ZXgocHJldkVkZ2UudmVydGV4MSgpLCB0aGlzRWRn
ZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDIoKSkpCisgICAgICAgICAgICBhcHBlbmRBcmMo
KnBhZGRlZFZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHBhZGRpbmcsIHByZXZPZmZzZXRF
ZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4MSgpLCB0cnVlKTsKKyAgICB9CisK
KyAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCpwYWRkZWRWZXJ0aWNlcyk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24ocGFkZGVkVmVydGljZXMucmVsZWFzZSgp
LCBmaWxsUnVsZSkpOworfQorCitzdGF0aWMgaW5saW5lIFBhc3NPd25QdHI8RmxvYXRQb2x5Z29u
PiBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBm
bG9hdCBtYXJnaW4sIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIE93blB0cjxWZWN0b3I8Rmxv
YXRQb2ludD4gPiBtYXJnaW5WZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2lu
dD4oKSk7CisgICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb247CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcG9seWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkgeworICAgICAgICBjb25z
dCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRnZUF0KGkpOworICAgICAg
ICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNFZGdlLnByZXZpb3VzRWRn
ZSgpOworICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRnZSwg
b3V0d2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogbWFyZ2luKTsKKyAgICAgICAgT2Zmc2V0UG9s
eWdvbkVkZ2UgcHJldk9mZnNldEVkZ2UocHJldkVkZ2UsIG91dHdhcmRFZGdlTm9ybWFsKHByZXZF
ZGdlKSAqIG1hcmdpbik7CisKKyAgICAgICAgaWYgKHByZXZPZmZzZXRFZGdlLmludGVyc2VjdGlv
bih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9uKSkKKyAgICAgICAgICAgIG1hcmdpblZlcnRp
Y2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBw
ZW5kQXJjKCptYXJnaW5WZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgpLCBtYXJnaW4sIHByZXZP
ZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4MSgpLCBmYWxzZSk7Cisg
ICAgfQorCisgICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgqbWFyZ2luVmVydGljZXMp
OworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKG1hcmdpblZlcnRpY2VzLnJl
bGVhc2UoKSwgZmlsbFJ1bGUpKTsKK30KKworY29uc3QgRmxvYXRQb2x5Z29uJiBQb2x5Z29uU2hh
cGU6OnNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNoYXBlUGFkZGlu
ZygpID49IDApOworICAgIGlmICghc2hhcGVQYWRkaW5nKCkpCisgICAgICAgIHJldHVybiBtX3Bv
bHlnb247CisKKyAgICBpZiAoIW1fcGFkZGluZ0JvdW5kcykKKyAgICAgICAgbV9wYWRkaW5nQm91
bmRzID0gY29tcHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyhtX3BvbHlnb24sIHNoYXBlUGFkZGluZygp
LCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7CisKKyAgICByZXR1cm4gKm1fcGFkZGluZ0JvdW5kczsK
K30KKworY29uc3QgRmxvYXRQb2x5Z29uJiBQb2x5Z29uU2hhcGU6OnNoYXBlTWFyZ2luQm91bmRz
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2hhcGVNYXJnaW4oKSA+PSAwKTsKKyAgICBpZiAoIXNo
YXBlTWFyZ2luKCkpCisgICAgICAgIHJldHVybiBtX3BvbHlnb247CisKKyAgICBpZiAoIW1fbWFy
Z2luQm91bmRzKQorICAgICAgICBtX21hcmdpbkJvdW5kcyA9IGNvbXB1dGVTaGFwZU1hcmdpbkJv
dW5kcyhtX3BvbHlnb24sIHNoYXBlTWFyZ2luKCksIG1fcG9seWdvbi5maWxsUnVsZSgpKTsKKwor
ICAgIHJldHVybiAqbV9tYXJnaW5Cb3VuZHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBnZXRW
ZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyhjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNl
Y3Rpb24sIEZsb2F0UG9pbnQmIHByZXZWZXJ0ZXgsIEZsb2F0UG9pbnQmIHRoaXNWZXJ0ZXgsIEZs
b2F0UG9pbnQmIG5leHRWZXJ0ZXgpCit7CisgICAgaWYgKGludGVyc2VjdGlvbi50eXBlICE9IFZl
cnRleE1pblkgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWF4WSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGludGVyc2VjdGlvbi5lZGdlICYmIGludGVyc2VjdGlv
bi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9ICoo
aW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSYgdGhpc0VkZ2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKKworICAgIGlmICgoaW50ZXJzZWN0
aW9uLnR5cGUgPT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRoaXNF
ZGdlLnZlcnRleDIoKS55KCkpKQorICAgICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVy
dGV4TWF4WSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIoKS55
KCkpKSkgeworICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS5w
cmV2aW91c0VkZ2UoKS52ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5
Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsKKyAgICAgICAgbmV4dFZlcnRl
eCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgyKCkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRl
eEluZGV4MSgpKTsKKyAgICAgICAgdGhpc1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0Vk
Z2UudmVydGV4SW5kZXgyKCkpOworICAgICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhB
dCh0aGlzRWRnZS5uZXh0RWRnZSgpLnZlcnRleEluZGV4MigpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFwcGVuZEludGVydmFsWChmbG9hdCB4
LCBib29sIGluc2lkZSwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgaWYg
KCFpbnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU2hhcGVJbnRlcnZhbCh4KSk7CisgICAg
ZWxzZQorICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUoKSAtIDFdLngyID0geDsKKworICAgIHJl
dHVybiAhaW5zaWRlOworfQorCitzdGF0aWMgYm9vbCBjb21wYXJlRWRnZUludGVyc2VjdGlvblgo
Y29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMSwgY29uc3QgRWRnZUludGVyc2Vj
dGlvbiYgaW50ZXJzZWN0aW9uMikKK3sKKyAgICBmbG9hdCB4MSA9IGludGVyc2VjdGlvbjEucG9p
bnQueCgpOworICAgIGZsb2F0IHgyID0gaW50ZXJzZWN0aW9uMi5wb2ludC54KCk7CisgICAgcmV0
dXJuICh4MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5cGUgPCBpbnRlcnNlY3Rpb24yLnR5cGUg
OiB4MSA8IHgyOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoY29uc3Qg
RmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPFNoYXBl
SW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2Uq
PiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5LCB5LCBlZGdlcykp
CisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxFZGdlSW50ZXJzZWN0aW9uPiBpbnRlcnNl
Y3Rpb25zOworICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoY29tcHV0
ZVhJbnRlcnNlY3Rpb24oZWRnZXNbaV0sIHksIGludGVyc2VjdGlvbikgJiYgaW50ZXJzZWN0aW9u
LnR5cGUgIT0gVmVydGV4WUJvdGgpCisgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVuZChp
bnRlcnNlY3Rpb24pOworICAgIH0KKworICAgIGlmIChpbnRlcnNlY3Rpb25zLnNpemUoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJlZ2luKCks
IGludGVyc2VjdGlvbnMuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50ZXJzZWN0aW9uWCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgaW50IHdpbmRDb3VudCA9IDA7CisgICAg
Ym9vbCBpbnNpZGUgPSBmYWxzZTsKKworICAgIHdoaWxlIChpbmRleCA8IGludGVyc2VjdGlvbnMu
c2l6ZSgpKSB7CisgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIHRoaXNJbnRlcnNlY3Rp
b24gPSBpbnRlcnNlY3Rpb25zW2luZGV4XTsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVy
c2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBu
ZXh0SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArIDFdOworICAgICAgICAgICAg
aWYgKCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSA9PSBuZXh0SW50ZXJzZWN0aW9uLnBvaW50
LngoKSkgJiYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZIHx8IHRoaXNJbnRl
cnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
SW50ZXJzZWN0aW9uLnR5cGUgPT0gbmV4dEludGVyc2VjdGlvbi50eXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFNraXAgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBhcmUg
VmVydGV4TWF4WSxWZXJ0ZXhNYXhZIGFuZCBWZXJ0ZXhNaW5ZLFZlcnRleE1pblkuCisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5
cGVzIGFyZSBWZXJ0ZXhNaW5ZLFZlcnRleE1heFkgb3IgVmVydGV4TWF4WSxWZXJ0ZXhNaW5ZIHdp
dGggb25lIGludGVyc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICp0
aGlzSW50ZXJzZWN0aW9uLmVkZ2U7CisgICAgICAgIGJvb2wgZXZlbk9kZENyb3NzaW5nID0gIXdp
bmRDb3VudDsKKworICAgICAgICBpZiAocG9seWdvbi5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9E
RCkgeworICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpID4g
dGhpc0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7CisgICAgICAgICAgICBldmVuT2RkQ3Jv
c3NpbmcgPSBldmVuT2RkQ3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChldmVuT2RkQ3Jvc3NpbmcpIHsKKyAgICAgICAgICAgIGJvb2wgZWRnZUNyb3NzaW5n
ID0gdGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbDsKKyAgICAgICAgICAgIGlmICghZWRn
ZUNyb3NzaW5nKSB7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwcmV2VmVydGV4OworICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgdGhpc1ZlcnRleDsKKyAgICAgICAgICAgICAgICBGbG9h
dFBvaW50IG5leHRWZXJ0ZXg7CisKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VmVydGV4SW50ZXJz
ZWN0aW9uVmVydGljZXModGhpc0ludGVyc2VjdGlvbiwgcHJldlZlcnRleCwgdGhpc1ZlcnRleCwg
bmV4dFZlcnRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgueSgpID09
IHkpCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IHBy
ZXZWZXJ0ZXgueSgpID4geSA6IHByZXZWZXJ0ZXgueSgpIDwgeTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocHJldlZlcnRleC55KCkgPT0geSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gbmV4dFZlcnRleC55KCkgPiB5IDogbmV4dFZlcnRl
eC55KCkgPCB5OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBlZGdlQ3Jvc3NpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChlZGdlQ3Jvc3NpbmcpCisgICAgICAgICAgICAgICAgaW5zaWRl
ID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpLCBpbnNpZGUsIHJl
c3VsdCk7CisgICAgICAgIH0KKworICAgICAgICArK2luZGV4OworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhjb25zdCBGbG9hdFBvbHln
b24mIHBvbHlnb24sIGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBy
ZXN1bHQpCit7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAg
ICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5MSwgeTIsIGVkZ2VzKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tpXTsKKyAgICAgICAgZmxvYXQgeDE7CisgICAg
ICAgIGZsb2F0IHgyOworCisgICAgICAgIGlmIChlZGdlLT5taW5ZKCkgPCB5MSkgeworICAgICAg
ICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwgeTEsIGludGVyc2VjdGlvbik7CisgICAg
ICAgICAgICB4MSA9IGludGVyc2VjdGlvbi5wb2ludC54KCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgeDEgPSAoZWRnZS0+dmVydGV4MSgpLnkoKSA8IGVkZ2UtPnZlcnRleDIoKS55KCkp
ID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7CisKKyAgICAgICAg
aWYgKGVkZ2UtPm1heFkoKSA+IHkyKSB7CisgICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlv
bihlZGdlLCB5MiwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgyID0gaW50ZXJzZWN0aW9u
LnBvaW50LngoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MiA9IChlZGdlLT52ZXJ0
ZXgxKCkueSgpID4gZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDog
ZWRnZS0+dmVydGV4MigpLngoKTsKKworICAgICAgICBpZiAoeDEgPiB4MikKKyAgICAgICAgICAg
IHN0ZDo6c3dhcCh4MSwgeDIpOworCisgICAgICAgIGlmICh4MiA+IHgxKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChTaGFwZUludGVydmFsKHgxLCB4MikpOworICAgIH0KKworICAgIHNvcnRT
aGFwZUludGVydmFscyhyZXN1bHQpOworfQorCit2b2lkIFBvbHlnb25TaGFwZTo6Z2V0RXhjbHVk
ZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRQb2x5Z29u
JiBwb2x5Z29uID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKKyAgICBpZiAocG9seWdvbi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBm
bG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgVmVjdG9yPFNoYXBl
SW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVj
dG9yPFNoYXBlSW50ZXJ2YWw+IG1lcmdlZEludGVydmFsczsKKyAgICBtZXJnZVNoYXBlSW50ZXJ2
YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRlcnZhbHMpOworCisgICAg
VmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZU92ZXJsYXBw
aW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisg
ICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGV4Y2x1ZGVkSW50ZXJ2YWxzOworICAgIG1lcmdlU2hh
cGVJbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVy
dmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjbHVkZWRJbnRlcnZhbHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU2hhcGVJbnRlcnZhbCBpbnRlcnZhbCA9IGV4Y2x1ZGVk
SW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFs
LngxLCBpbnRlcnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBQb2x5Z29uU2hhcGU6OmdldElu
Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0UG9s
eWdvbiYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOworICAgIGlmIChwb2x5Z29uLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwor
ICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7CisKKyAgICBWZWN0b3I8
U2hhcGVJbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7CisgICAgY29tcHV0ZVhJ
bnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOworICAgIGNvbXB1
dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHkyWEludGVydmFscyk7CisKKyAg
ICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gY29tbW9uSW50ZXJ2YWxzOworICAgIGludGVyc2VjdFNo
YXBlSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMp
OworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0
ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRlcnZh
bHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGluY2x1ZGVkSW50ZXJ2YWxzOworICAg
IHN1YnRyYWN0U2hhcGVJbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBp
bmNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5jbHVk
ZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU2hhcGVJbnRlcnZhbCBpbnRlcnZh
bCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdt
ZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOworICAgIH0KK30KKworc3RhdGljIGlubGlu
ZSBib29sIGZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24s
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MSwgdW5zaWdu
ZWQgb2Zmc2V0RWRnZUluZGV4MikKK3sKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHJlY3QueSgpLCBy
ZWN0Lm1heFkoKSwgZWRnZXMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGbG9h
dFBvbHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAgIGlmIChlZGdlLT5lZGdlSW5k
ZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJbmRleCgpICE9IG9mZnNldEVk
Z2VJbmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgYWJvdmVPclRvVGhlTGVmdChjb25zdCBGbG9hdFJlY3QmIHIxLCBjb25zdCBGbG9hdFJlY3Qm
IHIyKQoreworICAgIGlmIChyMS55KCkgPCByMi55KCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChyMS55KCkgPT0gcjIueSgpKQorICAgICAgICByZXR1cm4gcjEueCgpIDwgcjIueCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5Z29uU2hhcGU6OmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNv
bnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZh
bFRvcDsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNp
emUuaGVpZ2h0KCk7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRl
cnZhbFNpemUud2lkdGgoKTsKKworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNo
YXBlUGFkZGluZ0JvdW5kcygpOworICAgIGNvbnN0IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHBv
bHlnb24uYm91bmRpbmdCb3goKTsKKyAgICBpZiAobWluSW50ZXJ2YWxXaWR0aCA+IGJvdW5kaW5n
Qm94LndpZHRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IG1pblkgPSBz
dGQ6Om1heChib3VuZGluZ0JveC55KCksIG1pbkludGVydmFsVG9wKTsKKyAgICBmbG9hdCBtYXhZ
ID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0OworCisgICAgaWYgKG1heFkgPiBib3VuZGluZ0Jv
eC5tYXhZKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3Rvcjxjb25zdCBGbG9h
dFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKG1pbklu
dGVydmFsVG9wLCBib3VuZGluZ0JveC5tYXhZKCksIGVkZ2VzKTsKKworICAgIGZsb2F0IGR4ID0g
bWluSW50ZXJ2YWxXaWR0aCAvIDI7CisgICAgZmxvYXQgZHkgPSBtaW5JbnRlcnZhbEhlaWdodCAv
IDI7CisgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRFZGdlczsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKihlZGdlc1tpXSk7CisgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHZlcnRleDAgPSBlZGdlLnByZXZpb3VzRWRnZSgpLnZlcnRleDEoKTsKKyAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOworICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7CisgICAgICAgIFZlY3Rv
cjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZUJ1ZmZlcjsKKworICAgICAgICBpZiAodmVy
dGV4Mi55KCkgPiB2ZXJ0ZXgxLnkoKSA/IHZlcnRleDIueCgpID49IHZlcnRleDEueCgpIDogdmVy
dGV4MS54KCkgPj0gdmVydGV4Mi54KCkpIHsKKyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIu
YXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZShkeCwgLWR5KSkpOworICAg
ICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwg
RmxvYXRTaXplKC1keCwgZHkpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvZmZz
ZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgs
IGR5KSkpOworICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdv
bkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgLWR5KSkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzUmVmbGV4VmVydGV4KHZlcnRleDAsIHZlcnRleDEsIHZlcnRleDIpKSB7CisgICAgICAg
ICAgICBpZiAodmVydGV4Mi54KCkgPD0gdmVydGV4MS54KCkgJiYgdmVydGV4MC54KCkgPD0gdmVy
dGV4MS54KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0
UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKGR4LCAtZHkpLCBGbG9hdFNpemUoZHgsIGR5
KSkpOworICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi54KCkgPj0gdmVydGV4MS54KCkgJiYg
dmVydGV4MC54KCkgPj0gdmVydGV4MS54KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1
ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgLWR5
KSwgRmxvYXRTaXplKC1keCwgZHkpKSk7CisgICAgICAgICAgICBpZiAodmVydGV4Mi55KCkgPD0g
dmVydGV4MS55KCkgJiYgdmVydGV4MC55KCkgPD0gdmVydGV4MS55KCkpCisgICAgICAgICAgICAg
ICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxv
YXRTaXplKC1keCwgZHkpLCBGbG9hdFNpemUoZHgsIGR5KSkpOworICAgICAgICAgICAgZWxzZSBp
ZiAodmVydGV4Mi55KCkgPj0gdmVydGV4MS55KCkgJiYgdmVydGV4MC55KCkgPj0gdmVydGV4MS55
KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdv
bkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgLWR5KSwgRmxvYXRTaXplKGR4LCAtZHkpKSk7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgb2Zmc2V0RWRn
ZUJ1ZmZlci5zaXplKCk7ICsraikKKyAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlQnVmZmVyW2pd
Lm1heFkoKSA+PSBtaW5ZKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VzLmFwcGVuZChvZmZz
ZXRFZGdlQnVmZmVyW2pdKTsKKyAgICB9CisKKyAgICBvZmZzZXRFZGdlcy5hcHBlbmQoT2Zmc2V0
UG9seWdvbkVkZ2UocG9seWdvbiwgbWluSW50ZXJ2YWxUb3AsIEZsb2F0U2l6ZSgwLCBkeSkpKTsK
KworICAgIEZsb2F0UG9pbnQgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb247CisgICAgRmxvYXRSZWN0
IGZpcnN0Rml0UmVjdDsKKyAgICBib29sIGZpcnN0Rml0Rm91bmQgPSBmYWxzZTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBvZmZzZXRFZGdlcy5zaXplKCkgLSAxOyArK2kpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBvZmZzZXRFZGdlcy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgaWYgKG9mZnNldEVkZ2VzW2ldLmludGVyc2VjdGlvbihvZmZzZXRF
ZGdlc1tqXSwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgRmxv
YXRQb2ludCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9u
LngoKSAtIGR4LCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbi55KCkgLSBkeSk7CisgICAgICAgICAg
ICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZpcnN0Rml0UmVjdChwb3RlbnRpYWxGaXJzdEZpdExv
Y2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoKG9m
ZnNldEVkZ2VzW2ldLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6OkxpbmVUb3AKKyAgICAg
ICAgICAgICAgICAgICAgfHwgb2Zmc2V0RWRnZXNbal0uYmFzaXMoKSA9PSBPZmZzZXRQb2x5Z29u
RWRnZTo6TGluZVRvcAorICAgICAgICAgICAgICAgICAgICB8fCBwb3RlbnRpYWxGaXJzdEZpdExv
Y2F0aW9uLnkoKSA+PSBtaW5JbnRlcnZhbFRvcCkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFm
aXJzdEZpdEZvdW5kIHx8IGFib3ZlT3JUb1RoZUxlZnQocG90ZW50aWFsRmlyc3RGaXRSZWN0LCBm
aXJzdEZpdFJlY3QpKQorICAgICAgICAgICAgICAgICAgICAmJiBwb2x5Z29uLmNvbnRhaW5zKG9m
ZnNldEVkZ2VzSW50ZXJzZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAmJiBmaXJzdEZpdFJl
Y3RJblBvbHlnb24ocG9seWdvbiwgcG90ZW50aWFsRmlyc3RGaXRSZWN0LCBvZmZzZXRFZGdlc1tp
XS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0uZWRnZUluZGV4KCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZpcnN0Rml0Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmaXJz
dEZpdFJlY3QgPSBwb3RlbnRpYWxGaXJzdEZpdFJlY3Q7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZpcnN0Rml0Rm91bmQpCisg
ICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQoZmlyc3RGaXRSZWN0LnkoKSk7CisgICAg
cmV0dXJuIGZpcnN0Rml0Rm91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYyOGFjM2FkZDA2NTZkNjczYjEyN2Q2ODg4YmYwZTg2MDJiNjE4MGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5oCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5j
b3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
CisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQb2x5Z29uU2hhcGVfaAorI2RlZmluZSBQb2x5
Z29uU2hhcGVfaAorCisjaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgiCisjaW5jbHVkZSAiU2hhcGUu
aCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgT2Zmc2V0UG9seWdvbkVkZ2UgOiBwdWJsaWMgVmVydGV4UGFpciB7CitwdWJsaWM6Cisg
ICAgZW51bSBCYXNpcyB7CisgICAgICAgIEVkZ2UsCisgICAgICAgIFZlcnRleCwKKyAgICAgICAg
TGluZVRvcAorICAgIH07CisKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHln
b25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKKyAgICAgICAgOiBtX3ZlcnRl
eDEoZWRnZS52ZXJ0ZXgxKCkgKyBvZmZzZXQpCisgICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVy
dGV4MigpICsgb2Zmc2V0KQorICAgICAgICAsIG1fZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkp
CisgICAgICAgICwgbV9iYXNpcyhFZGdlKQorICAgIHsKKyAgICB9CisKKyAgICBPZmZzZXRQb2x5
Z29uRWRnZShjb25zdCBGbG9hdFBvaW50JiByZWZsZXhWZXJ0ZXgsIGNvbnN0IEZsb2F0U2l6ZSYg
b2Zmc2V0MSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQyKQorICAgICAgICA6IG1fdmVydGV4MShy
ZWZsZXhWZXJ0ZXggKyBvZmZzZXQxKQorICAgICAgICAsIG1fdmVydGV4MihyZWZsZXhWZXJ0ZXgg
KyBvZmZzZXQyKQorICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQorICAgICAgICAsIG1fYmFzaXMo
VmVydGV4KQorICAgIHsKKyAgICB9CisKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9h
dFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxv
YXRTaXplJiBvZmZzZXQpCisgICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQocG9seWdvbi5i
b3VuZGluZ0JveCgpLngoKSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAg
ICAgLCBtX3ZlcnRleDIoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkubWF4WCgpLCBt
aW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQorICAgICAgICAsIG1fZWRnZUluZGV4KC0x
KQorICAgICAgICAsIG1fYmFzaXMoTGluZVRvcCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92
ZXJ0ZXgxOyB9CisgICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgyOyB9CisgICAgaW50IGVkZ2VJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9CisgICAgQmFzaXMgYmFzaXMoKSBjb25zdCB7IHJldHVy
biBtX2Jhc2lzOyB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRQb2ludCBtX3ZlcnRleDE7CisgICAg
RmxvYXRQb2ludCBtX3ZlcnRleDI7CisgICAgaW50IG1fZWRnZUluZGV4OworICAgIEJhc2lzIG1f
YmFzaXM7Cit9OworCitjbGFzcyBQb2x5Z29uU2hhcGUgOiBwdWJsaWMgU2hhcGUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBvbHlnb25TaGFwZSk7CitwdWJsaWM6CisgICAgUG9seWdvblNo
YXBlKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZp
bGxSdWxlKQorICAgICAgICA6IFNoYXBlKCkKKyAgICAgICAgLCBtX3BvbHlnb24odmVydGljZXMs
IGZpbGxSdWxlKQorICAgICAgICAsIG1fbWFyZ2luQm91bmRzKG51bGxwdHIpCisgICAgICAgICwg
bV9wYWRkaW5nQm91bmRzKG51bGxwdHIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2luQm91bmRzKCkuYm91bmRp
bmdCb3goKSk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJv
dW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVj
dD4oc2hhcGVQYWRkaW5nQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9seWdvbi5pc0VtcHR5KCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQg
bG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2Fs
VG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBt
aW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3QgT1ZFUlJJREU7CisKK3By
aXZhdGU6CisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0
OworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3Q7CisK
KyAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOworICAgIG11dGFibGUgT3duUHRyPEZsb2F0UG9s
eWdvbj4gbV9tYXJnaW5Cb3VuZHM7CisgICAgbXV0YWJsZSBPd25QdHI8RmxvYXRQb2x5Z29uPiBt
X3BhZGRpbmdCb3VuZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBQb2x5Z29uU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1JlY3RhbmdsZVNoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTI3ZmNmYTcyYWYzYzkzMDA1NWU1OTNi
OWY1NGM3NDdhNDE3MGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisg
KiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVjdGFuZ2xlU2hhcGUuaCIKKworI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlu
bGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5LCBmbG9hdCByeCwgZmxvYXQgcnkp
Cit7CisgICAgQVNTRVJUKHJ5ID4gMCk7CisgICAgcmV0dXJuIHJ4ICogc3FydCgxIC0gKHkgKiB5
KSAvIChyeSAqIHJ5KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZWxsaXBzZVlJbnRlcmNl
cHQoZmxvYXQgeCwgZmxvYXQgcngsIGZsb2F0IHJ5KQoreworICAgIEFTU0VSVChyeCA+IDApOwor
ICAgIHJldHVybiByeSAqIHNxcnQoMSAtICh4ICogeCkgLyAocnggKiByeCkpOworfQorCitGbG9h
dFJvdW5kZWRSZWN0IEZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdCb3VuZHMoZmxvYXQgcGFkZGlu
ZykgY29uc3QKK3sKKyAgICBBU1NFUlQocGFkZGluZyA+PSAwKTsKKyAgICBpZiAoIXBhZGRpbmcg
fHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBmbG9hdCBib3VuZHNY
ID0geCgpICsgc3RkOjptaW4od2lkdGgoKSAvIDIsIHBhZGRpbmcpOworICAgIGZsb2F0IGJvdW5k
c1kgPSB5KCkgKyBzdGQ6Om1pbihoZWlnaHQoKSAvIDIsIHBhZGRpbmcpOworICAgIGZsb2F0IGJv
dW5kc1dpZHRoID0gc3RkOjptYXgoMC4wZiwgd2lkdGgoKSAtIHBhZGRpbmcgKiAyKTsKKyAgICBm
bG9hdCBib3VuZHNIZWlnaHQgPSBzdGQ6Om1heCgwLjBmLCBoZWlnaHQoKSAtIHBhZGRpbmcgKiAy
KTsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gc3RkOjptYXgoMC4wZiwgcngoKSAtIHBhZGRp
bmcpOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1kgPSBzdGQ6Om1heCgwLjBmLCByeSgpIC0gcGFk
ZGluZyk7CisgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxvYXRSZWN0KGJvdW5kc1gsIGJv
dW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9hdFNpemUoYm91bmRzUmFkaXVz
WCwgYm91bmRzUmFkaXVzWSkpOworfQorCitGbG9hdFJvdW5kZWRSZWN0IEZsb2F0Um91bmRlZFJl
Y3Q6Om1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKG1hcmdp
biA+PSAwKTsKKyAgICBpZiAoIW1hcmdpbikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAg
ZmxvYXQgYm91bmRzWCA9IHgoKSAtIG1hcmdpbjsKKyAgICBmbG9hdCBib3VuZHNZID0geSgpIC0g
bWFyZ2luOworICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gd2lkdGgoKSArIG1hcmdpbiAqIDI7Cisg
ICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gaGVpZ2h0KCkgKyBtYXJnaW4gKiAyOworICAgIGZsb2F0
IGJvdW5kc1JhZGl1c1ggPSByeCgpICsgbWFyZ2luOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1kg
PSByeSgpICsgbWFyZ2luOworICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0KEZsb2F0UmVjdChi
b3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwgRmxvYXRTaXplKGJv
dW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKK30KKworRmxvYXRQb2ludCBGbG9hdFJvdW5k
ZWRSZWN0Ojpjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3aWR0aEF0SW50ZXJjZXB0KSBj
b25zdAoreworICAgIGZsb2F0IHhpID0gKHdpZHRoKCkgLSB3aWR0aEF0SW50ZXJjZXB0KSAvIDI7
CisgICAgZmxvYXQgeWkgPSByeSgpIC0gZWxsaXBzZVlJbnRlcmNlcHQocngoKSAtIHhpLCByeCgp
LCByeSgpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludCh4aSwgeWkpOworfQorCitGbG9hdFJvdW5k
ZWRSZWN0IFJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAoreworICAg
IGlmICghbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKSB7CisgICAgICAgIG1faGF2ZUlu
aXRpYWxpemVkUGFkZGluZ0JvdW5kcyA9IHRydWU7CisgICAgICAgIG1fcGFkZGluZ0JvdW5kcyA9
IG1fYm91bmRzLnBhZGRpbmdCb3VuZHMoc2hhcGVQYWRkaW5nKCkpOworICAgIH0KKyAgICByZXR1
cm4gbV9wYWRkaW5nQm91bmRzOworfQorCitGbG9hdFJvdW5kZWRSZWN0IFJlY3RhbmdsZVNoYXBl
OjpzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhdmVJbml0aWFsaXpl
ZE1hcmdpbkJvdW5kcykgeworICAgICAgICBtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcyA9
IHRydWU7CisgICAgICAgIG1fbWFyZ2luQm91bmRzID0gbV9ib3VuZHMubWFyZ2luQm91bmRzKHNo
YXBlTWFyZ2luKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9tYXJnaW5Cb3VuZHM7Cit9CisKK3Zv
aWQgUmVjdGFuZ2xlU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25z
dAoreworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlTWFyZ2luQm91
bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dp
Y2FsSGVpZ2h0OworCisgICAgaWYgKHkyIDwgYm91bmRzLnkoKSB8fCB5MSA+PSBib3VuZHMubWF4
WSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB4MSA9IGJvdW5kcy54KCk7CisgICAg
ZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOworCisgICAgaWYgKGJvdW5kcy5yeSgpID4gMCkgewor
ICAgICAgICBpZiAoeTIgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCkpIHsKKyAgICAgICAgICAg
IGZsb2F0IHlpID0geTIgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgICAgICBm
bG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkp
OworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKKyAgICAg
ICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7CisgICAgICAgIH0g
ZWxzZSBpZiAoeTEgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpIHsKKyAgICAgICAgICAg
IGZsb2F0IHlpID0gIHkxIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7CisgICAgICAg
ICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRz
LnJ5KCkpOworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsK
KyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KHgxLCB4MikpOwor
fQorCit2b2lkIFJlY3RhbmdsZVNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZVBh
ZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOworICAgIGZsb2F0IHkyID0gbG9naWNhbFRv
cCArIGxvZ2ljYWxIZWlnaHQ7CisKKyAgICBpZiAoeTEgPCBib3VuZHMueSgpIHx8IHkyID4gYm91
bmRzLm1heFkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeDEgPSBib3VuZHMueCgp
OworICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKKworICAgIGlmIChib3VuZHMucnkoKSA+
IDApIHsKKyAgICAgICAgYm9vbCB5MUludGVyY2VwdHNDb3JuZXIgPSB5MSA8IGJvdW5kcy55KCkg
KyBib3VuZHMucnkoKTsKKyAgICAgICAgYm9vbCB5MkludGVyY2VwdHNDb3JuZXIgPSB5MiA+IGJv
dW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKKyAgICAgICAgZmxvYXQgeGkgPSAwOworCisgICAg
ICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgJiYgeTJJbnRlcmNlcHRzQ29ybmVyKSB7CisgICAg
ICAgICAgICBpZiAgKHkxIDwgYm91bmRzLmhlaWdodCgpICsgMiAqIGJvdW5kcy55KCkgLSB5Mikg
eworICAgICAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5
KCk7CisgICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4
KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKKyAgICAgICAg
ICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5
KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHkxSW50ZXJjZXB0c0Nvcm5l
cikgeworICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJvdW5kcy55KCkgLSBib3VuZHMucnko
KTsKKyAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBi
b3VuZHMucnkoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoeTJJbnRlcmNlcHRzQ29ybmVyKSB7Cisg
ICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkp
OworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJv
dW5kcy5yeSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIg
fHwgeTJJbnRlcmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBi
b3VuZHMucngoKSAtIHhpOworICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRz
LnJ4KCkgKyB4aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoTGluZVNl
Z21lbnQoeDEsIHgyKSk7Cit9CisKK2Jvb2wgUmVjdGFuZ2xlU2hhcGU6OmZpcnN0SW5jbHVkZWRJ
bnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0
IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkg
Y29uc3QKK3sKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRv
cDsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUu
aGVpZ2h0KCk7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZh
bFNpemUud2lkdGgoKTsKKworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNo
YXBlUGFkZGluZ0JvdW5kcygpOworICAgIGlmIChib3VuZHMuaXNFbXB0eSgpIHx8IG1pbkludGVy
dmFsV2lkdGggPiBib3VuZHMud2lkdGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kcy55KCksIG1pbkludGVydmFsVG9wKTsKKyAgICBm
bG9hdCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0OworCisgICAgaWYgKG1heFkgPiBi
b3VuZHMubWF4WSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGludGVydmFs
T3ZlcmxhcHNNaW5Db3JuZXIgPSBtaW5ZIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpOworICAg
IGJvb2wgaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciA9IG1heFkgPiBib3VuZHMubWF4WSgpIC0g
Ym91bmRzLnJ5KCk7CisKKyAgICBpZiAoIWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgIWlu
dGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIpIHsKKyAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkg
KyBib3VuZHMuaGVpZ2h0KCkgLyAyOworICAgIGJvb2wgbWluQ29ybmVyRGVmaW5lc1ggPSBmYWJz
KGNlbnRlclkgLSBtaW5ZKSA+IGZhYnMoY2VudGVyWSAtIG1heFkpOworICAgIGJvb2wgaW50ZXJ2
YWxGaXRzV2l0aGluQ29ybmVycyA9IG1pbkludGVydmFsV2lkdGggKyAyICogYm91bmRzLnJ4KCkg
PD0gYm91bmRzLndpZHRoKCk7CisgICAgRmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHQgPSBib3Vu
ZHMuY29ybmVySW50ZXJjZXB0Rm9yV2lkdGgobWluSW50ZXJ2YWxXaWR0aCk7CisKKyAgICBpZiAo
aW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciAmJiAoIWludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIg
fHwgbWluQ29ybmVyRGVmaW5lc1gpKSB7CisgICAgICAgIGlmIChpbnRlcnZhbEZpdHNXaXRoaW5D
b3JuZXJzIHx8IGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpIDwgbWluWSkgeworICAg
ICAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChtaW5JbnRlcnZhbEhlaWdodCA8IGJvdW5kcy5oZWlnaHQoKSAtICgy
ICogY29ybmVySW50ZXJjZXB0LnkoKSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNlaWxlZExh
eW91dFVuaXQoYm91bmRzLnkoKSArIGNvcm5lckludGVyY2VwdC55KCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW50ZXJ2YWxPdmVybGFw
c01heENvcm5lciAmJiAoIWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgfHwgIW1pbkNvcm5lckRl
ZmluZXNYKSkgeworICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyB8fCBtaW5Z
IDw9ICBib3VuZHMubWF4WSgpIC0gY29ybmVySW50ZXJjZXB0LnkoKSAtIG1pbkludGVydmFsSGVp
Z2h0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtaW5ZOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvUmVjdGFuZ2xlU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmVj
dGFuZ2xlU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWVjZjA1MDRiYjk5M2M5MTEwMzkwNjM0OTM0NWVl
NDI5NDQ2ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9SZWN0YW5nbGVTaGFwZS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK
KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJl
Y3RhbmdsZVNoYXBlX2gKKyNkZWZpbmUgUmVjdGFuZ2xlU2hhcGVfaAorCisjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5o
IgorI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRS
b3VuZGVkUmVjdCA6IHB1YmxpYyBGbG9hdFJlY3QgeworcHVibGljOgorICAgIEZsb2F0Um91bmRl
ZFJlY3QoKSB7IH0KKyAgICBGbG9hdFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRz
LCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQorICAgICAgICA6IEZsb2F0UmVjdChib3VuZHMpCisg
ICAgICAgICwgbV9yYWRpaShyYWRpaSkKKyAgICB7CisgICAgfQorCisgICAgZmxvYXQgcngoKSBj
b25zdCB7IHJldHVybiBtX3JhZGlpLndpZHRoKCk7IH0KKyAgICBmbG9hdCByeSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmFkaWkuaGVpZ2h0KCk7IH0KKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1hcmdpbkJv
dW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0OworICAgIEZsb2F0Um91bmRlZFJlY3QgcGFkZGluZ0Jv
dW5kcyhmbG9hdCBwYWRkaW5nKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IGNvcm5lckludGVyY2Vw
dEZvcldpZHRoKGZsb2F0IHdpZHRoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBGbG9hdFNpemUg
bV9yYWRpaTsKK307CisKK2NsYXNzIFJlY3RhbmdsZVNoYXBlIDogcHVibGljIFNoYXBlIHsKK3B1
YmxpYzoKKyAgICBSZWN0YW5nbGVTaGFwZShjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3Qg
RmxvYXRTaXplJiByYWRpaSkKKyAgICAgICAgOiBTaGFwZSgpCisgICAgICAgICwgbV9ib3VuZHMo
Ym91bmRzLCByYWRpaSkKKyAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcyhm
YWxzZSkKKyAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxC
b3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJl
Y3Q+KHNoYXBlTWFyZ2luQm91bmRzKCkpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBl
UGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpKTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ib3VuZHMuaXNFbXB0eSgp
OyB9CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9n
aWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNh
bFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYg
bWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9WRVJSSURFOworCitw
cml2YXRlOgorICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdDsK
KyAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0OworCisgICAg
RmxvYXRSb3VuZGVkUmVjdCBtX2JvdW5kczsKKyAgICBtdXRhYmxlIEZsb2F0Um91bmRlZFJlY3Qg
bV9tYXJnaW5Cb3VuZHM7CisgICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRSZWN0IG1fcGFkZGluZ0Jv
dW5kczsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMgOiAx
OworICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgOiAxOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVjdGFuZ2xlU2hhcGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
NzkyMGNjOWU0ODgxMzY4OTE3NDg1Y2IwMzM3OGU5ZjQwMDAyZjNiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTAsMCArMSwx
OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENP
UFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwK
KyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK
KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKwor
I2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIK
KyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIK
KyNpbmNsdWRlICJSZWN0YW5nbGVTaGFwZS5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgiCisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFz
c093blB0cjxTaGFwZT4gY3JlYXRlUmVjdGFuZ2xlU2hhcGUoY29uc3QgRmxvYXRSZWN0JiBib3Vu
ZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCit7CisgICAgQVNTRVJUKGJvdW5kcy53aWR0aCgp
ID49IDAgJiYgYm91bmRzLmhlaWdodCgpID49IDAgJiYgcmFkaWkud2lkdGgoKSA+PSAwICYmIHJh
ZGlpLmhlaWdodCgpID49IDApOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUmVjdGFuZ2xlU2hh
cGUoYm91bmRzLCByYWRpaSkpOworfQorCitzdGF0aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRl
U2hhcGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMpCit7Cisg
ICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlY3Rhbmds
ZVNoYXBlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaXVzLCBjZW50ZXIueSgpIC0gcmFkaXVz
LCByYWRpdXMqMiwgcmFkaXVzKjIpLCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKSk7Cit9CisK
K3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVTaGFwZUVsbGlwc2UoY29uc3QgRmxvYXRQ
b2ludCYgY2VudGVyLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQoreworICAgIEFTU0VSVChyYWRp
aS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBSZWN0YW5nbGVTaGFwZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRo
KCksIGNlbnRlci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5o
ZWlnaHQoKSoyKSwgcmFkaWkpKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0
ZVBvbHlnb25TaGFwZShQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBX
aW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBvbHlnb25TaGFw
ZSh2ZXJ0aWNlcywgZmlsbFJ1bGUpKTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFJlY3QgcGh5
c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbG9naWNhbEJv
eEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgaWYg
KGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdChyZWN0LnkoKSwgbG9naWNhbEJveEhlaWdodCAtIHJlY3QubWF4WCgpLCByZWN0
LmhlaWdodCgpLCByZWN0LndpZHRoKCkpOworICAgIHJldHVybiByZWN0LnRyYW5zcG9zZWRSZWN0
KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBwaHlzaWNhbFBvaW50VG9Mb2dpY2Fs
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBsb2dpY2FsQm94SGVpZ2h0LCBXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpKQorICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgaWYgKGlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9p
bnQueSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0gcG9pbnQueCgpKTsKKyAgICByZXR1cm4gcG9pbnQu
dHJhbnNwb3NlZFBvaW50KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBoeXNpY2Fs
U2l6ZVRvTG9naWNhbChjb25zdCBGbG9hdFNpemUmIHNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisg
ICAgICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBzaXplLnRyYW5zcG9zZWRTaXplKCk7Cit9
CisKK1Bhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBCYXNpY1NoYXBl
KiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94U2l6ZSwgV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKQoreworICAgIEFT
U0VSVChiYXNpY1NoYXBlKTsKKworICAgIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOworICAgIGZsb2F0IGJveFdpZHRoID0g
aG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUud2lkdGgoKSA6IGxvZ2ljYWxC
b3hTaXplLmhlaWdodCgpOworICAgIGZsb2F0IGJveEhlaWdodCA9IGhvcml6b250YWxXcml0aW5n
TW9kZSA/IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpIDogbG9naWNhbEJveFNpemUud2lkdGgoKTsK
KyAgICBPd25QdHI8U2hhcGU+IHNoYXBlOworCisgICAgc3dpdGNoIChiYXNpY1NoYXBlLT50eXBl
KCkpIHsKKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVJlY3RhbmdsZVR5cGU6IHsK
KyAgICAgICAgY29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdGFuZ2xlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSo+KGJhc2ljU2hhcGUpOworICAgICAgICBGbG9h
dFJlY3QgYm91bmRzKAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUt
PngoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5n
bGUtPnkoKSwgYm94SGVpZ2h0KSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVj
dGFuZ2xlLT53aWR0aCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVu
Z3RoKHJlY3RhbmdsZS0+aGVpZ2h0KCksIGJveEhlaWdodCkpOworICAgICAgICBMZW5ndGggcmFk
aXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgpOworICAgICAgICBMZW5ndGgg
cmFkaXVzWUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWSgpOworICAgICAgICBGbG9h
dFNpemUgY29ybmVyUmFkaWkoCisgICAgICAgICAgICByYWRpdXNYTGVuZ3RoLmlzVW5kZWZpbmVk
KCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNYTGVuZ3RoLCBib3hXaWR0aCksCisg
ICAgICAgICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZv
ckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQpKTsKKyAgICAgICAgRmxvYXRSZWN0IGxv
Z2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91bmRzLCBsb2dpY2FsQm94U2l6
ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNoYXBlID0gY3JlYXRlUmVjdGFu
Z2xlU2hhcGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvcm5lclJhZGlp
LCB3cml0aW5nTW9kZSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJhc2lj
U2hhcGU6OkJhc2ljU2hhcGVDaXJjbGVUeXBlOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVD
aXJjbGUqIGNpcmNsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVDaXJjbGUqPihiYXNp
Y1NoYXBlKTsKKyAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2ly
Y2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7CisgICAgICAgIGZs
b2F0IHJhZGl1cyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5yYWRpdXMoKSwgc3RkOjpt
aW4oYm94SGVpZ2h0LCBib3hXaWR0aCkpOworICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50
ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSks
IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7CisKKyAgICAgICAgc2hhcGUg
PSBjcmVhdGVTaGFwZUNpcmNsZShsb2dpY2FsQ2VudGVyLCByYWRpdXMpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVFbGxpcHNlVHlwZTog
eworICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZSA9IHN0YXRpY19jYXN0
PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4oYmFzaWNTaGFwZSk7CisgICAgICAgIGZsb2F0IGNl
bnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRlclgoKSwgYm94V2lkdGgp
OworICAgICAgICBmbG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5j
ZW50ZXJZKCksIGJveEhlaWdodCk7CisgICAgICAgIGZsb2F0IHJhZGl1c1ggPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1goKSwgYm94V2lkdGgpOworICAgICAgICBmbG9hdCBy
YWRpdXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNZKCksIGJveEhlaWdo
dCk7CisgICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRlciA9IHBoeXNpY2FsUG9pbnRUb0xv
Z2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgbG9naWNhbEJveFNpemUuaGVpZ2h0
KCksIHdyaXRpbmdNb2RlKTsKKyAgICAgICAgRmxvYXRTaXplIGxvZ2ljYWxSYWRpaSA9IHBoeXNp
Y2FsU2l6ZVRvTG9naWNhbChGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVzWSksIHdyaXRpbmdNb2Rl
KTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVNoYXBlRWxsaXBzZShsb2dpY2FsQ2VudGVyLCBs
b2dpY2FsUmFkaWkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJhc2ljU2hh
cGU6OkJhc2ljU2hhcGVQb2x5Z29uVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlUG9s
eWdvbiogcG9seWdvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKj4oYmFz
aWNTaGFwZSk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxMZW5ndGg+JiB2YWx1ZXMgPSBwb2x5Z29u
LT52YWx1ZXMoKTsKKyAgICAgICAgc2l6ZV90IHZhbHVlc1NpemUgPSB2YWx1ZXMuc2l6ZSgpOwor
ICAgICAgICBBU1NFUlQoISh2YWx1ZXNTaXplICUgMikpOworICAgICAgICBPd25QdHI8VmVjdG9y
PEZsb2F0UG9pbnQ+ID4gdmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+
KHZhbHVlc1NpemUgLyAyKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXNTaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgdmVydGV4KAorICAgICAg
ICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkpLCBib3hXaWR0aCksCisg
ICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSArIDEpLCBib3hI
ZWlnaHQpKTsKKyAgICAgICAgICAgICgqdmVydGljZXMpW2kgLyAyXSA9IHBoeXNpY2FsUG9pbnRU
b0xvZ2ljYWwodmVydGV4LCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwor
ICAgICAgICB9CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVQb2x5Z29uU2hhcGUodmVydGljZXMu
cmVsZWFzZSgpLCBwb2x5Z29uLT53aW5kUnVsZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOiB7Cisg
ICAgICAgIGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSogcmVjdGFuZ2xlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7CisgICAg
ICAgIGZsb2F0IGxlZnQgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+bGVmdCgpLCBi
b3hXaWR0aCk7CisgICAgICAgIGZsb2F0IHRvcCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFu
Z2xlLT50b3AoKSwgYm94SGVpZ2h0KTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcygKKyAgICAg
ICAgICAgIGxlZnQsCisgICAgICAgICAgICB0b3AsCisgICAgICAgICAgICBib3hXaWR0aCAtIGxl
ZnQgLSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+cmlnaHQoKSwgYm94V2lkdGgpLAor
ICAgICAgICAgICAgYm94SGVpZ2h0IC0gdG9wIC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5n
bGUtPmJvdHRvbSgpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgTGVuZ3RoIHJhZGl1c1hMZW5ndGgg
PSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKKyAgICAgICAgTGVuZ3RoIHJhZGl1c1lMZW5n
dGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKKyAgICAgICAgRmxvYXRTaXplIGNvcm5l
clJhZGlpKAorICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZs
b2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAorICAgICAgICAgICAg
cmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFk
aXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7CisgICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsQm91bmRz
ID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVpZ2h0KCks
IHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVJlY3RhbmdsZVNoYXBlKGxv
Z2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3JpdGluZ01v
ZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc2hhcGUtPm1fd3JpdGluZ01vZGUgPSB3
cml0aW5nTW9kZTsKKyAgICBzaGFwZS0+bV9tYXJnaW4gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1h
cmdpbiwgMCk7CisgICAgc2hhcGUtPm1fcGFkZGluZyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocGFk
ZGluZywgMCk7CisKKyAgICByZXR1cm4gc2hhcGUucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGQ5ZWNmZDcyMGJkMGRkNTM4MDQxMzE4Yzk4MjViZjMzNzExZTU4NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaApAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZV9oCisjZGVmaW5lIFNoYXBlX2gKKworI2lu
Y2x1ZGUgIkJhc2ljU2hhcGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUg
IldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IExpbmVTZWdtZW50
IHsKKyAgICBMaW5lU2VnbWVudChmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0
KQorICAgICAgICA6IGxvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQorICAgICAgICAsIGxvZ2ljYWxS
aWdodChsb2dpY2FsUmlnaHQpCisgICAgeworICAgIH0KKworICAgIExheW91dFVuaXQgbG9naWNh
bExlZnQ7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQ7Cit9OworCit0eXBlZGVmIFZlY3Rv
cjxMaW5lU2VnbWVudD4gU2VnbWVudExpc3Q7CisKKworLy8gQSByZXByZXNlbnRhdGlvbiBvZiBh
IEJhc2ljU2hhcGUgdGhhdCBlbmFibGVzIGxheW91dCBjb2RlIHRvIGRldGVybWluZSBob3cgdG8g
YnJlYWsgYSBsaW5lIHVwIGludG8gc2VnbWVudHMKKy8vIHRoYXQgd2lsbCBmaXQgd2l0aGluIG9y
IGFyb3VuZCBhIHNoYXBlLiBUaGUgbGluZSBpcyBkZWZpbmVkIGJ5IGEgcGFpciBvZiBsb2dpY2Fs
IFkgY29vcmRpbmF0ZXMgYW5kIHRoZQorLy8gY29tcHV0ZWQgc2VnbWVudHMgYXJlIHJldHVybmVk
IGFzIHBhaXJzIG9mIGxvZ2ljYWwgWCBjb29yZGluYXRlcy4gVGhlIEJhc2ljU2hhcGUgaXRzZWxm
IGlzIGRlZmluZWQgaW4KKy8vIHBoeXNpY2FsIGNvb3JkaW5hdGVzLgorCitjbGFzcyBTaGFwZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0ZVNoYXBlKGNvbnN0
IEJhc2ljU2hhcGUqLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94U2l6ZSwgV3JpdGluZ01v
ZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKTsKKworICAgIHZpcnR1YWwgflNoYXBl
KCkgeyB9CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRp
bmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xv
Z2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0Jikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxU
b3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1p
bkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgZmxvYXQgc2hhcGVNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcmdp
bjsgfQorICAgIGZsb2F0IHNoYXBlUGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcGFkZGluZzsg
fQorCitwcml2YXRlOgorICAgIFdyaXRpbmdNb2RlIG1fd3JpdGluZ01vZGU7CisgICAgZmxvYXQg
bV9tYXJnaW47CisgICAgZmxvYXQgbV9wYWRkaW5nOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZUluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMTU1ODMyMWNjZjhmZTBjMjgwMjdhNDVm
YzdiMjM2YTU3NTdmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlSW5mby5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcGVJbmZvLmgi
CisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7Cit0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6
OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5
b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KK2NvbnN0IFNoYXBlKiBT
aGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVydmFsR2V0dGVyPjo6Y29tcHV0
ZWRTaGFwZSgpIGNvbnN0Cit7CisgICAgaWYgKFNoYXBlKiBzaGFwZSA9IG1fc2hhcGUuZ2V0KCkp
CisgICAgICAgIHJldHVybiBzaGFwZTsKKworICAgIFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSAo
bV9yZW5kZXJlci0+c3R5bGUoKS0+KnNoYXBlR2V0dGVyKSgpOworICAgIEJhc2ljU2hhcGUqIHNo
YXBlID0gKHNoYXBlVmFsdWUgJiYgc2hhcGVWYWx1ZS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlNo
YXBlKSA/IHNoYXBlVmFsdWUtPnNoYXBlKCkgOiAwOworCisgICAgQVNTRVJUKHNoYXBlKTsKKwor
ICAgIG1fc2hhcGUgPSBTaGFwZTo6Y3JlYXRlU2hhcGUoc2hhcGUsIExheW91dFNpemUobV9zaGFw
ZUxvZ2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWlnaHQpLCBtX3JlbmRlcmVyLT5zdHlsZSgp
LT53cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZU1hcmdpbigpLCBtX3Jl
bmRlcmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7CisgICAgQVNTRVJUKG1fc2hhcGUpOwor
ICAgIHJldHVybiBtX3NoYXBlLmdldCgpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBl
LCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAo
U2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExp
c3QmKSBjb25zdD4KK2Jvb2wgU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRl
cnZhbEdldHRlcj46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBM
YXlvdXRVbml0IGxpbmVIZWlnaHQpCit7CisgICAgQVNTRVJUKGxpbmVIZWlnaHQgPj0gMCk7Cisg
ICAgbV9zaGFwZUxpbmVUb3AgPSBsaW5lVG9wIC0gbG9naWNhbFRvcE9mZnNldCgpOworICAgIG1f
bGluZUhlaWdodCA9IGxpbmVIZWlnaHQ7CisgICAgbV9zZWdtZW50cy5jbGVhcigpOworCisgICAg
aWYgKGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkpCisgICAgICAgIChjb21wdXRlZFNoYXBlKCkt
PippbnRlcnZhbEdldHRlcikobV9zaGFwZUxpbmVUb3AsIHN0ZDo6bWluKG1fbGluZUhlaWdodCwg
c2hhcGVMb2dpY2FsQm90dG9tKCkgLSBsaW5lVG9wKSwgbV9zZWdtZW50cyk7CisKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gdGhpcy0+bG9naWNhbExlZnRPZmZzZXQoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2VnbWVudHMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsTGVmdCArPSBsb2dpY2FsTGVmdE9mZnNldDsKKyAgICAg
ICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsUmlnaHQgKz0gbG9naWNhbExlZnRPZmZzZXQ7CisgICAg
fQorCisgICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOworfQorCit0ZW1wbGF0ZSBjbGFzcyBT
aGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwg
JlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz47Cit0ZW1wbGF0ZSBjbGFzcyBTaGFwZUluZm88
UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlNoYXBlOjpnZXRFeGNsdWRl
ZEludGVydmFscz47Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlMTNkMzJhNWQ2MDk1ZjVkMmYwOThlOGZiMDkwYTYx
MmM1NGUzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW5mby5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworKiAgICBk
aXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCisqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyogVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GCisqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorKiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgU2hhcGVJbmZvX2gK
KyNkZWZpbmUgU2hhcGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBjbGFzcyBJbmZvVHlwZT4K
K2NsYXNzIE1hcHBlZEluZm8geworcHVibGljOgorICAgIHN0YXRpYyBJbmZvVHlwZSogZW5zdXJl
SW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpCisgICAgeworICAgICAgICBJbmZvTWFwJiBpbmZvTWFw
ID0gTWFwcGVkSW5mbzxLZXlUeXBlLCBJbmZvVHlwZT46OmluZm9NYXAoKTsKKyAgICAgICAgaWYg
KEluZm9UeXBlKiBpbmZvID0gaW5mb01hcC5nZXQoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiBp
bmZvOworICAgICAgICB0eXBlbmFtZSBJbmZvTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gaW5mb01h
cC5hZGQoa2V5LCBJbmZvVHlwZTo6Y3JlYXRlSW5mbyhrZXkpKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHJlbW92
ZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IGluZm9NYXAoKS5yZW1vdmUoa2V5KTsgfQorICAg
IHN0YXRpYyBJbmZvVHlwZSogaW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsgcmV0dXJuIGluZm9N
YXAoKS5nZXQoa2V5KTsgfQorcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgS2V5
VHlwZSosIE93blB0cjxJbmZvVHlwZT4gPiBJbmZvTWFwOworICAgIHN0YXRpYyBJbmZvTWFwJiBp
bmZvTWFwKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW5mb01hcCwgc3Rh
dGljSW5mb01hcCwgKCkpOworICAgICAgICByZXR1cm4gc3RhdGljSW5mb01hcDsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6
OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5
b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KK2NsYXNzIFNoYXBlSW5m
byB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
U2hhcGVJbmZvKCkgeyB9CisKKyAgICB2b2lkIHNldFNoYXBlU2l6ZShMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKG1f
cmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKSB7CisgICAgICAg
ICAgICBsb2dpY2FsV2lkdGggLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxX
aWR0aCgpOworICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJB
bmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fc2hh
cGVMb2dpY2FsV2lkdGggPT0gbG9naWNhbFdpZHRoICYmIG1fc2hhcGVMb2dpY2FsSGVpZ2h0ID09
IGxvZ2ljYWxIZWlnaHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRpcnR5U2hhcGVT
aXplKCk7CisgICAgICAgIG1fc2hhcGVMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGg7CisgICAg
ICAgIG1fc2hhcGVMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodDsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUhlaWdodCk7CisgICAgdm9pZCBjbGVhclNlZ21lbnRzKCkgeyBtX3NlZ21l
bnRzLmNsZWFyKCk7IH0KKworICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsVG9wKCkgY29uc3Qg
eyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLnkoKSArIGxvZ2ljYWxU
b3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsQm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFkoKSArIGxvZ2lj
YWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsTGVmdCgpIGNvbnN0
IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS54KCkgKyBsb2dpY2Fs
TGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxSaWdodCgpIGNvbnN0
IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhYKCkgKyBsb2dp
Y2FsTGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS53aWR0aCgpOyB9
CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBjb21w
dXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0KKworICAgIExheW91dFVu
aXQgbG9naWNhbExpbmVUb3AoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlTGluZVRvcCArIGxvZ2lj
YWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExpbmVCb3R0b20oKSBjb25z
dCB7IHJldHVybiBtX3NoYXBlTGluZVRvcCArIG1fbGluZUhlaWdodCArIGxvZ2ljYWxUb3BPZmZz
ZXQoKTsgfQorCisgICAgTGF5b3V0VW5pdCBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5U
X0JPWCkgPyAobV9zaGFwZUxvZ2ljYWxIZWlnaHQgKyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRk
aW5nTG9naWNhbEhlaWdodCgpKSA6IG1fc2hhcGVMb2dpY2FsSGVpZ2h0OyB9CisKKyAgICBib29s
IGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExpbmVUb3Ao
KSA8IHNoYXBlTG9naWNhbEJvdHRvbSgpICYmIHNoYXBlTG9naWNhbFRvcCgpIDw9IGxvZ2ljYWxM
aW5lQm90dG9tKCk7IH0KKyAgICBib29sIGxpbmVXaXRoaW5TaGFwZUJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgJiYgKGxvZ2ljYWxMaW5lQm90dG9tKCkg
PD0gc2hhcGVMb2dpY2FsQm90dG9tKCkpOyB9CisKKyAgICB2b2lkIGRpcnR5U2hhcGVTaXplKCkg
eyBtX3NoYXBlLmNsZWFyKCk7IH0KKyAgICBib29sIHNoYXBlU2l6ZURpcnR5KCkgeyByZXR1cm4g
IW1fc2hhcGUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZW5kZXJUeXBlKiBvd25lcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVuZGVyZXI7IH0KKworcHJvdGVjdGVkOgorICAgIFNoYXBlSW5mbyhjb25zdCBS
ZW5kZXJUeXBlKiByZW5kZXJlcik6IG1fcmVuZGVyZXIocmVuZGVyZXIpIHsgfQorCisgICAgY29u
c3QgU2hhcGUqIGNvbXB1dGVkU2hhcGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qg
Y29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKworICAgIExheW91
dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXItPnN0eWxl
KCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFk
ZGluZ0JlZm9yZSgpIDogTGF5b3V0VW5pdCgpOyB9OworICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5n
KCkgPT0gQ09OVEVOVF9CT1ggJiYgIW1fcmVuZGVyZXItPmlzUmVuZGVyUmVnaW9uKCkpID8gbV9y
ZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1N0YXJ0KCkgOiBMYXlvdXRVbml0KCk7IH0KKworICAg
IExheW91dFVuaXQgbV9zaGFwZUxpbmVUb3A7CisgICAgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7
CisgICAgU2VnbWVudExpc3QgbV9zZWdtZW50czsKKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIE93
blB0cjxTaGFwZT4gbV9zaGFwZTsKKworICAgIExheW91dFVuaXQgbV9zaGFwZUxvZ2ljYWxXaWR0
aDsKKyAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2FsSGVpZ2h0OworICAgIGNvbnN0IFJlbmRl
clR5cGUqIG1fcmVuZGVyZXI7Cit9OworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMTI5NWQwM2VkYjI3M2ZhZTdiYWJlY2QxYzRiYWUwOWVhYWNlMGRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3Bw
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUluZm8uaCIKKworI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xpbmVTZWdtZW50UmFuZ2U6
OkxpbmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBJbmxp
bmVJdGVyYXRvciYgZW5kKQorICAgIDogc3RhcnQoc3RhcnQucm9vdCgpLCBzdGFydC5vYmplY3Qo
KSwgc3RhcnQub2Zmc2V0KCkpCisgICAgLCBlbmQoZW5kLnJvb3QoKSwgZW5kLm9iamVjdCgpLCBl
bmQub2Zmc2V0KCkpCisgICAgeworICAgIH0KKworYm9vbCBTaGFwZUluc2lkZUluZm86OmlzRW5h
YmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCit7CisgICAgU2hhcGVWYWx1ZSog
c2hhcGVWYWx1ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5yZXNvbHZlZFNoYXBlSW5zaWRlKCk7Cisg
ICAgaWYgKCFzaGFwZVZhbHVlIHx8IHNoYXBlVmFsdWUtPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpT
aGFwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQmFzaWNTaGFwZSogc2hhcGUgPSBz
aGFwZVZhbHVlLT5zaGFwZSgpOworICAgIHJldHVybiBzaGFwZSAmJiBzaGFwZS0+dHlwZSgpICE9
IEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZVR5cGU7Cit9CisKK2Jvb2wgU2hh
cGVJbnNpZGVJbmZvOjphZGp1c3RMb2dpY2FsTGluZVRvcChmbG9hdCBtaW5TZWdtZW50V2lkdGgp
Cit7CisgICAgY29uc3QgU2hhcGUqIHNoYXBlID0gY29tcHV0ZWRTaGFwZSgpOworICAgIGlmICgh
c2hhcGUgfHwgbV9saW5lSGVpZ2h0IDw9IDAgfHwgbG9naWNhbExpbmVUb3AoKSA+IHNoYXBlTG9n
aWNhbEJvdHRvbSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMYXlvdXRVbml0IG5l
d0xpbmVUb3A7CisgICAgaWYgKHNoYXBlLT5maXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9w
KG1fc2hhcGVMaW5lVG9wLCBMYXlvdXRTaXplKG1pblNlZ21lbnRXaWR0aCwgbV9saW5lSGVpZ2h0
KSwgbmV3TGluZVRvcCkpIHsKKyAgICAgICAgaWYgKG5ld0xpbmVUb3AgPiBtX3NoYXBlTGluZVRv
cCkgeworICAgICAgICAgICAgbV9zaGFwZUxpbmVUb3AgPSBuZXdMaW5lVG9wOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluc2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnNpZGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzAwNmIzNjQ1NGI5ZGFiMWMyMDI2NTc3MDVlZDQ5
NzE4OWJjN2U3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbnNpZGVJbmZvLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZUluc2lkZUluZm9faAorI2RlZmluZSBTaGFwZUlu
c2lkZUluZm9faAorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJTaGFwZUlu
Zm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmxpbmVJdGVyYXRvcjsKK2NsYXNz
IFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyT2JqZWN0OworCitzdHJ1Y3QgTGluZVNlZ21lbnRJ
dGVyYXRvciB7CisgICAgUmVuZGVyT2JqZWN0KiByb290OworICAgIFJlbmRlck9iamVjdCogb2Jq
ZWN0OworICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBMaW5lU2VnbWVudEl0ZXJhdG9yKFJlbmRl
ck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCkKKyAg
ICAgICAgOiByb290KHJvb3QpCisgICAgICAgICwgb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBv
ZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9Cit9OworCitzdHJ1Y3QgTGluZVNlZ21lbnRSYW5n
ZSB7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvciBzdGFydDsKKyAgICBMaW5lU2VnbWVudEl0ZXJh
dG9yIGVuZDsKKyAgICBMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFy
dCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Cit9OworCit0eXBlZGVmIFZlY3RvcjxMaW5l
U2VnbWVudFJhbmdlPiBTZWdtZW50UmFuZ2VMaXN0OworCitjbGFzcyBTaGFwZUluc2lkZUluZm8g
OiBwdWJsaWMgU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hh
cGVJbnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxTaGFwZUluc2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVy
QmxvY2sqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgU2hhcGVJbnNpZGVJbmZvKHJl
bmRlcmVyKSk7IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIpOworCisgICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0Zvckxp
bmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFCisg
ICAgeworICAgICAgICBtX3NlZ21lbnRSYW5nZXMuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIFNo
YXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAm
U2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsaW5l
VG9wLCBsaW5lSGVpZ2h0KTsKKyAgICB9CisKKyAgICBib29sIGhhc1NlZ21lbnRzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYmIG1fc2Vn
bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1NlZ21lbnRzKCkpOworICAgICAgICByZXR1
cm4gbV9zZWdtZW50czsKKyAgICB9CisgICAgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdl
cygpIHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQorICAgIGNvbnN0IFNlZ21lbnRSYW5nZUxp
c3QmIHNlZ21lbnRSYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7IH0KKyAg
ICBjb25zdCBMaW5lU2VnbWVudCogY3VycmVudFNlZ21lbnQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFoYXNTZWdtZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFT
U0VSVChtX3NlZ21lbnRSYW5nZXMuc2l6ZSgpIDwgbV9zZWdtZW50cy5zaXplKCkpOworICAgICAg
ICByZXR1cm4gJm1fc2VnbWVudHNbbV9zZWdtZW50UmFuZ2VzLnNpemUoKV07CisgICAgfQorICAg
IGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVudFdpZHRoKTsKKworICAg
IHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCB2YWx1ZSkgeyBtX25lZWRzTGF5b3V0ID0gdmFsdWU7
IH0KKyAgICBib29sIG5lZWRzTGF5b3V0KCkgeyByZXR1cm4gbV9uZWVkc0xheW91dDsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91
bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCktPnNoYXBl
UGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpOyB9CisKK3ByaXZhdGU6CisgICAgU2hhcGVJbnNp
ZGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKKyAgICA6IFNoYXBlSW5mbzxSZW5k
ZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmU2hhcGU6OmdldElu
Y2x1ZGVkSW50ZXJ2YWxzPiAocmVuZGVyZXIpCisgICAgLCBtX25lZWRzTGF5b3V0KGZhbHNlKQor
ICAgIHsgfQorCisgICAgU2VnbWVudFJhbmdlTGlzdCBtX3NlZ21lbnRSYW5nZXM7CisgICAgYm9v
bCBtX25lZWRzTGF5b3V0OjE7Cit9OworCit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjU1ODAzOGIyNDdjM2M4NzU3MmU1ODYwZjA4YzgxOTJiMjFiYTQ1MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHAKQEAg
LTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hh
cGVJbnRlcnZhbC5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgSW50ZXJ2YWxYMUNvbXBhcmF0b3IgeworICAgIGJvb2wgb3Bl
cmF0b3IoKSAoY29uc3QgU2hhcGVJbnRlcnZhbCYgaTEsIGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGky
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkxLngxIDwgaTIueDE7CisgICAgfQorfTsK
KworYm9vbCBTaGFwZUludGVydmFsOjppbnRlcnNlY3QoY29uc3QgU2hhcGVJbnRlcnZhbCYgaSwg
U2hhcGVJbnRlcnZhbCYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHgyIDwgaS54MSB8fCB4MSA+IGku
eDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBydi54MSA9IHN0ZDo6bWF4KHgxLCBpLngx
KTsKKyAgICBydi54MiA9IHN0ZDo6bWluKHgyLCBpLngyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBzb3J0U2hhcGVJbnRlcnZhbHMoVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2KQorewor
ICAgIHN0ZDo6c29ydCh2LmJlZ2luKCksIHYuZW5kKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkp
OworfQorCit2b2lkIG1lcmdlU2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2
YWw+JiB2MSwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPFNoYXBlSW50
ZXJ2YWw+JiBydikKK3sKKyAgICBpZiAoIXYxLnNpemUoKSkKKyAgICAgICAgcnYuYXBwZW5kUmFu
Z2UodjIuYmVnaW4oKSwgdjIuZW5kKCkpOworICAgIGVsc2UgaWYgKCF2Mi5zaXplKCkpCisgICAg
ICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IHYodjEuc2l6ZSgpICsgdjIuc2l6ZSgpKTsKKyAg
ICAgICAgU2hhcGVJbnRlcnZhbCogaW50ZXJ2YWwgPSAwOworCisgICAgICAgIHN0ZDo6bWVyZ2Uo
djEuYmVnaW4oKSwgdjEuZW5kKCksIHYyLmJlZ2luKCksIHYyLmVuZCgpLCB2LmJlZ2luKCksIElu
dGVydmFsWDFDb21wYXJhdG9yKCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
di5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFpbnRlcnZhbCkKKyAgICAgICAgICAg
ICAgICBpbnRlcnZhbCA9ICZ2W2ldOworICAgICAgICAgICAgZWxzZSBpZiAodltpXS54MSA+PSBp
bnRlcnZhbC0+eDEgJiYgdltpXS54MSA8PSBpbnRlcnZhbC0+eDIpIC8vIEZJWE1FOiAxc3QgPD0g
dGVzdCBub3QgbmVlZGVkPworICAgICAgICAgICAgICAgIGludGVydmFsLT54MiA9IHN0ZDo6bWF4
KGludGVydmFsLT54MiwgdltpXS54Mik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2
W2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVydmFsKQor
ICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7CisgICAgfQorfQorCit2b2lkIGludGVy
c2VjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjEsIGNvbnN0
IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcnYpCit7
CisgICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKKyAgICBzaXplX3QgdjJTaXplID0gdjIu
c2l6ZSgpOworCisgICAgaWYgKCF2MVNpemUgfHwgIXYyU2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU2hhcGVJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBib29sIG92ZXJsYXAgPSBmYWxzZTsK
KyAgICBzaXplX3QgaTEgPSAwOworICAgIHNpemVfdCBpMiA9IDA7CisKKyAgICB3aGlsZSAoaTEg
PCB2MVNpemUgJiYgaTIgPCB2MlNpemUpIHsKKyAgICAgICAgU2hhcGVJbnRlcnZhbCB2MTI7Cisg
ICAgICAgIGlmICh2MVtpMV0uaW50ZXJzZWN0KHYyW2kyXSwgdjEyKSkgeworICAgICAgICAgICAg
aWYgKCFvdmVybGFwIHx8ICF2MTIuaW50ZXJzZWN0KGludGVydmFsLCBpbnRlcnZhbCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgICAgICAgICAgICAgcnYuYXBwZW5k
KGludGVydmFsKTsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9IHYxMjsKKyAgICAgICAgICAg
ICAgICBvdmVybGFwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2MVtp
MV0ueDIgPCB2MltpMl0ueDIpCisgICAgICAgICAgICAgICAgaTErKzsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpMisrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKG92ZXJsYXApCisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKKyAgICAg
ICAgICAgIG92ZXJsYXAgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2MVtpMV0ueDEgPCB2Mltp
Ml0ueDEpCisgICAgICAgICAgICAgICAgaTErKzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBpMisrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG92ZXJsYXApCisgICAg
ICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Cit9CisKK3ZvaWQgc3VidHJhY3RTaGFwZUludGVydmFs
cyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRl
cnZhbD4mIHYyLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJ2KQoreworICAgIHNpemVfdCB2MVNp
emUgPSB2MS5zaXplKCk7CisgICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKKworICAgIGlm
ICghdjFTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXYyU2l6ZSkKKyAgICAgICAg
cnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworICAgIGVsc2UgeworICAgICAg
ICBzaXplX3QgaTEgPSAwLCBpMiA9IDA7CisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2lu
KCksIHYxLmVuZCgpKTsKKworICAgICAgICB3aGlsZSAoaTEgPCBydi5zaXplKCkgJiYgaTIgPCB2
MlNpemUpIHsKKyAgICAgICAgICAgIFNoYXBlSW50ZXJ2YWwmIGludGVydmFsMSA9IHJ2W2kxXTsK
KyAgICAgICAgICAgIGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGludGVydmFsMiA9IHYyW2kyXTsKKwor
ICAgICAgICAgICAgaWYgKGludGVydmFsMi54MSA8PSBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwy
LngyID49IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAgICBydi5yZW1vdmUoaTEpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngxKQorICAgICAgICAg
ICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDEgPiBpbnRl
cnZhbDEueDIpCisgICAgICAgICAgICAgICAgaTEgKz0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGludGVydmFsMi54MSA+IGludGVydmFsMS54MSAmJiBpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEu
eDIpIHsKKyAgICAgICAgICAgICAgICBydi5pbnNlcnQoaTEsIFNoYXBlSW50ZXJ2YWwoaW50ZXJ2
YWwxLngxLCBpbnRlcnZhbDIueDEpKTsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDEgPSBp
bnRlcnZhbDIueDI7CisgICAgICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSkgeworICAgICAgICAgICAgICAgIGlu
dGVydmFsMS54MSA9IGludGVydmFsMi54MjsKKyAgICAgICAgICAgICAgICBpMiArPSAxOworICAg
ICAgICAgICAgfSBlbHNlICB7IC8vIChpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwxLngyKQorICAg
ICAgICAgICAgICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54MTsKKyAgICAgICAgICAgICAg
ICBpMSArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnRlcnZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZjE0ZDhhNWE3MjMyZDkyZWRhM2RmZDkzNzc4YTky
Y2Q2OTU0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW50ZXJ2YWwuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisg
KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFw
ZUludGVydmFsX2gKKyNkZWZpbmUgU2hhcGVJbnRlcnZhbF9oCisKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNoYXBlSW50ZXJ2YWwgewor
cHVibGljOgorICAgIGZsb2F0IHgxOworICAgIGZsb2F0IHgyOworCisgICAgU2hhcGVJbnRlcnZh
bChmbG9hdCB4MSA9IDAsIGZsb2F0IHgyID0gMCkKKyAgICAgICAgOiB4MSh4MSkKKyAgICAgICAg
LCB4Mih4MikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpbnRlcnNlY3QoY29uc3QgU2hhcGVJ
bnRlcnZhbCYsIFNoYXBlSW50ZXJ2YWwmKSBjb25zdDsKK307CisKK3ZvaWQgc29ydFNoYXBlSW50
ZXJ2YWxzKFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBtZXJnZVNoYXBlSW50ZXJ2YWxz
KGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFs
PiYsIFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBpbnRlcnNlY3RTaGFwZUludGVydmFs
cyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZh
bD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgc3VidHJhY3RTaGFwZUludGVydmFs
cyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZh
bD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gU2hhcGVJbnRlcnZhbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTkyZjY1MDVk
ODIxMjgzOTI4MmZhZDkzZTZlMjYzYjBkYWQyMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcApAQCAtMCwwICsx
LDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIlNoYXBlT3V0c2lkZUlu
Zm8uaCIKKworI2luY2x1ZGUgIlJlbmRlckJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citi
b29sIFNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqIGJveCkK
K3sKKyAgICBTaGFwZVZhbHVlKiB2YWx1ZSA9IGJveC0+c3R5bGUoKS0+c2hhcGVPdXRzaWRlKCk7
CisgICAgcmV0dXJuIGJveC0+aXNGbG9hdGluZ1dpdGhTaGFwZU91dHNpZGUoKSAmJiB2YWx1ZS0+
dHlwZSgpID09IFNoYXBlVmFsdWU6OlNoYXBlICYmIHZhbHVlLT5zaGFwZSgpOworfQorCitib29s
IFNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5l
VG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCit7CisgICAgaWYgKHNoYXBlU2l6ZURpcnR5KCkg
fHwgbV9saW5lVG9wICE9IGxpbmVUb3AgfHwgbV9saW5lSGVpZ2h0ICE9IGxpbmVIZWlnaHQpIHsK
KyAgICAgICAgaWYgKFNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRz
aWRlLCAmU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGlu
ZShsaW5lVG9wLCBsaW5lSGVpZ2h0KSkgeworICAgICAgICAgICAgbV9sZWZ0U2VnbWVudFNoYXBl
Qm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbMF0ubG9naWNhbExlZnQgLSBzaGFwZUxvZ2lj
YWxMZWZ0KCk7CisgICAgICAgICAgICBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YSA9IG1fc2VnbWVudHNbbV9zZWdtZW50cy5zaXplKCktMV0ubG9naWNhbFJpZ2h0IC0gc2hhcGVM
b2dpY2FsUmlnaHQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbGVmdFNlZ21l
bnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOworICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRT
aGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOworICAgICAgICB9CisgICAgICAgIG1fbGluZVRvcCA9
IGxpbmVUb3A7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOworfQorCit9
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91
dHNpZGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JlNTkwNTZjYzFlZDdkMDI0NjJlZjRhNDcxNmNkMzk3
YmJlYTNkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGVPdXRzaWRlSW5mby5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVPdXRzaWRlSW5mb19oCisjZGVmaW5lIFNoYXBl
T3V0c2lkZUluZm9faAorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJMYXlv
dXRTaXplLmgiCisjaW5jbHVkZSAiU2hhcGVJbmZvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyQm94OworCitjbGFzcyBTaGFwZU91dHNpZGVJbmZvIDogcHVibGljIFNo
YXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmU2hhcGU6Omdl
dEV4Y2x1ZGVkSW50ZXJ2YWxzPiwgcHVibGljIE1hcHBlZEluZm88UmVuZGVyQm94LCBTaGFwZU91
dHNpZGVJbmZvPiB7CitwdWJsaWM6CisgICAgTGF5b3V0U2l6ZSBzaGFwZUxvZ2ljYWxPZmZzZXQo
KSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKHNoYXBlTG9naWNhbExlZnQoKSwgc2hhcGVMb2dp
Y2FsVG9wKCkpOyB9CisKKyAgICBMYXlvdXRVbml0IGxlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YTsgfQorICAgIExheW91dFVuaXQgcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCkg
Y29uc3QgeyByZXR1cm4gbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklERTsKKworICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNoYXBlT3V0c2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJl
cikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNoYXBlT3V0c2lkZUluZm8ocmVuZGVyZXIpKTsgfQor
ICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqKTsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5n
Qm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZU1hcmdp
bkxvZ2ljYWxCb3VuZGluZ0JveCgpOyB9CisKK3ByaXZhdGU6CisgICAgU2hhcGVPdXRzaWRlSW5m
byhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSA6IFNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5k
ZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPihyZW5k
ZXJlcikgeyB9CisKKyAgICBMYXlvdXRVbml0IG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94
RGVsdGE7CisgICAgTGF5b3V0VW5pdCBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YTsKKyAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKK307CisKK30KKyNlbmRpZgorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVW
YWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFs
dWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5ZDM5NTczMjM4MmYzYjI3NmFj
NTY3NmE2MmRiMTZmMDdmZWNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVW
YWx1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlVmFsdWVfaAotI2RlZmluZSBFeGNsdXNp
b25TaGFwZVZhbHVlX2gKLQotI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgiCi0jaW5jbHVkZSAiU3R5
bGVJbWFnZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRXhjbHVzaW9uU2hhcGVWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV4
Y2x1c2lvblNoYXBlVmFsdWU+IHsKLXB1YmxpYzoKLSAgICBlbnVtIEV4Y2x1c2lvblNoYXBlVmFs
dWVUeXBlIHsKLSAgICAgICAgLy8gVGhlIEF1dG8gdmFsdWUgaXMgZGVmaW5lZCBieSBhIG51bGwg
RXhjbHVzaW9uU2hhcGVWYWx1ZSoKLSAgICAgICAgU2hhcGUsCi0gICAgICAgIE91dHNpZGUsCi0g
ICAgICAgIEltYWdlCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4Y2x1c2lvblNo
YXBlVmFsdWU+IGNyZWF0ZVNoYXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhjbHVzaW9uU2hhcGVWYWx1ZShz
aGFwZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFs
dWU+IGNyZWF0ZU91dHNpZGVWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEV4Y2x1c2lvblNoYXBlVmFsdWUoT3V0c2lkZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGNyZWF0ZUltYWdlVmFsdWUoUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RXhjbHVzaW9uU2hhcGVWYWx1ZShpbWFnZSkpOwotICAgIH0KLQotICAgIEV4Y2x1c2lvblNoYXBl
VmFsdWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBCYXNpY1NoYXBl
KiBzaGFwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7IH0KLSAgICBTdHlsZUltYWdl
KiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldElt
YWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCi0gICAgewotICAgICAgICBpZiAobV9p
bWFnZSAhPSBpbWFnZSkKLSAgICAgICAgICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICB9Ci0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUmIG90aGVyKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRXhjbHVz
aW9uU2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlKQotICAgICAgICA6IG1f
dHlwZShTaGFwZSkKLSAgICAgICAgLCBtX3NoYXBlKHNoYXBlKQotICAgIHsKLSAgICB9Ci0gICAg
RXhjbHVzaW9uU2hhcGVWYWx1ZShFeGNsdXNpb25TaGFwZVZhbHVlVHlwZSB0eXBlKQotICAgICAg
ICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZShQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgICAgICA6IG1fdHlwZShJbWFnZSkKLSAg
ICAgICAgLCBtX2ltYWdlKGltYWdlKQotICAgIHsKLSAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVW
YWx1ZVR5cGUgbV90eXBlOwotICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBtX3NoYXBlOwotICAgIFJl
ZlB0cjxTdHlsZUltYWdlPiBtX2ltYWdlOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IGI4YjIyMGFiNmMx
NDQxOWQyMDk5MGJlMjA4YWUzNjg1Zjc1YzdiOTAuLmE0MDM3YzI1OTIxMDU5MGRjNDQwYTI4YmRl
ZGM4YzQwOGZiYjBmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcApAQCAtMTczMyw5ICsxNzMzLDkgQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVySW1hZ2VPdXRzZXQoTGVuZ3RoQm94IG91dHNldCkKICAgICBzdXJyb3VuZC5hY2Nlc3Mo
KS0+Ym9yZGVyLm1faW1hZ2Uuc2V0T3V0c2V0KG91dHNldCk7CiB9CiAKLUV4Y2x1c2lvblNoYXBl
VmFsdWUqIFJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGUoKQorU2hhcGVWYWx1ZSogUmVu
ZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZSgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4sIHNPdXRzaWRlVmFsdWUsIChFeGNsdXNpb25T
aGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSkpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoUmVmUHRyPFNoYXBlVmFsdWU+LCBzT3V0c2lkZVZhbHVlLCAoU2hhcGVWYWx1ZTo6Y3JlYXRl
T3V0c2lkZVZhbHVlKCkpKTsKICAgICByZXR1cm4gc091dHNpZGVWYWx1ZS5nZXQoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCA2OTIy
MGYzMDdhNzY1YmRkNTAyZmQ5ODFiYjE3NzhhZjJkNzYzMTllLi44M2ZlMDIzOGQyNGE1YmI1MWZh
NGI0NWUyZmEwNGM1ODNkOTM4M2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKICNpbmNsdWRlICJDb3VudGVyRGlyZWN0aXZlcy5oIgogI2luY2x1ZGUgIkRhdGFSZWYuaCIK
LSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udEJhc2VsaW5l
LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgi
CiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCisjaW5j
bHVkZSAiU2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgIlN0eWxlQmFja2dyb3VuZERhdGEuaCIKICNp
bmNsdWRlICJTdHlsZUJveERhdGEuaCIKICNpbmNsdWRlICJTdHlsZURlcHJlY2F0ZWRGbGV4aWJs
ZUJveERhdGEuaCIKQEAgLTE0NzAsMzEgKzE0NzAsMzEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
S2VybmluZyhTVkdMZW5ndGggaykgeyBhY2Nlc3NTVkdTdHlsZSgpLT5zZXRLZXJuaW5nKGspOyB9
CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0U2hhcGVJbnNpZGUoUGFzc1JlZlB0cjxFeGNsdXNpb25T
aGFwZVZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFNoYXBlSW5zaWRlKFBhc3NSZWZQdHI8U2hh
cGVWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fc2hhcGVJbnNpZGUgPT0gdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJh
cmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3NoYXBlSW5zaWRlID0gdmFsdWU7CiAgICAg
fQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlKCkgY29uc3QgeyByZXR1cm4g
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVJbnNpZGUuZ2V0KCk7IH0KLSAgICBFeGNsdXNp
b25TaGFwZVZhbHVlKiByZXNvbHZlZFNoYXBlSW5zaWRlKCkgY29uc3QKKyAgICBTaGFwZVZhbHVl
KiBzaGFwZUluc2lkZSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3No
YXBlSW5zaWRlLmdldCgpOyB9CisgICAgU2hhcGVWYWx1ZSogcmVzb2x2ZWRTaGFwZUluc2lkZSgp
IGNvbnN0CiAgICAgewotICAgICAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZUluc2lkZSA9
IHRoaXMtPnNoYXBlSW5zaWRlKCk7Ci0gICAgICAgIGlmIChzaGFwZUluc2lkZSAmJiBzaGFwZUlu
c2lkZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6Ok91dHNpZGUpCisgICAgICAgIFNo
YXBlVmFsdWUqIHNoYXBlSW5zaWRlID0gdGhpcy0+c2hhcGVJbnNpZGUoKTsKKyAgICAgICAgaWYg
KHNoYXBlSW5zaWRlICYmIHNoYXBlSW5zaWRlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6T3V0c2lk
ZSkKICAgICAgICAgICAgIHJldHVybiBzaGFwZU91dHNpZGUoKTsKICAgICAgICAgcmV0dXJuIHNo
YXBlSW5zaWRlOwogICAgIH0KIAotICAgIHZvaWQgc2V0U2hhcGVPdXRzaWRlKFBhc3NSZWZQdHI8
RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRTaGFwZU91dHNpZGUoUGFz
c1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChyYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9zaGFwZU91dHNpZGUgPT0gdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3NoYXBlT3V0c2lkZSA9
IHZhbHVlOwogICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUoKSBj
b25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZU91dHNpZGUuZ2V0KCk7
IH0KKyAgICBTaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bV9zaGFwZU91dHNpZGUuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyBFeGNs
dXNpb25TaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVJbnNpZGUoKTsKLSAgICBzdGF0aWMgRXhjbHVz
aW9uU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlT3V0c2lkZSgpIHsgcmV0dXJuIDA7IH0KKyAgICBz
dGF0aWMgU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlSW5zaWRlKCk7CisgICAgc3RhdGljIFNoYXBl
VmFsdWUqIGluaXRpYWxTaGFwZU91dHNpZGUoKSB7IHJldHVybiAwOyB9CiAKICAgICB2b2lkIHNl
dENsaXBQYXRoKFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IG9wZXJhdGlvbikKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NzRhZWViMjlmODI1Y2JhNTkzODU3YjEwOWE5ZDFhYjQ0NDljYjBkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuaApAQCAtMCww
ICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVWYWx1
ZV9oCisjZGVmaW5lIFNoYXBlVmFsdWVfaAorCisjaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKKyNp
bmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFwZVZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8
U2hhcGVWYWx1ZT4geworcHVibGljOgorICAgIGVudW0gU2hhcGVWYWx1ZVR5cGUgeworICAgICAg
ICAvLyBUaGUgQXV0byB2YWx1ZSBpcyBkZWZpbmVkIGJ5IGEgbnVsbCBTaGFwZVZhbHVlKgorICAg
ICAgICBTaGFwZSwKKyAgICAgICAgT3V0c2lkZSwKKyAgICAgICAgSW1hZ2UKKyAgICB9OworCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRlU2hhcGVWYWx1ZShQYXNzUmVm
UHRyPEJhc2ljU2hhcGU+IHNoYXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTaGFwZVZhbHVlKHNoYXBlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cGVWYWx1ZT4gY3JlYXRlT3V0c2lkZVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2hhcGVWYWx1ZShPdXRzaWRlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRlSW1hZ2VWYWx1ZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IGltYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFwZVZhbHVlKGlt
YWdlKSk7CisgICAgfQorCisgICAgU2hhcGVWYWx1ZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIEJhc2ljU2hhcGUqIHNoYXBlKCkgY29uc3QgeyByZXR1cm4gbV9zaGFw
ZS5nZXQoKTsgfQorICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFn
ZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ltYWdlICE9IGltYWdlKQorICAgICAgICAgICAgbV9p
bWFnZSA9IGltYWdlOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2hhcGVWYWx1
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCk7IH0KKworcHJp
dmF0ZToKKyAgICBTaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGUpCisgICAg
ICAgIDogbV90eXBlKFNoYXBlKQorICAgICAgICAsIG1fc2hhcGUoc2hhcGUpCisgICAgeworICAg
IH0KKyAgICBTaGFwZVZhbHVlKFNoYXBlVmFsdWVUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBl
KHR5cGUpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlKFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gaW1hZ2UpCisgICAgICAgIDogbV90eXBlKEltYWdlKQorICAgICAgICAsIG1faW1hZ2UoaW1h
Z2UpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlVHlwZSBtX3R5cGU7CisgICAgUmVmUHRy
PEJhc2ljU2hhcGU+IG1fc2hhcGU7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1faW1hZ2U7Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKaW5kZXggMGEzYzdhOGNhYzFiYzIw
YTBlNDQ1ZDk3MzNkNzA1YTYwNWJkMTFjYy4uMDc2N2FkOGMzMWZjN2RmOGRmYWQ5YzhhZGE5NDk5
YmUwYzlmNDlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCkBAIC0zMCwxMCArMzAsMTAgQEAKICNp
bmNsdWRlICJDb3VudGVyRGlyZWN0aXZlcy5oIgogI2luY2x1ZGUgIkN1cnNvckRhdGEuaCIKICNp
bmNsdWRlICJEYXRhUmVmLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkZpbGxMYXllci5oIgogI2luY2x1ZGUgIkxpbmVDbGFtcFZhbHVlLmgiCiAjaW5jbHVk
ZSAiTmluZVBpZWNlSW1hZ2UuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtMTM2LDggKzEzNiw4IEBAIHB1YmxpYzoKIAogICAgIExlbmd0aFNpemUg
bV9wYWdlU2l6ZTsKIAotICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBtX3NoYXBlSW5z
aWRlOwotICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBtX3NoYXBlT3V0c2lkZTsKKyAg
ICBSZWZQdHI8U2hhcGVWYWx1ZT4gbV9zaGFwZUluc2lkZTsKKyAgICBSZWZQdHI8U2hhcGVWYWx1
ZT4gbV9zaGFwZU91dHNpZGU7CiAgICAgTGVuZ3RoIG1fc2hhcGVNYXJnaW47CiAgICAgTGVuZ3Ro
IG1fc2hhcGVQYWRkaW5nOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203967</attachid>
            <date>2013-06-06 14:20:10 -0700</date>
            <delta_ts>2013-06-06 15:48:08 -0700</delta_ts>
            <desc>Adding ShapeOutsideInfo.h to sources</desc>
            <filename>bug-117162-20130606141838.patch</filename>
            <type>text/plain</type>
            <size>285947</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzljMDg4N2EyYTdjYTIx
YTBiZGQwZjBjYTY3OWMyMTBjMzUzYzNlYy4uOWFjYTM2YmQ3NGFkYTE0ZDgxOTM1YTRkZjIzY2Ux
Y2I1YWI0ZmVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMiBAQAorMjAxMy0wNi0wNiAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSBz
cGxpdCBiZXR3ZWVuIHRoZSBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9ucywKKyAgICAgICAgc29tZSByZW5hbWluZyBpcyBuZWNlc3NhcnkuIEluIGdlbmVyYWwsIHRo
aXMgcGF0Y2ggcmVtb3ZlcyAnRXhjbHVzaW9uJyBmcm9tCisgICAgICAgIGFueSBTaGFwZXMgY29k
ZSwgbW9zdGx5IHJlbmFtaW5nIEV4Y2x1c2lvblNoYXBlIC0+IFNoYXBlLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAg
ICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
cHJvcGVydHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAg
ICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVNoYXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5U2hhcGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVNoYXBlOjpjcmVhdGVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVu
Yyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFw
cGVyU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmVuc3Vy
ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlv
dXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2hhcGVJbnNpZGVJbmZv
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVTaGFwZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0
ZXJDaGlsZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0Rmxv
YXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dp
Y2FsTG9jYXRpb25Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9z
aXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5zdXJlU2hhcGVJbnNpZGVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaGFwZUluc2lkZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNldFNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnlQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRTaGFwZUluc2lkZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpMaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rp
b25Qb3NpdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5z
Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMb2dpY2FsTGluZVRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5k
TG9naWNhbEhlaWdodElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6d2lsbEJlRGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJT
dHlsZUNoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzaGFwZU91dHNpZGVJbmZvKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50T2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmll
dy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JlZmxleFZlcnRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjppbndhcmRFZGdlTm9ybWFsKToKKyAgICAgICAgKFdlYkNvcmU6Om91dHdhcmRFZGdlTm9ybWFs
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
VmVydGljZXNUb0xheW91dFVuaXRHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTaGFw
ZVBhZGRpbmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNoYXBlTWFyZ2luQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVF
ZGdlSW50ZXJzZWN0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdl
YkNvcmU6OmFib3ZlT3JUb1RoZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBl
OjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1BvbHlnb25TaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25F
ZGdlOjpPZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29u
RWRnZTo6ZWRnZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpi
YXNpcyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OlBvbHlnb25TaGFwZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlw
c2VZSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OnBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2Vw
dEZvcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBlTWFyZ2lu
Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZElu
dGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJ
bnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFu
Z2xlU2hhcGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OkZsb2F0
Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cngpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVjdGFuZ2xlU2hhcGU6OlJlY3RhbmdsZVNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWN0YW5nbGVTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9seWdv
blNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUmVjdFRvTG9naWNhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6
OnBoeXNpY2FsU2l6ZVRvTG9naWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRl
U2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oLgorICAgICAgICAoV2Vi
Q29yZTo6TGluZVNlZ21lbnQ6OkxpbmVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
Ojp+U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlTWFyZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpzaGFwZVBhZGRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wdXRlZFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hcHBlZEluZm86OmVuc3VyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6
cmVtb3ZlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjppbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcHBlZEluZm86OmluZm9NYXApOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVJbmZvOjp+U2hhcGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2V0U2hh
cGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6Y2xlYXJTZWdtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJ
bmZvOjpzaGFwZUxvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNo
YXBlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dp
Y2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExpbmVUb3Ap
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGluZUJvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsaW5lV2l0aGluU2hhcGVCb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpkaXJ0eVNoYXBlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlU2l6ZURpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5m
bzo6b3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpTaGFwZUluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsVG9wT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6TGluZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZVNlZ21lbnRJdGVyYXRvcjo6TGluZVNlZ21lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJ
bnNpZGVJbmZvOjpoYXNTZWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUlu
Zm86OnNlZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2VnbWVu
dFJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OmN1cnJlbnRTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2V0TmVlZHNMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpuZWVkc0xheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OlNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUludGVydmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFNoYXBl
SW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlU2hhcGVJbnRlcnZhbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6c3VidHJhY3RTaGFwZUludGVydmFscyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUludGVydmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uSW50ZXJ2YWwuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW50ZXJ2YWw6OlNoYXBl
SW50ZXJ2YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjppc0Vu
YWJsZWRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNl
Z21lbnRzRm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJ
bmZvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hh
cGVMb2dpY2FsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86Omxl
ZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
T3V0c2lkZUluZm86OnJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlT3V0c2lkZUluZm86OlNoYXBlT3V0c2lkZUluZm8pOgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6aW5pdGlhbFNoYXBlSW5zaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUu
aC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcGVWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpzaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZVZhbHVlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVl
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OlNoYXBlVmFsdWUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6
CisKIDIwMTMtMDYtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFJlc291cmNlTG9hZGVyOjpyZXNvdXJjZURhdGEoKSBzaG91bGQgbm90IHJl
dHVybiBhIFBhc3NSZWZQdHIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGU4MzczNTljOTM1NjZk
YzU1NmE0ZTNmMjg3OWNjNmI3OTcyMWVmZC4uNTE3Yzc3Y2E5ODhjZDcwNzE2Y2ZlYzc3YjJmNjEy
OTlhMWEyNDBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTc2LDYgKzc2LDcgQEAgc2V0KFdl
YkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zIgog
ICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRl
cmluZy9tYXRobWwiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zaGFwZXMiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zdHlsZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVu
ZGVyaW5nL3N2ZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3RvcmFnZSIKQEAgLTIwOTMsMTMgKzIw
OTQsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiAg
ICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwCi0gICAgcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAK
LSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5mby5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNw
cAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcAogICAgIHJlbmRl
cmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxh
eW91dC5jcHAKICAgICByZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCkBAIC0yMjE0
LDYgKzIyMDgsMTUgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MU3ViU3VwLmNwcAogICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
VW5kZXJPdmVyLmNwcAogCisgICAgcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwCisg
ICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAKKyAgICByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcAorICAgIHJl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbnRlcnZhbC5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8u
Y3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKKwogICAgIHJlbmRl
cmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUvQ29udGVudERh
dGEuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggODQxYTU0MTk1MDRiODYwN2VjMjRhYTQzZjE3Yzk2
MTkyNmY1Y2JmMS4uOTRkZmU2YzlmMmUyNzkzMWZlMzIyZWYxMmZmOTE5N2I5OGY1MDY1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00Mzg1LDIwICs0Mzg1LDYgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25JbnRlcnZhbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9s
eWdvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25TaGFwZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAg
XApAQCAtNDYzMyw2ICs0NjE5LDIwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmggXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZv
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaCBcCisJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBcCisJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvQm9yZGVyRGF0YS5oIFwKQEAgLTQ2NDYsNyArNDY0Niw2IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1cnNvckRhdGEuaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3QuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0RhdGFSZWYuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0ZpbGxMYXllci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9G
aWxsTGF5ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlv
bi5oIFwKQEAgLTQ2NjMsNiArNDY2Miw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1NoYWRvd0RhdGEuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1NoYXBlVmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFj
a2dyb3VuZERhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVC
YWNrZ3JvdW5kRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVC
b3hEYXRhLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAwYjRhNGZkOWQwNmRkZDg1M2YyMDZjMTUyYjA3
ZGMwMmMyZjJhNjc5Li4wN2JhOGJkOTc3YWY3ODNmZDExNWYzMGNkNjFkYzRlZjI0ZDg0YjZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTExNDUsMTMgKzExNDUsNiBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5k
ZXJpbmcvQmlkaVJ1bi5jcHAgXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAgXAogICAg
IHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRl
cnZhbC5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCi0gICAgcmVu
ZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25T
aGFwZS5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uY3BwIFwKLSAgICBy
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwIFwKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXAogICAg
IHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAgXApAQCAtMTI0NSw2ICsxMjM4LDEz
IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9SZW5kZXJXb3JkQnJlYWsuY3BwIFwKICAg
ICByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhh
dmlvci5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBcCisgICAg
cmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgXAorICAg
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcCBcCisgICAgcmVuZGVyaW5nL3No
YXBlcy9TaGFwZUludGVydmFsLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcCBcCiAgICAg
cmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRhLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Nv
dW50ZXJEaXJlY3RpdmVzLmNwcCBcCkBAIC0yNDAzLDEzICsyNDAzLDYgQEAgSEVBREVSUyArPSBc
CiAgICAgcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmggXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9k
ZS5oIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1
c2lvbkludGVydmFsLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotICAg
IHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBcCi0gICAgcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5oIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaCBcCiAgICAgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaCBcCiAgICAgcmVuZGVyaW5n
L0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIFwKQEAgLTI1MTMsMTggKzI1MDYsMjUgQEAgSEVB
REVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlcldvcmRCcmVhay5oIFwKICAgICByZW5kZXJp
bmcvUm9vdElubGluZUJveC5oIFwKICAgICByZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCBcCisg
ICAgcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBl
cy9SZWN0YW5nbGVTaGFwZS5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggXAorICAg
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnNpZGVJbmZvLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwK
KyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBcCiAgICAgcmVuZGVyaW5n
L3N0eWxlL0Jhc2ljU2hhcGVzLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5o
IFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ291bnRlckRpcmVjdGl2ZXMuaCBcCiAgICAgcmVuZGVy
aW5nL3N0eWxlL0N1cnNvckRhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3Qu
aCBcCi0gICAgcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBcCiAgICAgcmVu
ZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVM
aXN0LmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5oIFwKICAgICByZW5k
ZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaCBcCisgICAgcmVuZGVyaW5n
L3N0eWxlL1NoYXBlVmFsdWUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3Vu
ZERhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlQm94RGF0YS5oIFwKICAgICByZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGU4MDcyMDFiNDExMGI5Y2FjZTc1ZjBl
MTYwNzRkMzJkMmVjMGQ3NjkuLjBkOTVhMjI5MmNmNTBlMGE3Y2U1NTdmOTZlMmJiMjA0YjQ0NjIw
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agpAQCAtNTQyMiwxMiArNTQyMiw2IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblJlY3Rh
bmdsZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVz
aW9uU2hhcGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIj4KICAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAt
NjMwNiw2ICs2MzAwLDEyIEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFw
ZUluc2lkZUluZm8uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHNoYXBlc1xTaGFwZUludGVydmFsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVPdXRzaWRlSW5mby5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1BhdGhEYXRhLmNwcCI+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTEyMTA5LDEx
ICsxMjEwOSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcYnJlYWtf
bGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xDb3VudGVy
Tm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVsbGlwc2lz
Qm94LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
SW50ZXJ2YWwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25Qb2x5Z29uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
RXhjbHVzaW9uU2hhcGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaXhlZFRhYmxlTGF5b3V0LmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmxvd1RocmVhZENvbnRyb2xs
ZXIuaCIgLz4KQEAgLTEyMTk3LDYgKzEyMTkyLDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcUmVuZGVyU2VsZWN0aW9uSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclNsaWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVT
aGFwZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xT
aGFwZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xT
aGFwZUluc2lkZUluZm8uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzaGFwZXNcU2hhcGVJbnRlcnZhbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91dHNpZGVJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0Jsb2NrLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0NvbnRhaW5lci5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdHcmFkaWVu
dFN0b3AuaCIgLz4KQEAgLTEyMjY5LDcgKzEyMjcwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxDdXJzb3JEYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcQ3Vyc29yTGlzdC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXERhdGFSZWYuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxFeGNsdXNpb25TaGFwZVZhbHVlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRmlsbExheWVyLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcR3JpZFBvc2l0
aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcR3Jp
ZFRyYWNrU2l6ZS5oIiAvPgpAQCAtMTIyODAsNiArMTIyODAsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFJlbmRlclN0eWxlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcUmVuZGVyU3R5bGVDb25zdGFudHMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFkb3dEYXRh
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU2hhcGVW
YWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0
eWxlQmFja2dyb3VuZERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdHlsZVxTdHlsZUJveERhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzdHlsZVxTdHlsZUNhY2hlZEltYWdlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXgg
ZjVlODcyMzhjN2YyMDhiNzU4YTBmZDcxNjE4ZDAyZjRkMjJkYzcwMy4uNWUyY2UwOWVhNGY0YzNm
ODUzMmE4YjJjZGEzMWFkMmU2NDA4M2ExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMjQzMiwyMyArMjQz
MiwyMyBAQAogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXEVsbGlwc2lzQm94LmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVy
PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XEV4Y2x1c2lvbkludGVydmFsLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJl
bmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAiPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5jcHAiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uY3BwIj4KICAgICAgIDxG
aWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCI+Cisg
ICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFNoYXBlSW50ZXJ2YWwuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91dHNpZGVJbmZvLmNwcCI+CiAgICAgICA8RmlsdGVy
PnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCI+CkBAIC05MTIwLDE5
ICs5MTIwLDIyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRWxsaXBz
aXNCb3guaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbkludGVy
dmFsLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5
Z29uU2hhcGUuaCI+CisgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgorICAgIDwvQ2xJ
bmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0
YW5nbGVTaGFwZS5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
UG9seWdvbi5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNc
U2hhcGUuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBl
LmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUlu
c2lkZUluZm8uaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcU2hhcGVJbnRlcnZhbC5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVPdXRzaWRlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+cmVu
ZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCI+CkBAIC05NTg4LDkgKzk1OTEs
NiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXERhdGFSZWYu
aCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEV4Y2x1c2lv
blNoYXBlVmFsdWUuaCI+Ci0gICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0
eWxlXEZpbGxMYXllci5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CkBAIC05NjIxLDYgKzk2MjEsOSBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFNoYWRvd0RhdGEuaCI+CiAgICAgICA8RmlsdGVy
PnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFNoYXBlVmFsdWUuaCI+CisgICAgICA8Rmls
dGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxlQmFja2dyb3VuZERhdGEuaCI+
CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgpAQCAtMTUxODQsNCArMTUxODcsNCBAQAogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRl
cj4KICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ1MGYyYzVmNWJkNjQw
NGNmZmNkNzk5NWU2NmE3ZmRmOTM1NGY5ODcuLjRjNDg3ZWE1M2ExNTM5ZDBkOGFkOGUzNTM3YWM3
ZTk3MTExZTI4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE4MzUsMTQgKzE4MzUsNiBAQAogCQk2RTY3RDJBNjEyODBFOEE0
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0RPcGVuR0wuY3BwICovOyB9OwogCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdM
LmggKi87IH07CiAJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4
MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKLQkJNkU4Nzk4QkExNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNs
dXNpb25JbnRlcnZhbC5jcHAgKi87IH07Ci0JCTZFODc5OEJCMTVGODFFNEEwMEJGRTRBQSAvKiBF
eGNsdXNpb25JbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkU4Nzk4QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkU4Nzk4
QkMxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNjE1RjgxRTRBMDBCRkU0
QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCAqLzsgfTsKLQkJNkU4Nzk4QkQxNUY4MUU0QTAw
QkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lv
blJlY3RhbmdsZS5oICovOyB9OwotCQk2RTg3OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsK
LQkJNkU4Nzk4QkYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBC
RkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk2RUFGMzQwRjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9u
UG9seWdvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi87IH07
Ci0JCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlB
MDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYy
MDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2
NEFycmF5LmNwcCAqLzsgfTsKIAkJNkVCQzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2
NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVC
RjBFNDgxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3
MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAqLzsgfTsKQEAgLTMyNjMsOCArMzI1NSw2IEBACiAJ
CTk4Q0U0MzJBMTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMg
LyogTGlua0xvYWRlci5oICovOyB9OwogCQk5OEVCMUY5NTEzMTNGRTA1MDBEMEUxRUEgLyogTm90
SW1wbGVtZW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlBMUI2Rjk3MTU4ODY5
QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8q
IEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi87IH07Ci0JCTlBOUNFRjhEMTYzQjNFQTEwMERF
N0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBOUNFRjhCMTYzQjNFQTEwMERFN0VGRSAvKiBF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCAqLzsgfTsKLQkJOUE5Q0VGOEUxNjNCM0VBMTAw
REU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBOUNFRjhDMTYzQjNFQTEwMERFN0VGRSAvKiBF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUIxQUIwN0MxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxQUIwN0IxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwICovOyB9OwogCQk5QjI0REU4RTE1MTk0Qjk1
MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxl
bWVudC5oICovOyB9OwogCQk5QjJEOEE3OTE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMkQ4QTc4MTQ5
OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC01NzM5LDcgKzU3MjksNyBAQAogCQlGRDA2REZBNTEzNEE0
REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDZERkEzMTM0QTRERUYwMDZG
NUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICovOyB9OwogCQlGRDA2REZB
NjEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA2REZBNDEzNEE0REVG
MDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi87IH07CiAJCUZEMTY2
MEE1MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDE2NjBBNDEzNzg3QzZEMDAxRkZBN0Ig
LyogRGVub3JtYWxEaXNhYmxlci5oICovOyB9OwotCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0Rjcg
LyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBl
VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3
IC8qIFNoYXBlVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRDIzQTEyNTEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkQyM0ExMjMxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLmNwcCAqLzsgfTsKIAkJRkQyM0ExMjYxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDIzQTEyNDEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuaCAqLzsgfTsKIAkJRkQyREJGMTIxMkIwNDhBMzAwRUQ5OEM2IC8qIEFj
Y2VsZXJhdGUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkQyREJGMEUxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3
b3JrICovOyB9OwpAQCAtNTg1Niw2ICs1ODQ2LDIwIEBACiAJCUZEMzE2MEMwMTJCMDI3MkEwMEMx
QTM1OSAvKiBGRlRGcmFtZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDMxNjBCQTEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3Bw
ICovOyB9OwogCQlGRDM1OTE4RjEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzU5
MThEMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwICovOyB9OwogCQlG
RDM1OTE5MDEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDM1OTE4RTEzOERCMjIwMDBF
MUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmggKi87IH07CisJCUZENDVBOTRGMTc1RDNGM0Uw
MEMyMUVDOCAvKiBTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQwOEE4N0YxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTAxNzVEM0YzRTAw
QzIxRUM4IC8qIFNoYXBlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkQwOEE4ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTUxMTc1
RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgzMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFw
ZUluc2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRDQ1QTk1MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODcxNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1MzE3NUQzRkI4MDBDMjFFQzggLyog
U2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NTQx
NzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJ
bmZvLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NTUxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRl
SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RDA4QTg4MjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmNwcCAqLzsgfTsKKwkJ
RkQ0NUE5NTYxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODYxNzVEMzkyNjAw
MkNEMzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwICovOyB9OworCQlGRDQ1QTk1NzE3NUQ0MTRD
MDBDMjFFQzggLyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0
NUE5NTgxNzVENDE0QzAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAg
LyogUmVjdGFuZ2xlU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlGRDQ1QTk1OTE3NUQ0MTcxMDBDMjFFQzggLyogUG9seWdvblNoYXBlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdB
MTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuY3BwICovOyB9OworCQlGRDQ1QTk1QTE3
NUQ0MTcxMDBDMjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJl
Y3RhbmdsZVNoYXBlLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NUIxNzVENDFFRTAwQzIxRUM4IC8qIFNo
YXBlSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMDhBODg1MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NUMxNzVENDIw
RDAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODQxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50
ZXJ2YWwuY3BwICovOyB9OwogCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1Mzcz
NTAxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCAqLzsgfTsKIAkJRkQ1MzczNTMxMzdC
NjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1MTEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCAq
LzsgfTsKIAkJRkQ1MzczNTYxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RDUzNzM1NDEzN0I2NTNCMDAwMDhEQ0UgLyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCAq
LzsgfTsKQEAgLTU4NzgsOCArNTg4Miw2IEBACiAJCUZENkVEMkM4MTM2QjhFNjYwMDNDRjA3MiAv
KiBEeW5hbWljc0NvbXByZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZENkVEMkM2MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNz
b3IuaCAqLzsgfTsKIAkJRkQ2RjI1MkMxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDZGMjUyOTEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLmNwcCAqLzsgfTsKIAkJRkQ2RjI1MkQxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkQ2RjI1MkExM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5oICovOyB9OwotCQlGRDc0OEFCRjE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZENzQ4QUJEMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uY3BwICovOyB9OwotCQlGRDc0OEFDMDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRDc0OEFCRTE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkQ3ODY4QjkxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc4NjhC
NzEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLzsgfTsK
IAkJRkQ3ODY4QkExMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3ODY4Qjgx
MzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovOyB9OwogCQlG
RDdGMjk5MTEzRDRDMENCMDBBRDk1MzUgLyogV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDdGMjk4QTEzRDRDMENC
MDBBRDk1MzUgLyogV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgKi87IH07CkBAIC01OTQwLDggKzU5
NDIsNiBAQAogCQlGREIwNTJFMDE1NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjA1
MkRFMTU2MUE0MkMwMEI1MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oICovOyB9OwogCQlG
REIxNzAwNTE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjE3MDAzMTRBMkJB
QjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwICovOyB9OwogCQlGREIxNzAw
NjE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREIxNzAwNDE0QTJCQUIyMDBBMkI1
RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmggKi87IH07Ci0JCUZEQjhEMURBMTZCMEMwRDcw
MDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjhEMUQ5MTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNp
b25TaGFwZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlGREI4RDFFNTE2QjBDQzk3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjhEMURC
MTZCMEMwRjYwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwICovOyB9OwogCQlGREJE
MURGQzE2N0ZFMjdEMDA1MUExMUUgLyogSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREJEMURGQjE2N0ZFMjdE
MDA1MUExMUUgLyogSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgKi87IH07CiAJCUZEQkQ0ODBD
MTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQ0ODBBMTU5QkM2
ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCAqLzsgfTsKIAkJ
RkRCRDQ4MEQxNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQ0ODBC
MTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmggKi87IH07
CkBAIC04MjI4LDE0ICs4MjI4LDYgQEAKIAkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFeHRlbnNpb25zM0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9u
czNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNDE1RjgxRTRBMDBCRkU0QUEgLyog
RXhjbHVzaW9uSW50ZXJ2YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRXhjbHVzaW9uSW50ZXJ2YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2
RTg3OThCNTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uSW50ZXJ2YWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJl
Y3RhbmdsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNp
b25SZWN0YW5nbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNzE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblJlY3RhbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEg
LyogRXhjbHVzaW9uU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhj
bHVzaW9uU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVBRjM0MEQxNjEz
ODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uUG9seWdvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8q
IEZsb2F0NjRBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5Lmlk
bDsgcGF0aCA9IGNhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyog
SlNGbG9hdDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9h
dDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MDYsOCArOTY5OCw2
IEBACiAJCTk4Q0U0MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlBMUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RP
TVN0cmluZ0xpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJOUE5Q0VGOEIxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlBOUNFRjhDMTYz
QjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxQUIwNzkxNjQ4QzY5RDAwNTFGM0YyIC8qIEhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMUFCMDdCMTY0OEM3QzQwMDUx
RjNGMiAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25D
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjI0REU4QzE1MTk0Qjk1
MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTEJESUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
NTgwLDggKzEyNTcwLDIyIEBACiAJCUZEMDBEN0EzMTRBM0Y2MTkwMDczNDAxMSAvKiBTaW5jUmVz
YW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbmNSZXNhbXBsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwNkRGQTMxMzRBNERFRjAwNkY1RDdE
IC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRDA2REZBNDEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRDA4QTg3QTE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHlnb25TaGFwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdCMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29u
U2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seWdvblNoYXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdDMTc1RDM5MjYwMDJDRDM2MCAv
KiBSZWN0YW5nbGVTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWN0YW5nbGVTaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhB
ODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZWN0YW5nbGVTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRDA4QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRDA4QTg3RjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkQwOEE4ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZUluZm8uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRDA4QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4MjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNp
ZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlSW5z
aWRlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgzMTc1RDM5
MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hhcGVJbnNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZEMDhBODg0MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlSW50ZXJ2YWwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4NTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRl
cnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZUludGVydmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg2MTc1RDM5MjYwMDJDRDM2MCAv
KiBTaGFwZU91dHNpZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNoYXBlT3V0c2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RDA4QTg4NzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2Fi
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlbm9ybWFsRGlzYWJsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3
IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRXhjbHVzaW9uU2hhcGVWYWx1ZS5oOyBwYXRoID0gc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0
RjcgLyogU2hhcGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaGFw
ZVZhbHVlLmg7IHBhdGggPSBzdHlsZS9TaGFwZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZEMjNBMTIzMTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZEMjNBMTI0MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDJEQkYwRTEy
QjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9
IEFjY2VsZXJhdGUuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
QWNjZWxlcmF0ZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC0x
Mjc0Miw4ICsxMjc0Niw2IEBACiAJCUZENkYyNTI5MTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkQ2RjI1MkExM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ2RjI1
MkIxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQ3NDhBQkQxNUJGNzRFRDAwNTlDRjBEIC8qIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGRDc0OEFCRTE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDc4NjhCNzEzNkI5
OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAvKiBK
U0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZEN0YyOThBMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhdmVTaGFwZXJEU1BLZXJuZWwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4MDcsOCArMTI4MDksNiBAQAog
CQlGREIwNTJERTE1NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9TdW1taW5nSnVuY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCMTcwMDMxNEEyQkFCMjAwQTJCNUQ5IC8qIE11
bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGREIxNzAwNDE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11bHRpQ2hhbm5lbFJlc2FtcGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGREI4RDFEOTE2QjBDMEQ3MDAzNDBGMTAg
LyogRXhjbHVzaW9uU2hhcGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4Y2x1c2lvblNoYXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGREI4
RDFEQjE2QjBDMEY2MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5mby5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQkQxREZCMTY3RkUyN0QwMDUxQTExRSAvKiBKU09z
Y2lsbGF0b3JOb2RlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGREJENDgwQTE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRC
RDQ4MEIxNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg5MjIsNyArMTg5MjIsNiBA
QAogCQkJCUJDMjI3MkExMEU4MkU4N0MwMEU3Rjk3NSAvKiBDdXJzb3JEYXRhLmggKi8sCiAJCQkJ
QkMyMjcyQUMwRTgyRThGMzAwRTdGOTc1IC8qIEN1cnNvckxpc3QuaCAqLywKIAkJCQlCQzIyNzQ2
RTBFODM2NjQ1MDBFN0Y5NzUgLyogRGF0YVJlZi5oICovLAotCQkJCUZEMUFGMTRFMTY1NkYxMjEw
MEM2RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVlLmggKi8sCiAJCQkJQkM1RUI2OUMwRTgxREFF
QjAwQjI1OTY1IC8qIEZpbGxMYXllci5jcHAgKi8sCiAJCQkJQkM1RUI2OUQwRTgxREFFQjAwQjI1
OTY1IC8qIEZpbGxMYXllci5oICovLAogCQkJCUExMjcwNUMyMTY1NkJENjUwMEMyRTI3QyAvKiBH
cmlkUG9zaXRpb24uaCAqLywKQEAgLTE4OTQwLDYgKzE4OTM5LDcgQEAKIAkJCQlCQzVFQjY2NzBF
ODFDQjcxMDBCMjU5NjUgLyogUmVuZGVyU3R5bGVDb25zdGFudHMuaCAqLywKIAkJCQlCQzVFQjhD
MTBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI4QzIwRTgy
MDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuaCAqLywKKwkJCQlGRDFBRjE0RTE2NTZGMTIxMDBD
NkQ0RjcgLyogU2hhcGVWYWx1ZS5oICovLAogCQkJCUJDNUVCNkEwMEU4MURDNEYwMEIyNTk2NSAv
KiBTdHlsZUJhY2tncm91bmREYXRhLmNwcCAqLywKIAkJCQlCQzVFQjZBMTBFODFEQzRGMDBCMjU5
NjUgLyogU3R5bGVCYWNrZ3JvdW5kRGF0YS5oICovLAogCQkJCUJDNUVCNjdDMEU4MUQ0MjAwMEIy
NTk2NSAvKiBTdHlsZUJveERhdGEuY3BwICovLApAQCAtMTk4NzIsNiArMTk4NzIsNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk0MzkwNDZDMjEyREEyNUNFMDBB
RjgwQTIgLyogbWF0aG1sICovLAorCQkJCUZEMDhBODc5MTc1RDM5MjYwMDJDRDM2MCAvKiBzaGFw
ZXMgKi8sCiAJCQkJQkM4QzhGQUEwRERDRDJGMjAwQjU5MkY0IC8qIHN0eWxlICovLAogCQkJCTA4
OEMyRjc0MTIzOTAwODAwMDNENjVDRSAvKiBzdmcgKi8sCiAJCQkJQThDRkYwNEIwQTE1NEYwOTAw
MEE0MjM0IC8qIEF1dG9UYWJsZUxheW91dC5jcHAgKi8sCkBAIC0xOTg4NSwyMCArMTk4ODYsNiBA
QAogCQkJCTkzOTJGMTRCMEFEMTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAogCQkJ
CUE4Q0ZGNkNBMEExNTYxQ0QwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5jcHAgKi8sCiAJCQkJQThD
RkY2QkQwQTE1NjExODAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmggKi8sCi0JCQkJNkU4Nzk4QjQx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCAqLywKLQkJCQk2RTg3OThC
NTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLywKLQkJCQk2RUFGMzQw
RDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi8sCi0JCQkJNkVBRjM0
MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLywKLQkJCQk2RTg3OThC
NjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCAqLywKLQkJCQk2RTg3
OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8sCi0JCQkJNkU4
Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLywKLQkJCQk2RTg3
OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAqLywKLQkJCQlGREI4RDFE
QjE2QjBDMEY2MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCAqLywKLQkJCQlGREI4
RDFEOTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggKi8sCi0JCQkJRkQ3
NDhBQkQxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgKi8s
Ci0JCQkJRkQ3NDhBQkUxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5oICovLAotCQkJCTlBOUNFRjhCMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvLmNwcCAqLywKLQkJCQk5QTlDRUY4QzE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5oICovLAogCQkJCTMxMzEzRjYzMTQ0M0IzNUUwMDZFMkE5MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMzEzMTNGNjQxNDQzQjM1RTAwNkUy
QTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJQThDRkYwNDgwQTE1NEYwOTAw
MEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwICovLApAQCAtMjA1NTIsNiArMjA1MzksMjcg
QEAKIAkJCXBhdGggPSBvcGVuZ2w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQlGRDA4QTg3OTE3NUQzOTI2MDAyQ0QzNjAgLyogc2hhcGVzICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGRDA4QTg3QTE3NUQzOTI2MDAyQ0QzNjAgLyog
UG9seWdvblNoYXBlLmNwcCAqLywKKwkJCQlGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9s
eWdvblNoYXBlLmggKi8sCisJCQkJRkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3Rhbmds
ZVNoYXBlLmNwcCAqLywKKwkJCQlGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xl
U2hhcGUuaCAqLywKKwkJCQlGRDA4QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICov
LAorCQkJCUZEMDhBODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovLAorCQkJCUZEMDhB
ODgwMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uY3BwICovLAorCQkJCUZEMDhBODgxMTc1
RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uaCAqLywKKwkJCQlGRDA4QTg4MjE3NUQzOTI2MDAy
Q0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmNwcCAqLywKKwkJCQlGRDA4QTg4MzE3NUQzOTI2MDAy
Q0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmggKi8sCisJCQkJRkQwOEE4ODQxNzVEMzkyNjAwMkNE
MzYwIC8qIFNoYXBlSW50ZXJ2YWwuY3BwICovLAorCQkJCUZEMDhBODg1MTc1RDM5MjYwMDJDRDM2
MCAvKiBTaGFwZUludGVydmFsLmggKi8sCisJCQkJRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlT3V0c2lkZUluZm8uY3BwICovLAorCQkJCUZEMDhBODg3MTc1RDM5MjYwMDJDRDM2MCAv
KiBTaGFwZU91dHNpZGVJbmZvLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHNoYXBlczsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUZEMzE1RkEyMTJCMDI1QjEwMEMxQTM1OSAv
KiB3ZWJhdWRpbyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0yMTcxNiwxNCArMjE3MjQsNiBAQAogCQkJCTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBF
eGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2N0NFMEIxNDVBQkMxMzAw
NUU2NERCIC8qIEV4Y2VwdGlvbkhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NjdDRTBD
MTQ1QUJDMTMwMDVFNjREQiAvKiBFeGNlcHRpb25JbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywK
LQkJCQk2RTg3OThCQjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTZFQUYzNDEwMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5
Z29uLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTg3OThCRDE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uUmVjdGFuZ2xlLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTg3OThCRjE1RjgxRTRBMDBC
RkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUZEQjhEMURBMTZC
MEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJ
CUZENzQ4QUMwMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBp
biBIZWFkZXJzICovLAotCQkJCTlBOUNFRjhFMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRDFBRjE1MDE2NTZGMTUxMDBD
NkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTAyNDU3
NTIxNkNFQUEyNzAwMEU1NjcxIC8qIEVYVERyYXdCdWZmZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyOTg3LDYgKzIyOTg3LDcgQEAKIAkJCQk4NDczMEQ5MjEyNDhG
MEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcw
NTk5NzgxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzA1OTk3QTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkQ0NUE5NTcxNzVENDE0QzAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE3NEUyMEExMEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NjhFMThCMEFERDk2MjQwMDQxMjhFMCAvKiBQb3B1
cE1lbnUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCQzEyODc3MEIzM0FBNkQwMEM2OTNENSAvKiBQ
b3B1cE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjMwMjgsNiArMjMwMjksNyBAQAog
CQkJCUE4NEQ4MjdDMTFEMzMzRUQwMDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUZEMzE2MDNDMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFsdGltZUFu
YWx5c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQzNjhFODBDMjI2RTMyMDA1RUZCNUYgLyog
UmVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NTgxNzVENDE0QzAwQzIxRUM4IC8qIFJl
Y3RhbmdsZVNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJFQTNCQjE1ODVDRjU1MDA0RkFB
MjYgLyogUmVmQ291bnRlZFN1cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk4MzFBRTRB
MTU0MjI1QzkwMEZFMjY0NCAvKiBSZWZlcnJlclBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNBQjQxODIxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MzI5OCw2ICsyMzMwMCwxMiBAQAogCQkJCUJDNUVCOEM0MEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFk
b3dEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNkQxNjk2NDEzNDZCNEMxMDAwRUI3NzAgLyog
U2hhZG93Um9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRTgwQTE5ODlDQTAwN0ZCOEM1
IC8qIFNoYWRvd1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk0RjE3NUQzRjNFMDBD
MjFFQzggLyogU2hhcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTUwMTc1RDNGM0UwMEMy
MUVDOCAvKiBTaGFwZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTUxMTc1RDNGM0Uw
MEMyMUVDOCAvKiBTaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTVC
MTc1RDQxRUUwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RDQ1QTk1MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3QjFGMDJGMTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZm
ZXJDaHVua1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZF
NTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MzQyLDYgKzI0MzUwLDEz
IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlGRDQ1QTk1QzE3NUQ0MjBEMDBDMjFFQzgg
LyogU2hhcGVJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1OTE3NUQ0MTcx
MDBDMjFFQzggLyogUG9seWdvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTVB
MTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGRDQ1QTk1MzE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRDQ1QTk1NTE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNp
ZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAv
KiBBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI5QzE2RTEzMDBDMkUy
MDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc2Q0REMkYyMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNDkxNywxMyArMjQ5MzIsNiBAQAogCQkJCTk3M0RDNjNGMTQ1QTk0
MDkwMDI4NDJDMiAvKiBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdDQUNEQjExM0NFODc1QzAwQkJCRTNGIC8qIEV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhBRkRBNjBBRjU4MzYwMDA4Q0M3MDAgLyogRXhj
ZXB0aW9uSGFuZGxlcnMubW0gaW4gU291cmNlcyAqLywKLQkJCQk2RTg3OThCQTE1RjgxRTRBMDBC
RkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkVBRjM0
MEYxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNkU4Nzk4QkMxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk2RTg3OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9u
U2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkRCOEQxRTUxNkIwQ0M5NzAwMzQwRjEwIC8q
IEV4Y2x1c2lvblNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGRDc0OEFCRjE1QkY3
NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTlBOUNFRjhEMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwMjQ1NzUxMTZDRUFBMjcwMDBFNTY3MSAvKiBF
WFREcmF3QnVmZmVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RTY3RDJBNjEyODBFOEE0MDA4
NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0REFC
NUIxMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCmluZGV4IDNhOTRlZjg4YjMxNzJiZWMxYTE2MjAyNDVmZTY3NWU0MzcyMTM3
MTYuLjRmYjQ5ZmUwODc2Mzk3MzViMjAyZGRhMjZiNmRhNjY1OWY4NTI3M2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC02
Niw3ICs2Niw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgorI2lu
Y2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQpA
QCAtMjY5OSwyNCArMjY5OSwyNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydAogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGU6CiAgICAgICAgICAgICBpZiAoIXN0eWxl
LT5zaGFwZUluc2lkZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIGlmIChzdHls
ZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6Ok91dHNpZGUp
CisgICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZh
bHVlOjpPdXRzaWRlKQogICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPdXRzaWRlU2hhcGUpOwotICAgICAgICAgICAgaWYg
KHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6SW1h
Z2UpIHsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IFNo
YXBlVmFsdWU6OkltYWdlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lk
ZSgpLT5pbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUtPnNoYXBlSW5z
aWRlKCktPmltYWdlKCktPmNzc1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0g
RXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5z
aGFwZUluc2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6U2hhcGUpOwogICAgICAgICAgICAg
cmV0dXJuIHZhbHVlRm9yQmFzaWNTaGFwZShzdHlsZS0+c2hhcGVJbnNpZGUoKS0+c2hhcGUoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGU6CiAgICAgICAgICAg
ICBpZiAoIXN0eWxlLT5zaGFwZU91dHNpZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAg
ICAgICBpZiAoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVW
YWx1ZTo6SW1hZ2UpIHsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVPdXRzaWRlKCktPnR5
cGUoKSA9PSBTaGFwZVZhbHVlOjpJbWFnZSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+
c2hhcGVPdXRzaWRlKCktPmltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHls
ZS0+c2hhcGVPdXRzaWRlKCktPmltYWdlKCktPmNzc1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZU91dHNpZGUo
KS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKTsKKyAgICAgICAgICAgIEFT
U0VSVChzdHlsZS0+c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSk7
CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JCYXNpY1NoYXBlKHN0eWxlLT5zaGFwZU91dHNp
ZGUoKS0+c2hhcGUoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCmluZGV4IDY3MmNhNGUxOTU1MjE5NTNkOTBmYjU4
NzQ2YmQ5YThhYWJlYmNkM2UuLjM3MmMxYjNmNDY4MDgxZjU2YzdkNGVhODE0Mzc0MzczNzJiODY1
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCkBAIC0xMjEsNyArMTIx
LDcgQEAgcHVibGljOgogICAgICAgICAvLyBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgY291
bnRlciBuYW1lcyAoYXMgb3Bwb3NlZCB0byBjb3VudGVyIHZhbHVlcykKICAgICAgICAgQ1NTX0NP
VU5URVJfTkFNRSA9IDExMCwKIAotICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIENTUyBF
eGNsdXNpb25zIGRyYWZ0CisgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgQ1NTIFNoYXBl
cyBkcmFmdAogICAgICAgICBDU1NfU0hBUEUgPSAxMTEsCiAKICAgICAgICAgLy8gVXNlZCBieSBi
b3JkZXIgaW1hZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRT
dHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXIuY3BwCmluZGV4IDAwZjBiZTNhNTdiMzkyNjhjMDk4Y2E1ZTNhZjM3YWJiYjc3ZGZkZTAuLmMw
YzM3YjFiMmFmMDA4MDM1NWQ0MjgwNGZjNDBhN2U0ZDNmNTBkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNp
bmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xOTMzLDEwICsxOTMzLDEwIEBAIHB1
YmxpYzoKIH07CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXRlbXBsYXRlIDxFeGNsdXNpb25T
aGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZh
bHVlPiksIEV4Y2x1c2lvblNoYXBlVmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3Mg
QXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlIHsKK3RlbXBsYXRlIDxTaGFwZVZhbHVlKiAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiksIFNoYXBlVmFsdWUqICgqaW5p
dGlhbEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9wZXJ0eVNoYXBlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8RXhj
bHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVl
KTsgfQorICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1Jl
ZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUp
OyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAg
ICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewpAQCAtMTk0NSwyMCArMTk0NSwy
MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgMCk7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAyNTcxOiBMYXlvdXQgZm9yIHRo
ZSB2YWx1ZSAnb3V0c2lkZS1zaGFwZScgaXMgbm90IHlldCBpbXBsZW1lbnRlZAogICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPdXRzaWRl
U2hhcGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
RXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOworICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIFNoYXBlVmFsdWU6OmNyZWF0ZU91
dHNpZGVWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1No
YXBlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hh
cGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVl
KGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsK
ICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5y
ZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0lt
YWdlVmFsdWUoKSkgewotICAgICAgICAgICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNo
YXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOworICAgICAgICAgICAgUmVmUHRyPFNoYXBl
VmFsdWU+IHNoYXBlID0gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOwogICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgfQogCiAgICAg
fQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewotICAg
ICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxF
eGNsdXNpb25TaGFwZVZhbHVlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8RXhjbHVzaW9u
U2hhcGVWYWx1ZT4sIHNldHRlckZ1bmN0aW9uLCBFeGNsdXNpb25TaGFwZVZhbHVlKiwgaW5pdGlh
bEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFu
ZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTaGFwZVZhbHVlKiwgZ2V0dGVyRnVuY3Rp
b24sIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4sIHNldHRlckZ1bmN0aW9uLCBTaGFwZVZhbHVlKiwg
aW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwogICAgICAgICByZXR1cm4gUHJvcGVy
dHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0
aW9uKCksICZhcHBseVZhbHVlKTsKICAgICB9CiB9OwpAQCAtMjM0Myw4ICsyMzQzLDggQEAgRGVw
cmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hh
cGVNYXJnaW4sIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwg
JlJlbmRlclN0eWxlOjpzZXRTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVN
YXJnaW4+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdFNoYXBlUGFkZGluZywgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6
OnNoYXBlUGFkZGluZywgJlJlbmRlclN0eWxlOjpzZXRTaGFwZVBhZGRpbmcsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbFNoYXBlUGFkZGluZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsIEFwcGx5UHJvcGVydHlFeGNs
dXNpb25TaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNo
YXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZT46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRz
aWRlLCBBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZU91dHNp
ZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxT
aGFwZU91dHNpZGU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCBBcHBseVByb3BlcnR5U2hhcGU8JlJlbmRlclN0
eWxlOjpzaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSwgJlJlbmRlclN0
eWxlOjppbml0aWFsU2hhcGVJbnNpZGU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZSwgQXBwbHlQcm9wZXJ0eVNo
YXBlPCZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlT3V0
c2lkZSwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVPdXRzaWRlPjo6Y3JlYXRlSGFuZGxlcigp
KTsKICNlbmRpZgogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdoaXRlU3BhY2Us
IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVXaGl0ZVNwYWNlLCAmUmVuZGVyU3R5bGU6OndoaXRlU3Bh
Y2UsIEVXaGl0ZVNwYWNlLCAmUmVuZGVyU3R5bGU6OnNldFdoaXRlU3BhY2UsIEVXaGl0ZVNwYWNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxXaGl0ZVNwYWNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXaWRvd3MsIEFwcGx5UHJvcGVydHlBdXRv
PHNob3J0LCAmUmVuZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MsICZS
ZW5kZXJTdHlsZTo6aGFzQXV0b1dpZG93cywgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvV2lkb3dz
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCA1MjQ0MDAzY2QxYzA5Nzc5Njll
YzBlZTE5ZDVkMTQ1NjUwYTFlZjA5Li5mY2E2MjZmODBkNjZhMTJiMTI2YTRhODE2NTVmYmZmYzRm
MmMyMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NT
UHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC0xNDQsMTAgKzE0NCwxMCBAQCBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25C
YXNlKiwgQ2xpcAogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1zdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJh
c2UqLCBFeGNsdXNpb25TaGFwZVZhbHVlKiBmcm9tLCBFeGNsdXNpb25TaGFwZVZhbHVlKiB0bywg
ZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGJs
ZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1
ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAgICAvLyBGSVhNRSBCdWcgMTAyNzIzOiBTaGFw
ZS1pbnNpZGUgc2hvdWxkIGJlIGFibGUgdG8gYW5pbWF0ZSBhIHZhbHVlIG9mICdvdXRzaWRlLXNo
YXBlJyB3aGVuIHNoYXBlLW91dHNpZGUgaXMgc2V0IHRvIGEgQmFzaWNTaGFwZQotICAgIGlmIChm
cm9tLT50eXBlKCkgIT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAh
PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSkKKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IFNo
YXBlVmFsdWU6OlNoYXBlIHx8IHRvLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUpCiAgICAg
ICAgIHJldHVybiB0bzsKIAogICAgIGNvbnN0IEJhc2ljU2hhcGUqIGZyb21TaGFwZSA9IGZyb20t
PnNoYXBlKCk7CkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEV4
Y2x1c2lvblNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgRXgKICAg
ICBpZiAoIWZyb21TaGFwZS0+Y2FuQmxlbmQodG9TaGFwZSkpCiAgICAgICAgIHJldHVybiB0bzsK
IAotICAgIHJldHVybiBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKHRvU2hh
cGUtPmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZSh0b1NoYXBlLT5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7CiB9
CiAjZW5kaWYKIApAQCAtNDA1LDEwICs0MDUsMTAgQEAgcHVibGljOgogfTsKIAogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRXhjbHVzaW9uU2hhcGUgOiBwdWJs
aWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxFeGNsdXNpb25TaGFwZVZhbHVlPiB7CitjbGFz
cyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVy
PFNoYXBlVmFsdWU+IHsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJFeGNsdXNpb25TaGFw
ZShDU1NQcm9wZXJ0eUlEIHByb3AsIEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFBhc3NSZWZQdHI8
RXhjbHVzaW9uU2hhcGVWYWx1ZT4pKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBw
ZXI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgUHJvcGVy
dHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShQYXNzUmVm
UHRyPFNoYXBlVmFsdWU+KSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNo
YXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQogICAgIHsKICAgICB9CiB9OwpAQCAtMTE2
NSw3ICsxMTY1LDcgQEAgdm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6ZW5zdXJlUHJvcGVydHlN
YXAoKQogICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckNs
aXBQYXRoKENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Q2xpcFBhdGgpKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckV4Y2x1c2lv
blNoYXBlKENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVJ
bnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUpKTsKKyAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eVdlYmtpdFNo
YXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNo
YXBlSW5zaWRlKSk7CiAjZW5kaWYKIAogICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxl
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZp
c2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29s
dW1uUnVsZUNvbG9yKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uSW50ZXJ2YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbklu
dGVydmFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUwZWY3YTk4YmFhNjgx
MDlhODg5MTk1OGFiOWM5MDE1NjNjODdjYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2
YWwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK
LSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uSW50ZXJ2YWwuaCIKLQotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEludGVydmFs
WDFDb21wYXJhdG9yIHsKLSAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IEV4Y2x1c2lvbkludGVy
dmFsJiBpMSwgY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGkyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGkxLngxIDwgaTIueDE7Ci0gICAgfQotfTsKLQotYm9vbCBFeGNsdXNpb25JbnRl
cnZhbDo6aW50ZXJzZWN0KGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpLCBFeGNsdXNpb25JbnRl
cnZhbCYgcnYpIGNvbnN0Ci17Ci0gICAgaWYgKHgyIDwgaS54MSB8fCB4MSA+IGkueDIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBydi54MSA9IHN0ZDo6bWF4KHgxLCBpLngxKTsKLSAgICBy
di54MiA9IHN0ZDo6bWluKHgyLCBpLngyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBz
b3J0RXhjbHVzaW9uSW50ZXJ2YWxzKFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYpCi17Ci0g
ICAgc3RkOjpzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7
Ci19Ci0KLXZvaWQgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0
b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiBydikKLXsKLSAgICBpZiAoIXYxLnNpemUoKSkKLSAgICAg
ICAgcnYuYXBwZW5kUmFuZ2UodjIuYmVnaW4oKSwgdjIuZW5kKCkpOwotICAgIGVsc2UgaWYgKCF2
Mi5zaXplKCkpCi0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB2KHYxLnNpemUo
KSArIHYyLnNpemUoKSk7Ci0gICAgICAgIEV4Y2x1c2lvbkludGVydmFsKiBpbnRlcnZhbCA9IDA7
Ci0KLSAgICAgICAgc3RkOjptZXJnZSh2MS5iZWdpbigpLCB2MS5lbmQoKSwgdjIuYmVnaW4oKSwg
djIuZW5kKCksIHYuYmVnaW4oKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7Ci0KLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo
IWludGVydmFsKQotICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07Ci0gICAgICAgICAg
ICBlbHNlIGlmICh2W2ldLngxID49IGludGVydmFsLT54MSAmJiB2W2ldLngxIDw9IGludGVydmFs
LT54MikgLy8gRklYTUU6IDFzdCA8PSB0ZXN0IG5vdCBuZWVkZWQ/Ci0gICAgICAgICAgICAgICAg
aW50ZXJ2YWwtPngyID0gc3RkOjptYXgoaW50ZXJ2YWwtPngyLCB2W2ldLngyKTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOwotICAgICAg
ICAgICAgICAgIGludGVydmFsID0gJnZbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoaW50ZXJ2YWwpCi0gICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsK
LSAgICB9Ci19Ci0KLXZvaWQgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiB2MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcnYpCi17Ci0gICAgc2l6ZV90IHYxU2l6
ZSA9IHYxLnNpemUoKTsKLSAgICBzaXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOwotCi0gICAgaWYg
KCF2MVNpemUgfHwgIXYyU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjbHVzaW9uSW50
ZXJ2YWwgaW50ZXJ2YWw7Ci0gICAgYm9vbCBvdmVybGFwID0gZmFsc2U7Ci0gICAgc2l6ZV90IGkx
ID0gMDsKLSAgICBzaXplX3QgaTIgPSAwOwotCi0gICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGky
IDwgdjJTaXplKSB7Ci0gICAgICAgIEV4Y2x1c2lvbkludGVydmFsIHYxMjsKLSAgICAgICAgaWYg
KHYxW2kxXS5pbnRlcnNlY3QodjJbaTJdLCB2MTIpKSB7Ci0gICAgICAgICAgICBpZiAoIW92ZXJs
YXAgfHwgIXYxMi5pbnRlcnNlY3QoaW50ZXJ2YWwsIGludGVydmFsKSkgewotICAgICAgICAgICAg
ICAgIGlmIChvdmVybGFwKQotICAgICAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwp
OwotICAgICAgICAgICAgICAgIGludGVydmFsID0gdjEyOwotICAgICAgICAgICAgICAgIG92ZXJs
YXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHYxW2kxXS54MiA8IHYy
W2kyXS54MikKLSAgICAgICAgICAgICAgICBpMSsrOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGkyKys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAob3Zlcmxh
cCkKLSAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOwotICAgICAgICAgICAgb3Zl
cmxhcCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHYxW2kxXS54MSA8IHYyW2kyXS54MSkKLSAg
ICAgICAgICAgICAgICBpMSsrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGky
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAob3ZlcmxhcCkKLSAgICAgICAgcnYuYXBw
ZW5kKGludGVydmFsKTsKLX0KLQotdm9pZCBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb25z
dCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiYgdjIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJ2KQotewotICAgIHNpemVf
dCB2MVNpemUgPSB2MS5zaXplKCk7Ci0gICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKLQot
ICAgIGlmICghdjFTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXYyU2l6ZSkKLSAg
ICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBzaXplX3QgaTEgPSAwLCBpMiA9IDA7Ci0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYx
LmJlZ2luKCksIHYxLmVuZCgpKTsKLQotICAgICAgICB3aGlsZSAoaTEgPCBydi5zaXplKCkgJiYg
aTIgPCB2MlNpemUpIHsKLSAgICAgICAgICAgIEV4Y2x1c2lvbkludGVydmFsJiBpbnRlcnZhbDEg
PSBydltpMV07Ci0gICAgICAgICAgICBjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYgaW50ZXJ2YWwy
ID0gdjJbaTJdOwotCi0gICAgICAgICAgICBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54
MSAmJiBpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwxLngyKQotICAgICAgICAgICAgICAgIHJ2LnJl
bW92ZShpMSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEu
eDEpCi0gICAgICAgICAgICAgICAgaTIgKz0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGludGVy
dmFsMi54MSA+IGludGVydmFsMS54MikKLSAgICAgICAgICAgICAgICBpMSArPSAxOwotICAgICAg
ICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54
MiA8IGludGVydmFsMS54MikgewotICAgICAgICAgICAgICAgIHJ2Lmluc2VydChpMSwgRXhjbHVz
aW9uSW50ZXJ2YWwoaW50ZXJ2YWwxLngxLCBpbnRlcnZhbDIueDEpKTsKLSAgICAgICAgICAgICAg
ICBpbnRlcnZhbDEueDEgPSBpbnRlcnZhbDIueDI7Ci0gICAgICAgICAgICAgICAgaTIgKz0gMTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSkgewot
ICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54MjsKLSAgICAgICAgICAg
ICAgICBpMiArPSAxOwotICAgICAgICAgICAgfSBlbHNlICB7IC8vIChpbnRlcnZhbDIueDIgPj0g
aW50ZXJ2YWwxLngyKQotICAgICAgICAgICAgICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54
MTsKLSAgICAgICAgICAgICAgICBpMSArPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25JbnRlcnZhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
ZDMxZmViMTgxMTNkZThjMWU0MzQxZTAxMDM3MDhiNzc0Y2EzNTFmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25JbnRlcnZhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
LSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgRXhjbHVzaW9uSW50ZXJ2YWxfaAotI2RlZmluZSBFeGNsdXNpb25JbnRlcnZhbF9o
Ci0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Ry
dWN0IEV4Y2x1c2lvbkludGVydmFsIHsKLXB1YmxpYzoKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9h
dCB4MjsKLQotICAgIEV4Y2x1c2lvbkludGVydmFsKGZsb2F0IHgxID0gMCwgZmxvYXQgeDIgPSAw
KQotICAgICAgICA6IHgxKHgxKQotICAgICAgICAsIHgyKHgyKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBib29sIGludGVyc2VjdChjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYsIEV4Y2x1c2lvbkludGVy
dmFsJikgY29uc3Q7Ci19OwotCi12b2lkIHNvcnRFeGNsdXNpb25JbnRlcnZhbHMoVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYpOwotdm9pZCBtZXJnZUV4Y2x1c2lvbkludGVydmFscyhjb25zdCBW
ZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFs
PiYsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKTsKLXZvaWQgaW50ZXJzZWN0RXhjbHVzaW9u
SW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+JiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpOwotdm9pZCBz
dWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4mKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9u
SW50ZXJ2YWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blBvbHlnb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWY5NzhmMzBiNThlMjE0Yjg0YTlk
M2QxZjhkNDA4N2FlMGIyYTI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDUxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkV4Y2x1c2lvblBvbHlnb24uaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlw
ZSB7Ci0gICAgTm9ybWFsLAotICAgIFZlcnRleE1pblksCi0gICAgVmVydGV4TWF4WSwKLSAgICBW
ZXJ0ZXhZQm90aAotfTsKLQotc3RydWN0IEVkZ2VJbnRlcnNlY3Rpb24gewotICAgIGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UqIGVkZ2U7Ci0gICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICBFZGdlSW50
ZXJzZWN0aW9uVHlwZSB0eXBlOwotfTsKLQotc3RhdGljIGlubGluZSBmbG9hdCBsZWZ0U2lkZShj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gKChwb2ludC54KCkgLSB2ZXJ0ZXgx
LngoKSkgKiAodmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKSkpIC0gKCh2ZXJ0ZXgyLngoKSAtIHZl
cnRleDEueCgpKSAqIChwb2ludC55KCkgLSB2ZXJ0ZXgxLnkoKSkpOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNSZWZsZXhWZXJ0ZXgoY29uc3QgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiBuZXh0VmVydGV4KQotewot
ICAgIHJldHVybiBsZWZ0U2lkZShwcmV2VmVydGV4LCBuZXh0VmVydGV4LCB2ZXJ0ZXgpIDwgMDsK
LX0KLQotc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSogZWRnZVBvaW50ZXIsIGZsb2F0IHksIEVkZ2VJbnRlcnNlY3Rpb24mIHJlc3VsdCkKLXsK
LSAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOwotCi0gICAg
aWYgKGVkZ2UubWluWSgpID4geSB8fCBlZGdlLm1heFkoKSA8IHkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsK
LSAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7Ci0gICAgZmxv
YXQgZHkgPSB2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpOwotCi0gICAgZmxvYXQgaW50ZXJzZWN0
aW9uWDsKLSAgICBFZGdlSW50ZXJzZWN0aW9uVHlwZSBpbnRlcnNlY3Rpb25UeXBlOwotCi0gICAg
aWYgKCFkeSkgewotICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4WUJvdGg7Ci0gICAg
ICAgIGludGVyc2VjdGlvblggPSBlZGdlLm1pblgoKTsKLSAgICB9IGVsc2UgaWYgKHkgPT0gZWRn
ZS5taW5ZKCkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1pblk7Ci0gICAg
ICAgIGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPCB2ZXJ0ZXgyLnkoKSkgPyB2ZXJ0ZXgx
LngoKSA6IHZlcnRleDIueCgpOwotICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1heFkoKSkgewot
ICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWF4WTsKLSAgICAgICAgaW50ZXJzZWN0
aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA+IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4
Mi54KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IE5vcm1hbDsK
LSAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICgoeSAtIHZlcnRleDEueSgpKSAqICh2ZXJ0ZXgyLngo
KSAtIHZlcnRleDEueCgpKSAvIGR5KSArIHZlcnRleDEueCgpOwotICAgIH0KLQotICAgIHJlc3Vs
dC5lZGdlID0gZWRnZVBvaW50ZXI7Ci0gICAgcmVzdWx0LnR5cGUgPSBpbnRlcnNlY3Rpb25UeXBl
OwotICAgIHJlc3VsdC5wb2ludC5zZXQoaW50ZXJzZWN0aW9uWCwgeSk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFNpemUgaW53YXJkRWRnZU5vcm1hbChjb25z
dCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlKQotewotICAgIEZsb2F0U2l6ZSBlZGdlRGVsdGEgPSBl
ZGdlLnZlcnRleDIoKSAtIGVkZ2UudmVydGV4MSgpOwotICAgIGlmICghZWRnZURlbHRhLndpZHRo
KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKGVkZ2VEZWx0YS5oZWlnaHQoKSA+IDAgPyAt
MSA6IDEpLCAwKTsKLSAgICBpZiAoIWVkZ2VEZWx0YS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
IEZsb2F0U2l6ZSgwLCAoZWRnZURlbHRhLndpZHRoKCkgPiAwID8gMSA6IC0xKSk7Ci0gICAgZmxv
YXQgZWRnZUxlbmd0aCA9IGVkZ2VEZWx0YS5kaWFnb25hbExlbmd0aCgpOwotICAgIHJldHVybiBG
bG9hdFNpemUoLWVkZ2VEZWx0YS5oZWlnaHQoKSAvIGVkZ2VMZW5ndGgsIGVkZ2VEZWx0YS53aWR0
aCgpIC8gZWRnZUxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIG91dHdhcmRF
ZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UpCi17Ci0gICAgcmV0dXJuIC1p
bndhcmRFZGdlTm9ybWFsKGVkZ2UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kQXJj
KFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGFyY0NlbnRl
ciwgZmxvYXQgYXJjUmFkaXVzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydEFyY1ZlcnRleCwgY29u
c3QgRmxvYXRQb2ludCYgZW5kQXJjVmVydGV4LCBib29sIHBhZGRpbmcpCi17Ci0gICAgZmxvYXQg
c3RhcnRBbmdsZSA9IGF0YW4yKHN0YXJ0QXJjVmVydGV4LnkoKSAtIGFyY0NlbnRlci55KCksIHN0
YXJ0QXJjVmVydGV4LngoKSAtIGFyY0NlbnRlci54KCkpOwotICAgIGZsb2F0IGVuZEFuZ2xlID0g
YXRhbjIoZW5kQXJjVmVydGV4LnkoKSAtIGFyY0NlbnRlci55KCksIGVuZEFyY1ZlcnRleC54KCkg
LSBhcmNDZW50ZXIueCgpKTsKLSAgICBjb25zdCBmbG9hdCB0d29QSSA9IHBpRmxvYXQgKiAyOwot
ICAgIGlmIChzdGFydEFuZ2xlIDwgMCkKLSAgICAgICAgc3RhcnRBbmdsZSArPSB0d29QSTsKLSAg
ICBpZiAoZW5kQW5nbGUgPCAwKQotICAgICAgICBlbmRBbmdsZSArPSB0d29QSTsKLSAgICBmbG9h
dCBhbmdsZSA9IChzdGFydEFuZ2xlID4gZW5kQW5nbGUpID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmds
ZSkgOiAoc3RhcnRBbmdsZSArIHR3b1BJIC0gZW5kQW5nbGUpOwotICAgIGNvbnN0IGZsb2F0IGFy
Y1NlZ21lbnRDb3VudCA9IDY7IC8vIEFuIGV2ZW4gbnVtYmVyIHNvIHRoYXQgb25lIGFyYyB2ZXJ0
ZXggd2lsbCBiZSBlYWN0bHkgYXJjUmFkaXVzIGZyb20gYXJjQ2VudGVyLgotICAgIGZsb2F0IGFy
Y1NlZ21lbnRBbmdsZSA9ICAoKHBhZGRpbmcpID8gLWFuZ2xlIDogdHdvUEkgLSBhbmdsZSkgLyBh
cmNTZWdtZW50Q291bnQ7Ci0KLSAgICB2ZXJ0aWNlcy5hcHBlbmQoc3RhcnRBcmNWZXJ0ZXgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcmNTZWdtZW50Q291bnQ7ICsraSkgewotICAg
ICAgICBmbG9hdCBhbmdsZSA9IHN0YXJ0QW5nbGUgKyBhcmNTZWdtZW50QW5nbGUgKiBpOwotICAg
ICAgICB2ZXJ0aWNlcy5hcHBlbmQoYXJjQ2VudGVyICsgRmxvYXRQb2ludChjb3MoYW5nbGUpICog
YXJjUmFkaXVzLCBzaW4oYW5nbGUpICogYXJjUmFkaXVzKSk7Ci0gICAgfQotICAgIHZlcnRpY2Vz
LmFwcGVuZChlbmRBcmNWZXJ0ZXgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc25hcFZlcnRp
Y2VzVG9MYXlvdXRVbml0R3JpZChWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5zaXplKCk7ICsraSkKLSAgICAgICAg
dmVydGljZXNbaV0uc2V0KExheW91dFVuaXQodmVydGljZXNbaV0ueCgpKS50b0Zsb2F0KCksIExh
eW91dFVuaXQodmVydGljZXNbaV0ueSgpKS50b0Zsb2F0KCkpOwotfQotCi1zdGF0aWMgaW5saW5l
IFBhc3NPd25QdHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hhcGVQYWRkaW5nQm91bmRzKGNvbnN0
IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgcGFkZGluZywgV2luZFJ1bGUgZmlsbFJ1bGUp
Ci17Ci0gICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHBhZGRlZFZlcnRpY2VzID0gYWRv
cHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50PigpKTsKLSAgICBGbG9hdFBvaW50IGludGVyc2Vj
dGlvbjsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51bWJlck9mRWRn
ZXMoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0g
cG9seWdvbi5lZGdlQXQoaSk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZF
ZGdlID0gdGhpc0VkZ2UucHJldmlvdXNFZGdlKCk7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdl
IHRoaXNPZmZzZXRFZGdlKHRoaXNFZGdlLCBpbndhcmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIHBh
ZGRpbmcpOwotICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShwcmV2RWRn
ZSwgaW53YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkgKiBwYWRkaW5nKTsKLQotICAgICAgICBpZiAo
cHJldk9mZnNldEVkZ2UuaW50ZXJzZWN0aW9uKHRoaXNPZmZzZXRFZGdlLCBpbnRlcnNlY3Rpb24p
KQotICAgICAgICAgICAgcGFkZGVkVmVydGljZXMtPmFwcGVuZChpbnRlcnNlY3Rpb24pOwotICAg
ICAgICBlbHNlIGlmIChpc1JlZmxleFZlcnRleChwcmV2RWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdl
LnZlcnRleDEoKSwgdGhpc0VkZ2UudmVydGV4MigpKSkKLSAgICAgICAgICAgIGFwcGVuZEFyYygq
cGFkZGVkVmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgcGFkZGluZywgcHJldk9mZnNldEVk
Z2UudmVydGV4MigpLCB0aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgxKCksIHRydWUpOwotICAgIH0KLQot
ICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKnBhZGRlZFZlcnRpY2VzKTsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbihwYWRkZWRWZXJ0aWNlcy5yZWxlYXNlKCks
IGZpbGxSdWxlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUGFzc093blB0cjxGbG9hdFBvbHlnb24+
IGNvbXB1dGVTaGFwZU1hcmdpbkJvdW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZs
b2F0IG1hcmdpbiwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgT3duUHRyPFZlY3RvcjxGbG9h
dFBvaW50PiA+IG1hcmdpblZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50
PigpKTsKLSAgICBGbG9hdFBvaW50IGludGVyc2VjdGlvbjsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwb2x5Z29uLm51bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7Ci0gICAgICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlvdXNFZGdl
KCk7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNFZGdlLCBv
dXR3YXJkRWRnZU5vcm1hbCh0aGlzRWRnZSkgKiBtYXJnaW4pOwotICAgICAgICBPZmZzZXRQb2x5
Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShwcmV2RWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwocHJldkVk
Z2UpICogbWFyZ2luKTsKLQotICAgICAgICBpZiAocHJldk9mZnNldEVkZ2UuaW50ZXJzZWN0aW9u
KHRoaXNPZmZzZXRFZGdlLCBpbnRlcnNlY3Rpb24pKQotICAgICAgICAgICAgbWFyZ2luVmVydGlj
ZXMtPmFwcGVuZChpbnRlcnNlY3Rpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBl
bmRBcmMoKm1hcmdpblZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIG1hcmdpbiwgcHJldk9m
ZnNldEVkZ2UudmVydGV4MigpLCB0aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgxKCksIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCptYXJnaW5WZXJ0aWNlcyk7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24obWFyZ2luVmVydGljZXMucmVs
ZWFzZSgpLCBmaWxsUnVsZSkpOwotfQotCi1jb25zdCBGbG9hdFBvbHlnb24mIEV4Y2x1c2lvblBv
bHlnb246OnNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNoYXBlUGFk
ZGluZygpID49IDApOwotICAgIGlmICghc2hhcGVQYWRkaW5nKCkpCi0gICAgICAgIHJldHVybiBt
X3BvbHlnb247Ci0KLSAgICBpZiAoIW1fcGFkZGluZ0JvdW5kcykKLSAgICAgICAgbV9wYWRkaW5n
Qm91bmRzID0gY29tcHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyhtX3BvbHlnb24sIHNoYXBlUGFkZGlu
ZygpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7Ci0KLSAgICByZXR1cm4gKm1fcGFkZGluZ0JvdW5k
czsKLX0KLQotY29uc3QgRmxvYXRQb2x5Z29uJiBFeGNsdXNpb25Qb2x5Z29uOjpzaGFwZU1hcmdp
bkJvdW5kcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNoYXBlTWFyZ2luKCkgPj0gMCk7Ci0gICAg
aWYgKCFzaGFwZU1hcmdpbigpKQotICAgICAgICByZXR1cm4gbV9wb2x5Z29uOwotCi0gICAgaWYg
KCFtX21hcmdpbkJvdW5kcykKLSAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21wdXRlU2hhcGVN
YXJnaW5Cb3VuZHMobV9wb2x5Z29uLCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24uZmlsbFJ1bGUo
KSk7Ci0KLSAgICByZXR1cm4gKm1fbWFyZ2luQm91bmRzOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgZ2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMoY29uc3QgRWRnZUludGVyc2VjdGlvbiYg
aW50ZXJzZWN0aW9uLCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBGbG9hdFBvaW50JiB0aGlzVmVy
dGV4LCBGbG9hdFBvaW50JiBuZXh0VmVydGV4KQotewotICAgIGlmIChpbnRlcnNlY3Rpb24udHlw
ZSAhPSBWZXJ0ZXhNaW5ZICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1heFkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChpbnRlcnNlY3Rpb24uZWRnZSAmJiBpbnRl
cnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHln
b24gPSAqKGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOwotICAgIGNvbnN0IEZsb2F0UG9s
eWdvbkVkZ2UmIHRoaXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7Ci0KLSAgICBpZiAoKGlu
dGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkg
PCB0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpKSkKLSAgICAgICAgfHwgKGludGVyc2VjdGlvbi50eXBl
ID09IFZlcnRleE1heFkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlzRWRnZS52ZXJ0
ZXgyKCkueSgpKSkpIHsKLSAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhp
c0VkZ2UucHJldmlvdXNFZGdlKCkudmVydGV4SW5kZXgxKCkpOwotICAgICAgICB0aGlzVmVydGV4
ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7Ci0gICAgICAgIG5l
eHRWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRn
ZS52ZXJ0ZXhJbmRleDEoKSk7Ci0gICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0
KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKLSAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24u
dmVydGV4QXQodGhpc0VkZ2UubmV4dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhcHBlbmRJbnRlcnZhbFgo
ZmxvYXQgeCwgYm9vbCBpbnNpZGUsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkK
LXsKLSAgICBpZiAoIWluc2lkZSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRl
cnZhbCh4KSk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUoKSAtIDFdLngy
ID0geDsKLQotICAgIHJldHVybiAhaW5zaWRlOwotfQotCi1zdGF0aWMgYm9vbCBjb21wYXJlRWRn
ZUludGVyc2VjdGlvblgoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMSwgY29u
c3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMikKLXsKLSAgICBmbG9hdCB4MSA9IGlu
dGVyc2VjdGlvbjEucG9pbnQueCgpOwotICAgIGZsb2F0IHgyID0gaW50ZXJzZWN0aW9uMi5wb2lu
dC54KCk7Ci0gICAgcmV0dXJuICh4MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5cGUgPCBpbnRl
cnNlY3Rpb24yLnR5cGUgOiB4MSA8IHgyOwotfQotCi1zdGF0aWMgdm9pZCBjb21wdXRlWEludGVy
c2VjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWlu
WSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQotewotICAgIFZlY3Rvcjxjb25z
dCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7Ci0gICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5n
RWRnZXMoeSwgeSwgZWRnZXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8RWRnZUlu
dGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKLSAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2Vj
dGlvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rp
b24pICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQotICAgICAgICAgICAgaW50
ZXJzZWN0aW9ucy5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAoaW50ZXJz
ZWN0aW9ucy5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnNvcnQoaW50
ZXJzZWN0aW9ucy5iZWdpbigpLCBpbnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJl
RWRnZUludGVyc2VjdGlvblgpOwotCi0gICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGludCB3
aW5kQ291bnQgPSAwOwotICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7Ci0KLSAgICB3aGlsZSAoaW5k
ZXggPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgewotICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0
aW9uJiB0aGlzSW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleF07Ci0gICAgICAgIGlm
IChpbmRleCArIDEgPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgewotICAgICAgICAgICAgY29uc3Qg
RWRnZUludGVyc2VjdGlvbiYgbmV4dEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXgg
KyAxXTsKLSAgICAgICAgICAgIGlmICgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4
dEludGVyc2VjdGlvbi5wb2ludC54KCkpICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVy
dGV4TWluWSB8fCB0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24u
dHlwZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlv
bnMgd2hvc2UgdHlwZXMgYXJlIFZlcnRleE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxW
ZXJ0ZXhNaW5ZLgotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50
ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBhcmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRl
eE1heFksVmVydGV4TWluWSB3aXRoIG9uZSBpbnRlcnNlY3Rpb24uCi0gICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0ludGVyc2VjdGlvbi5lZGdlOwotICAgICAgICBib29sIGV2
ZW5PZGRDcm9zc2luZyA9ICF3aW5kQ291bnQ7Ci0KLSAgICAgICAgaWYgKHBvbHlnb24uZmlsbFJ1
bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsKLSAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0Vk
Z2UudmVydGV4MigpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDEoKS55KCkpID8gMSA6IC0xOwotICAg
ICAgICAgICAgZXZlbk9kZENyb3NzaW5nID0gZXZlbk9kZENyb3NzaW5nIHx8ICF3aW5kQ291bnQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXZlbk9kZENyb3NzaW5nKSB7Ci0gICAgICAgICAg
ICBib29sIGVkZ2VDcm9zc2luZyA9IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWw7Ci0g
ICAgICAgICAgICBpZiAoIWVkZ2VDcm9zc2luZykgewotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcHJldlZlcnRleDsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHRoaXNWZXJ0ZXg7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRQb2ludCBuZXh0VmVydGV4OwotCi0gICAgICAgICAgICAgICAg
aWYgKGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZW
ZXJ0ZXgsIHRoaXNWZXJ0ZXgsIG5leHRWZXJ0ZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChuZXh0VmVydGV4LnkoKSA9PSB5KQotICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3Nz
aW5nID0gKGlzTWluWSkgPyBwcmV2VmVydGV4LnkoKSA+IHkgOiBwcmV2VmVydGV4LnkoKSA8IHk7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByZXZWZXJ0ZXgueSgpID09IHkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IG5leHRWZXJ0ZXgu
eSgpID4geSA6IG5leHRWZXJ0ZXgueSgpIDwgeTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZWRnZUNyb3NzaW5nKQotICAg
ICAgICAgICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlzSW50ZXJzZWN0aW9uLnBv
aW50LngoKSwgaW5zaWRlLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgKytpbmRleDsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlv
bnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSo+IGVkZ2VzOwotICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHkx
LCB5MiwgZWRnZXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFZGdlSW50ZXJzZWN0aW9uIGlu
dGVyc2VjdGlvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSAqZWRnZSA9IGVkZ2VzW2ldOwot
ICAgICAgICBmbG9hdCB4MTsKLSAgICAgICAgZmxvYXQgeDI7Ci0KLSAgICAgICAgaWYgKGVkZ2Ut
Pm1pblkoKSA8IHkxKSB7Ci0gICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5
MSwgaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLnBvaW50Lngo
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0ZXgxKCkueSgp
IDwgZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVy
dGV4MigpLngoKTsKLQotICAgICAgICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKLSAgICAgICAg
ICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOwotICAgICAg
ICAgICAgeDIgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHgyID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/
IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOwotCi0gICAgICAgIGlm
ICh4MSA+IHgyKQotICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7Ci0KLSAgICAgICAgaWYg
KHgyID4geDEpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgx
LCB4MikpOwotICAgIH0KLQotICAgIHNvcnRFeGNsdXNpb25JbnRlcnZhbHMocmVzdWx0KTsKLX0K
LQotdm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3Vs
dCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZU1hcmdp
bkJvdW5kcygpOwotICAgIGlmIChwb2x5Z29uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCAr
IGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVy
dmFscywgeTJYSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5
MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdv
biwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiBtZXJnZWRJbnRlcnZhbHM7Ci0gICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50
ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIG1lcmdlZEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRn
ZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOwotCi0gICAgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKLSAgICBtZXJnZUV4Y2x1
c2lvbkludGVydmFscyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50
ZXJ2YWxzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZEludGVydmFs
cy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGV4
Y2x1ZGVkSW50ZXJ2YWxzW2ldOwotICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGlu
dGVydmFsLngxLCBpbnRlcnZhbC54MikpOwotICAgIH0KLX0KLQotdm9pZCBFeGNsdXNpb25Qb2x5
Z29uOjpnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25z
dCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAo
cG9seWdvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9n
aWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0g
ICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsK
LSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFs
cyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50
ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gY29tbW9uSW50ZXJ2YWxz
OwotICAgIGludGVyc2VjdEV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVy
dmFscywgY29tbW9uSW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4g
ZWRnZUludGVydmFsczsKLSAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBv
bHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IGluY2x1ZGVkSW50ZXJ2YWxzOwotICAgIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxz
KGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluY2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsID0gaW5jbHVkZWRJbnRlcnZh
bHNbaV07Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGlu
dGVydmFsLngyKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0
SW5Qb2x5Z29uKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgy
KQotewotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7Ci0gICAgaWYg
KCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMocmVjdC55KCksIHJlY3QubWF4WSgpLCBlZGdlcykp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVk
Z2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2Ug
PSBlZGdlc1tpXTsKLSAgICAgICAgaWYgKGVkZ2UtPmVkZ2VJbmRleCgpICE9IG9mZnNldEVkZ2VJ
bmRleDEgJiYgZWRnZS0+ZWRnZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MiAmJiBlZGdlLT5v
dmVybGFwc1JlY3QocmVjdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0
KGNvbnN0IEZsb2F0UmVjdCYgcjEsIGNvbnN0IEZsb2F0UmVjdCYgcjIpCi17Ci0gICAgaWYgKHIx
LnkoKSA8IHIyLnkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHIxLnkoKSA9PSBy
Mi55KCkpCi0gICAgICAgIHJldHVybiByMS54KCkgPCByMi54KCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2lj
YWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUm
IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QKLXsKLSAg
ICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsKLSAgICBmbG9h
dCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7Ci0g
ICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgo
KTsKLQotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5k
cygpOwotICAgIGNvbnN0IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHBvbHlnb24uYm91bmRpbmdC
b3goKTsKLSAgICBpZiAobWluSW50ZXJ2YWxXaWR0aCA+IGJvdW5kaW5nQm94LndpZHRoKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZGlu
Z0JveC55KCksIG1pbkludGVydmFsVG9wKTsKLSAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbklu
dGVydmFsSGVpZ2h0OwotCi0gICAgaWYgKG1heFkgPiBib3VuZGluZ0JveC5tYXhZKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4g
ZWRnZXM7Ci0gICAgcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKG1pbkludGVydmFsVG9wLCBib3Vu
ZGluZ0JveC5tYXhZKCksIGVkZ2VzKTsKLQotICAgIGZsb2F0IGR4ID0gbWluSW50ZXJ2YWxXaWR0
aCAvIDI7Ci0gICAgZmxvYXQgZHkgPSBtaW5JbnRlcnZhbEhlaWdodCAvIDI7Ci0gICAgVmVjdG9y
PE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRFZGdlczsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25F
ZGdlJiBlZGdlID0gKihlZGdlc1tpXSk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRl
eDAgPSBlZGdlLnByZXZpb3VzRWRnZSgpLnZlcnRleDEoKTsKLSAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7Ci0gICAgICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29u
RWRnZT4gb2Zmc2V0RWRnZUJ1ZmZlcjsKLQotICAgICAgICBpZiAodmVydGV4Mi55KCkgPiB2ZXJ0
ZXgxLnkoKSA/IHZlcnRleDIueCgpID49IHZlcnRleDEueCgpIDogdmVydGV4MS54KCkgPj0gdmVy
dGV4Mi54KCkpIHsKLSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBv
bHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZShkeCwgLWR5KSkpOwotICAgICAgICAgICAgb2Zmc2V0
RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwg
ZHkpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFw
cGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgsIGR5KSkpOwotICAgICAg
ICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxv
YXRTaXplKC1keCwgLWR5KSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzUmVmbGV4VmVy
dGV4KHZlcnRleDAsIHZlcnRleDEsIHZlcnRleDIpKSB7Ci0gICAgICAgICAgICBpZiAodmVydGV4
Mi54KCkgPD0gdmVydGV4MS54KCkgJiYgdmVydGV4MC54KCkgPD0gdmVydGV4MS54KCkpCi0gICAg
ICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVy
dGV4MSwgRmxvYXRTaXplKGR4LCAtZHkpLCBGbG9hdFNpemUoZHgsIGR5KSkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAodmVydGV4Mi54KCkgPj0gdmVydGV4MS54KCkgJiYgdmVydGV4MC54KCkgPj0g
dmVydGV4MS54KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zm
c2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgLWR5KSwgRmxvYXRTaXplKC1k
eCwgZHkpKSk7Ci0gICAgICAgICAgICBpZiAodmVydGV4Mi55KCkgPD0gdmVydGV4MS55KCkgJiYg
dmVydGV4MC55KCkgPD0gdmVydGV4MS55KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1
ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgZHkp
LCBGbG9hdFNpemUoZHgsIGR5KSkpOwotICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi55KCkg
Pj0gdmVydGV4MS55KCkgJiYgdmVydGV4MC55KCkgPj0gdmVydGV4MS55KCkpCi0gICAgICAgICAg
ICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwg
RmxvYXRTaXplKC1keCwgLWR5KSwgRmxvYXRTaXplKGR4LCAtZHkpKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgb2Zmc2V0RWRnZUJ1ZmZlci5zaXplKCk7
ICsraikKLSAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlQnVmZmVyW2pdLm1heFkoKSA+PSBtaW5Z
KQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pd
KTsKLSAgICB9Ci0KLSAgICBvZmZzZXRFZGdlcy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UocG9s
eWdvbiwgbWluSW50ZXJ2YWxUb3AsIEZsb2F0U2l6ZSgwLCBkeSkpKTsKLQotICAgIEZsb2F0UG9p
bnQgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb247Ci0gICAgRmxvYXRSZWN0IGZpcnN0Rml0UmVjdDsK
LSAgICBib29sIGZpcnN0Rml0Rm91bmQgPSBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBvZmZzZXRFZGdlcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gaSArIDE7IGogPCBvZmZzZXRFZGdlcy5zaXplKCk7ICsraikgewotICAgICAgICAg
ICAgaWYgKG9mZnNldEVkZ2VzW2ldLmludGVyc2VjdGlvbihvZmZzZXRFZGdlc1tqXSwgb2Zmc2V0
RWRnZXNJbnRlcnNlY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3RlbnRp
YWxGaXJzdEZpdExvY2F0aW9uKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uLngoKSAtIGR4LCBvZmZz
ZXRFZGdlc0ludGVyc2VjdGlvbi55KCkgLSBkeSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0
IHBvdGVudGlhbEZpcnN0Rml0UmVjdChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dp
Y2FsSW50ZXJ2YWxTaXplKTsKLSAgICAgICAgICAgICAgICBpZiAoKG9mZnNldEVkZ2VzW2ldLmJh
c2lzKCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6OkxpbmVUb3AKLSAgICAgICAgICAgICAgICAgICAg
fHwgb2Zmc2V0RWRnZXNbal0uYmFzaXMoKSA9PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGluZVRvcAot
ICAgICAgICAgICAgICAgICAgICB8fCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLnkoKSA+PSBt
aW5JbnRlcnZhbFRvcCkKLSAgICAgICAgICAgICAgICAgICAgJiYgKCFmaXJzdEZpdEZvdW5kIHx8
IGFib3ZlT3JUb1RoZUxlZnQocG90ZW50aWFsRmlyc3RGaXRSZWN0LCBmaXJzdEZpdFJlY3QpKQot
ICAgICAgICAgICAgICAgICAgICAmJiBwb2x5Z29uLmNvbnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJz
ZWN0aW9uKQotICAgICAgICAgICAgICAgICAgICAmJiBmaXJzdEZpdFJlY3RJblBvbHlnb24ocG9s
eWdvbiwgcG90ZW50aWFsRmlyc3RGaXRSZWN0LCBvZmZzZXRFZGdlc1tpXS5lZGdlSW5kZXgoKSwg
b2Zmc2V0RWRnZXNbal0uZWRnZUluZGV4KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
Rml0Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBmaXJzdEZpdFJlY3QgPSBwb3Rl
bnRpYWxGaXJzdEZpdFJlY3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZpcnN0Rml0Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9
IGNlaWxlZExheW91dFVuaXQoZmlyc3RGaXRSZWN0LnkoKSk7Ci0gICAgcmV0dXJuIGZpcnN0Rml0
Rm91bmQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
ODg1NTNhYjIxZDA2NDQxYmViYTMwMTlhYzBiOWE1Mjg2YTVmZWUxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25Qb2x5Z29uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
LSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgRXhjbHVzaW9uUG9seWdvbl9oCi0jZGVmaW5lIEV4Y2x1c2lvblBvbHlnb25faAot
Ci0jaW5jbHVkZSAiRXhjbHVzaW9uSW50ZXJ2YWwuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFw
ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9seWdvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIE9mZnNldFBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBhaXIgewotcHVibGljOgot
ICAgIGVudW0gQmFzaXMgewotICAgICAgICBFZGdlLAotICAgICAgICBWZXJ0ZXgsCi0gICAgICAg
IExpbmVUb3AKLSAgICB9OwotCi0gICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5
Z29uRWRnZSYgZWRnZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIDogbV92ZXJ0
ZXgxKGVkZ2UudmVydGV4MSgpICsgb2Zmc2V0KQotICAgICAgICAsIG1fdmVydGV4MihlZGdlLnZl
cnRleDIoKSArIG9mZnNldCkKLSAgICAgICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRleCgp
KQotICAgICAgICAsIG1fYmFzaXMoRWRnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgT2Zmc2V0UG9s
eWdvbkVkZ2UoY29uc3QgRmxvYXRQb2ludCYgcmVmbGV4VmVydGV4LCBjb25zdCBGbG9hdFNpemUm
IG9mZnNldDEsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MikKLSAgICAgICAgOiBtX3ZlcnRleDEo
cmVmbGV4VmVydGV4ICsgb2Zmc2V0MSkKLSAgICAgICAgLCBtX3ZlcnRleDIocmVmbGV4VmVydGV4
ICsgb2Zmc2V0MikKLSAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKLSAgICAgICAgLCBtX2Jhc2lz
KFZlcnRleCkKLSAgICB7Ci0gICAgfQotCi0gICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZs
b2F0U2l6ZSYgb2Zmc2V0KQotICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHlnb24u
Ym91bmRpbmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCi0gICAg
ICAgICwgbV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLm1heFgoKSwg
bWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKLSAgICAgICAgLCBtX2VkZ2VJbmRleCgt
MSkKLSAgICAgICAgLCBtX2Jhc2lzKExpbmVUb3ApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
dmVydGV4MTsgfQotICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGV4MjsgfQotICAgIGludCBlZGdlSW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2VkZ2VJbmRleDsgfQotICAgIEJhc2lzIGJhc2lzKCkgY29uc3QgeyByZXR1
cm4gbV9iYXNpczsgfQotCi1wcml2YXRlOgotICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgxOwotICAg
IEZsb2F0UG9pbnQgbV92ZXJ0ZXgyOwotICAgIGludCBtX2VkZ2VJbmRleDsKLSAgICBCYXNpcyBt
X2Jhc2lzOwotfTsKLQotY2xhc3MgRXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25T
aGFwZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7Ci1wdWJs
aWM6Ci0gICAgRXhjbHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+
IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVsZSkKLSAgICAgICAgOiBFeGNsdXNpb25TaGFwZSgp
Ci0gICAgICAgICwgbV9wb2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkKLSAgICAgICAgLCBtX21h
cmdpbkJvdW5kcyhudWxscHRyKQotICAgICAgICAsIG1fcGFkZGluZ0JvdW5kcyhudWxscHRyKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2Fs
Qm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRS
ZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9Ci0gICAgdmlydHVhbCBM
YXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpLmJv
dW5kaW5nQm94KCkpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBtX3BvbHlnb24uaXNFbXB0eSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4
Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBn
ZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJv
b2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJ
bnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5
b3V0VW5pdCYpIGNvbnN0IE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIGNvbnN0IEZsb2F0UG9s
eWdvbiYgc2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24m
IHNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0OwotCi0gICAgRmxvYXRQb2x5Z29uIG1fcG9seWdv
bjsKLSAgICBtdXRhYmxlIE93blB0cjxGbG9hdFBvbHlnb24+IG1fbWFyZ2luQm91bmRzOwotICAg
IG11dGFibGUgT3duUHRyPEZsb2F0UG9seWdvbj4gbV9wYWRkaW5nQm91bmRzOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uUG9seWdvbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmI1MjAyNmU4YTFlMTZjZjRlM2Y5YjZjOWQyYWIxZDI1
ZjBlZmJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwot
ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
LSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRXhjbHVzaW9uUmVjdGFuZ2xlLmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgZWxsaXBzZVhJbnRl
cmNlcHQoZmxvYXQgeSwgZmxvYXQgcngsIGZsb2F0IHJ5KQotewotICAgIEFTU0VSVChyeSA+IDAp
OwotICAgIHJldHVybiByeCAqIHNxcnQoMSAtICh5ICogeSkgLyAocnkgKiByeSkpOwotfQotCi1z
dGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VZSW50ZXJjZXB0KGZsb2F0IHgsIGZsb2F0IHJ4LCBm
bG9hdCByeSkKLXsKLSAgICBBU1NFUlQocnggPiAwKTsKLSAgICByZXR1cm4gcnkgKiBzcXJ0KDEg
LSAoeCAqIHgpIC8gKHJ4ICogcngpKTsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5k
ZWRSZWN0OjpwYWRkaW5nQm91bmRzKGZsb2F0IHBhZGRpbmcpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHBhZGRpbmcgPj0gMCk7Ci0gICAgaWYgKCFwYWRkaW5nIHx8IGlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotCi0gICAgZmxvYXQgYm91bmRzWCA9IHgoKSArIHN0ZDo6bWluKHdpZHRo
KCkgLyAyLCBwYWRkaW5nKTsKLSAgICBmbG9hdCBib3VuZHNZID0geSgpICsgc3RkOjptaW4oaGVp
Z2h0KCkgLyAyLCBwYWRkaW5nKTsKLSAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHN0ZDo6bWF4KDAu
MGYsIHdpZHRoKCkgLSBwYWRkaW5nICogMik7Ci0gICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gc3Rk
OjptYXgoMC4wZiwgaGVpZ2h0KCkgLSBwYWRkaW5nICogMik7Ci0gICAgZmxvYXQgYm91bmRzUmFk
aXVzWCA9IHN0ZDo6bWF4KDAuMGYsIHJ4KCkgLSBwYWRkaW5nKTsKLSAgICBmbG9hdCBib3VuZHNS
YWRpdXNZID0gc3RkOjptYXgoMC4wZiwgcnkoKSAtIHBhZGRpbmcpOwotICAgIHJldHVybiBGbG9h
dFJvdW5kZWRSZWN0KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91
bmRzSGVpZ2h0KSwgRmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKLX0K
LQotRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjptYXJnaW5Cb3VuZHMoZmxvYXQg
bWFyZ2luKSBjb25zdAotewotICAgIEFTU0VSVChtYXJnaW4gPj0gMCk7Ci0gICAgaWYgKCFtYXJn
aW4pCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkgLSBt
YXJnaW47Ci0gICAgZmxvYXQgYm91bmRzWSA9IHkoKSAtIG1hcmdpbjsKLSAgICBmbG9hdCBib3Vu
ZHNXaWR0aCA9IHdpZHRoKCkgKyBtYXJnaW4gKiAyOwotICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9
IGhlaWdodCgpICsgbWFyZ2luICogMjsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gcngoKSAr
IG1hcmdpbjsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gcnkoKSArIG1hcmdpbjsKLSAgICBy
ZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJlY3QoYm91bmRzWCwgYm91bmRzWSwgYm91bmRz
V2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6ZShib3VuZHNSYWRpdXNYLCBib3VuZHNSYWRp
dXNZKSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmxvYXRSb3VuZGVkUmVjdDo6Y29ybmVySW50ZXJjZXB0
Rm9yV2lkdGgoZmxvYXQgd2lkdGhBdEludGVyY2VwdCkgY29uc3QKLXsKLSAgICBmbG9hdCB4aSA9
ICh3aWR0aCgpIC0gd2lkdGhBdEludGVyY2VwdCkgLyAyOwotICAgIGZsb2F0IHlpID0gcnkoKSAt
IGVsbGlwc2VZSW50ZXJjZXB0KHJ4KCkgLSB4aSwgcngoKSwgcnkoKSk7Ci0gICAgcmV0dXJuIEZs
b2F0UG9pbnQoeGksIHlpKTsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBFeGNsdXNpb25SZWN0YW5n
bGU6OnNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhdmVJbml0aWFs
aXplZFBhZGRpbmdCb3VuZHMpIHsKLSAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91
bmRzID0gdHJ1ZTsKLSAgICAgICAgbV9wYWRkaW5nQm91bmRzID0gbV9ib3VuZHMucGFkZGluZ0Jv
dW5kcyhzaGFwZVBhZGRpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX3BhZGRpbmdCb3VuZHM7
Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgRXhjbHVzaW9uUmVjdGFuZ2xlOjpzaGFwZU1hcmdpbkJv
dW5kcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcykg
ewotICAgICAgICBtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcyA9IHRydWU7Ci0gICAgICAg
IG1fbWFyZ2luQm91bmRzID0gbV9ib3VuZHMubWFyZ2luQm91bmRzKHNoYXBlTWFyZ2luKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gbV9tYXJnaW5Cb3VuZHM7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUmVj
dGFuZ2xlOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZU1hcmdpbkJvdW5kcygpOwotICAg
IGlmIChib3VuZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9
IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsK
LQotICAgIGlmICh5MiA8IGJvdW5kcy55KCkgfHwgeTEgPj0gYm91bmRzLm1heFkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeDEgPSBib3VuZHMueCgpOwotICAgIGZsb2F0IHgyID0g
Ym91bmRzLm1heFgoKTsKLQotICAgIGlmIChib3VuZHMucnkoKSA+IDApIHsKLSAgICAgICAgaWYg
KHkyIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9
IHkyIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICAgICAgZmxvYXQgeGkgPSBl
bGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAg
ICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7Ci0gICAgICAgICAgICB4MiA9
IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOwotICAgICAgICB9IGVsc2UgaWYgKHkx
ID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9
ICB5MSAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgZmxvYXQg
eGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAg
ICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7Ci0gICAgICAgICAg
ICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKLX0KLQotdm9pZCBF
eGNsdXNpb25SZWN0YW5nbGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25z
dAotewotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0Jv
dW5kcygpOwotICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9n
aWNhbEhlaWdodDsKLQotICAgIGlmICh5MSA8IGJvdW5kcy55KCkgfHwgeTIgPiBib3VuZHMubWF4
WSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB4MSA9IGJvdW5kcy54KCk7Ci0gICAg
ZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOwotCi0gICAgaWYgKGJvdW5kcy5yeSgpID4gMCkgewot
ICAgICAgICBib29sIHkxSW50ZXJjZXB0c0Nvcm5lciA9IHkxIDwgYm91bmRzLnkoKSArIGJvdW5k
cy5yeSgpOwotICAgICAgICBib29sIHkySW50ZXJjZXB0c0Nvcm5lciA9IHkyID4gYm91bmRzLm1h
eFkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICBmbG9hdCB4aSA9IDA7Ci0KLSAgICAgICAgaWYg
KHkxSW50ZXJjZXB0c0Nvcm5lciAmJiB5MkludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAg
IGlmICAoeTEgPCBib3VuZHMuaGVpZ2h0KCkgKyAyICogYm91bmRzLnkoKSAtIHkyKSB7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJvdW5kcy55KCkgLSBib3VuZHMucnkoKTsKLSAg
ICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91
bmRzLnJ5KCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB5
aSA9ICB5MiAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgICAg
IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyKSB7Ci0g
ICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwotICAg
ICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5y
eSgpKTsKLSAgICAgICAgfSBlbHNlIGlmICh5MkludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAg
ICAgIGZsb2F0IHlpID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7Ci0gICAg
ICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lciB8fCB5Mklu
dGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5y
eCgpIC0geGk7Ci0gICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSAr
IHhpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4
MSwgeDIpKTsKLX0KLQotYm9vbCBFeGNsdXNpb25SZWN0YW5nbGU6OmZpcnN0SW5jbHVkZWRJbnRl
cnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExh
eW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29u
c3QKLXsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsK
LSAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVp
Z2h0KCk7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNp
emUud2lkdGgoKTsKLQotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBl
UGFkZGluZ0JvdW5kcygpOwotICAgIGlmIChib3VuZHMuaXNFbXB0eSgpIHx8IG1pbkludGVydmFs
V2lkdGggPiBib3VuZHMud2lkdGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxv
YXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kcy55KCksIG1pbkludGVydmFsVG9wKTsKLSAgICBmbG9h
dCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0OwotCi0gICAgaWYgKG1heFkgPiBib3Vu
ZHMubWF4WSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGludGVydmFsT3Zl
cmxhcHNNaW5Db3JuZXIgPSBtaW5ZIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpOwotICAgIGJv
b2wgaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciA9IG1heFkgPiBib3VuZHMubWF4WSgpIC0gYm91
bmRzLnJ5KCk7Ci0KLSAgICBpZiAoIWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgIWludGVy
dmFsT3ZlcmxhcHNNYXhDb3JuZXIpIHsKLSAgICAgICAgcmVzdWx0ID0gbWluWTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBi
b3VuZHMuaGVpZ2h0KCkgLyAyOwotICAgIGJvb2wgbWluQ29ybmVyRGVmaW5lc1ggPSBmYWJzKGNl
bnRlclkgLSBtaW5ZKSA+IGZhYnMoY2VudGVyWSAtIG1heFkpOwotICAgIGJvb2wgaW50ZXJ2YWxG
aXRzV2l0aGluQ29ybmVycyA9IG1pbkludGVydmFsV2lkdGggKyAyICogYm91bmRzLnJ4KCkgPD0g
Ym91bmRzLndpZHRoKCk7Ci0gICAgRmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHQgPSBib3VuZHMu
Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgobWluSW50ZXJ2YWxXaWR0aCk7Ci0KLSAgICBpZiAoaW50
ZXJ2YWxPdmVybGFwc01pbkNvcm5lciAmJiAoIWludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgfHwg
bWluQ29ybmVyRGVmaW5lc1gpKSB7Ci0gICAgICAgIGlmIChpbnRlcnZhbEZpdHNXaXRoaW5Db3Ju
ZXJzIHx8IGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpIDwgbWluWSkgewotICAgICAg
ICAgICAgcmVzdWx0ID0gbWluWTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtaW5JbnRlcnZhbEhlaWdodCA8IGJvdW5kcy5oZWlnaHQoKSAtICgyICog
Y29ybmVySW50ZXJjZXB0LnkoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91
dFVuaXQoYm91bmRzLnkoKSArIGNvcm5lckludGVyY2VwdC55KCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW50ZXJ2YWxPdmVybGFwc01h
eENvcm5lciAmJiAoIWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgfHwgIW1pbkNvcm5lckRlZmlu
ZXNYKSkgewotICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyB8fCBtaW5ZIDw9
ICBib3VuZHMubWF4WSgpIC0gY29ybmVySW50ZXJjZXB0LnkoKSAtIG1pbkludGVydmFsSGVpZ2h0
KSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtaW5ZOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5n
bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5ZmRhYzE2M2MxMmVlNzNkMmJl
ODkzZWYzMTg4YmQzMjc3YzJhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25S
ZWN0YW5nbGVfaAotI2RlZmluZSBFeGNsdXNpb25SZWN0YW5nbGVfaAotCi0jaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGUuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdCA6IHB1YmxpYyBGbG9hdFJlY3QgewotcHVibGljOgotICAgIEZs
b2F0Um91bmRlZFJlY3QoKSB7IH0KLSAgICBGbG9hdFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotICAgICAgICA6IEZsb2F0UmVjdChi
b3VuZHMpCi0gICAgICAgICwgbV9yYWRpaShyYWRpaSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxv
YXQgcngoKSBjb25zdCB7IHJldHVybiBtX3JhZGlpLndpZHRoKCk7IH0KLSAgICBmbG9hdCByeSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmFkaWkuaGVpZ2h0KCk7IH0KLSAgICBGbG9hdFJvdW5kZWRSZWN0
IG1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0OwotICAgIEZsb2F0Um91bmRlZFJlY3Qg
cGFkZGluZ0JvdW5kcyhmbG9hdCBwYWRkaW5nKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGNvcm5l
ckludGVyY2VwdEZvcldpZHRoKGZsb2F0IHdpZHRoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBG
bG9hdFNpemUgbV9yYWRpaTsKLX07Ci0KLWNsYXNzIEV4Y2x1c2lvblJlY3RhbmdsZSA6IHB1Ymxp
YyBFeGNsdXNpb25TaGFwZSB7Ci1wdWJsaWM6Ci0gICAgRXhjbHVzaW9uUmVjdGFuZ2xlKGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotICAgICAgICA6IEV4
Y2x1c2lvblNoYXBlKCkKLSAgICAgICAgLCBtX2JvdW5kcyhib3VuZHMsIHJhZGlpKQotICAgICAg
ICAsIG1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzKGZhbHNlKQotICAgICAgICAsIG1faGF2
ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmly
dHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMo
KSk7IH0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5n
Qm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hh
cGVQYWRkaW5nQm91bmRzKCkpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9n
aWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXpl
LCBMYXlvdXRVbml0JikgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSb3Vu
ZGVkUmVjdCBzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0OwotICAgIEZsb2F0Um91bmRlZFJlY3Qg
c2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3Q7Ci0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fYm91
bmRzOwotICAgIG11dGFibGUgRmxvYXRSb3VuZGVkUmVjdCBtX21hcmdpbkJvdW5kczsKLSAgICBt
dXRhYmxlIEZsb2F0Um91bmRlZFJlY3QgbV9wYWRkaW5nQm91bmRzOwotICAgIG11dGFibGUgYm9v
bCBtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcyA6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1f
aGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcyA6IDE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFeGNsdXNpb25SZWN0YW5nbGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZmZTY0MGRiNWQ3NjE3NDRhNGEwMWI2ODA1Yjg1Yzc4Y2JiMDY3ZDcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
LSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0K
LSNpbmNsdWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uUG9s
eWdvbi5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblJlY3RhbmdsZS5oIgotI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgotI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIldpbmRSdWxl
LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xl
KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotewotICAg
IEFTU0VSVChib3VuZHMud2lkdGgoKSA+PSAwICYmIGJvdW5kcy5oZWlnaHQoKSA+PSAwICYmIHJh
ZGlpLndpZHRoKCkgPj0gMCAmJiByYWRpaS5oZWlnaHQoKSA+PSAwKTsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEV4Y2x1c2lvblJlY3RhbmdsZShib3VuZHMsIHJhZGlpKSk7Ci19Ci0KLXN0YXRp
YyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoY29uc3Qg
RmxvYXRQb2ludCYgY2VudGVyLCBmbG9hdCByYWRpdXMpCi17Ci0gICAgQVNTRVJUKHJhZGl1cyA+
PSAwKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJl
Y3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywgcmFkaXVzKjIsIHJh
ZGl1cyoyKSwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSkpOwotfQotCi1zdGF0aWMgUGFzc093
blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShjb25zdCBGbG9hdFBv
aW50JiBjZW50ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCi17Ci0gICAgQVNTRVJUKHJhZGlp
LndpZHRoKCkgPj0gMCAmJiByYWRpaS5oZWlnaHQoKSA+PSAwKTsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndp
ZHRoKCksIGNlbnRlci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRp
aS5oZWlnaHQoKSoyKSwgcmFkaWkpKTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9u
U2hhcGU+IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2lu
dD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBFeGNsdXNpb25Qb2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkpOwotfQotCi1zdGF0aWMg
aW5saW5lIEZsb2F0UmVjdCBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsb2dpY2FsQm94SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsK
LSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICBy
ZXR1cm4gcmVjdDsKLSAgICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QueSgpLCBsb2dpY2FsQm94SGVpZ2h0
IC0gcmVjdC5tYXhYKCksIHJlY3QuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSk7Ci0gICAgcmV0dXJu
IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFBvaW50IHBo
eXNpY2FsUG9pbnRUb0xvZ2ljYWwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IGxvZ2lj
YWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBwb2ludDsKLSAg
ICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRQb2ludChwb2ludC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSBwb2ludC54KCkp
OwotICAgIHJldHVybiBwb2ludC50cmFuc3Bvc2VkUG9pbnQoKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBGbG9hdFNpemUgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgcmV0dXJuIHNpemUu
dHJhbnNwb3NlZFNpemUoKTsKLX0KLQotUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVz
aW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hh
cGUsIGNvbnN0IExheW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSwgTGVuZ3RoIG1hcmdpbiwgTGVuZ3RoIHBhZGRpbmcpCi17Ci0gICAgQVNTRVJUKGJhc2lj
U2hhcGUpOwotCi0gICAgYm9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSk7Ci0gICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFs
V3JpdGluZ01vZGUgPyBsb2dpY2FsQm94U2l6ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVp
Z2h0KCk7Ci0gICAgZmxvYXQgYm94SGVpZ2h0ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9n
aWNhbEJveFNpemUuaGVpZ2h0KCkgOiBsb2dpY2FsQm94U2l6ZS53aWR0aCgpOwotICAgIE93blB0
cjxFeGNsdXNpb25TaGFwZT4gZXhjbHVzaW9uU2hhcGU7Ci0KLSAgICBzd2l0Y2ggKGJhc2ljU2hh
cGUtPnR5cGUoKSkgewotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUmVjdGFuZ2xl
VHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7Ci0gICAg
ICAgIEZsb2F0UmVjdCBib3VuZHMoCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJl
Y3RhbmdsZS0+eCgpLCBib3hXaWR0aCksCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHJlY3RhbmdsZS0+eSgpLCBib3hIZWlnaHQpLAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxl
bmd0aChyZWN0YW5nbGUtPndpZHRoKCksIGJveFdpZHRoKSwKLSAgICAgICAgICAgIGZsb2F0VmFs
dWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5oZWlnaHQoKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIExl
bmd0aCByYWRpdXNYTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7Ci0gICAgICAg
IExlbmd0aCByYWRpdXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBjb3JuZXJSYWRpaSgKLSAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNV
bmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdp
ZHRoKSwKLSAgICAgICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9h
dFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOwotICAgICAgICBGbG9h
dFJlY3QgbG9naWNhbEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2lj
YWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hh
cGUgPSBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXpl
VG9Mb2dpY2FsKGNvcm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVDaXJjbGVUeXBlOiB7Ci0gICAg
ICAgIGNvbnN0IEJhc2ljU2hhcGVDaXJjbGUqIGNpcmNsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljU2hhcGVDaXJjbGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZs
b2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKLSAgICAgICAg
ZmxvYXQgY2VudGVyWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJv
eEhlaWdodCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1cyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2ly
Y2xlLT5yYWRpdXMoKSwgc3RkOjptaW4oYm94SGVpZ2h0LCBib3hXaWR0aCkpOwotICAgICAgICBG
bG9hdFBvaW50IGxvZ2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9p
bnQoY2VudGVyWCwgY2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9k
ZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25DaXJjbGUobG9n
aWNhbENlbnRlciwgcmFkaXVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBC
YXNpY1NoYXBlOjpCYXNpY1NoYXBlRWxsaXBzZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNT
aGFwZUVsbGlwc2UqIGVsbGlwc2UgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlRWxsaXBz
ZSo+KGJhc2ljU2hhcGUpOwotICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChlbGxpcHNlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKLSAgICAgICAgZmxvYXQgY2VudGVy
WSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOwot
ICAgICAgICBmbG9hdCByYWRpdXNYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRp
dXNYKCksIGJveFdpZHRoKTsKLSAgICAgICAgZmxvYXQgcmFkaXVzWSA9IGZsb2F0VmFsdWVGb3JM
ZW5ndGgoZWxsaXBzZS0+cmFkaXVzWSgpLCBib3hIZWlnaHQpOwotICAgICAgICBGbG9hdFBvaW50
IGxvZ2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVy
WCwgY2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBsb2dpY2FsUmFkaWkgPSBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoRmxvYXRT
aXplKHJhZGl1c1gsIHJhZGl1c1kpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9u
U2hhcGUgPSBjcmVhdGVFeGNsdXNpb25FbGxpcHNlKGxvZ2ljYWxDZW50ZXIsIGxvZ2ljYWxSYWRp
aSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNT
aGFwZVBvbHlnb25UeXBlOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5
Z29uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsK
LSAgICAgICAgY29uc3QgVmVjdG9yPExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygp
OwotICAgICAgICBzaXplX3QgdmFsdWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7Ci0gICAgICAgIEFT
U0VSVCghKHZhbHVlc1NpemUgJSAyKSk7Ci0gICAgICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2lu
dD4gPiB2ZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4odmFsdWVzU2l6
ZSAvIDIpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlc1NpemU7IGkg
Kz0gMikgewotICAgICAgICAgICAgRmxvYXRQb2ludCB2ZXJ0ZXgoCi0gICAgICAgICAgICAgICAg
ZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJveFdpZHRoKSwKLSAgICAgICAgICAg
ICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpICsgMSksIGJveEhlaWdodCkpOwot
ICAgICAgICAgICAgKCp2ZXJ0aWNlcylbaSAvIDJdID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbCh2
ZXJ0ZXgsIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24odmVydGlj
ZXMucmVsZWFzZSgpLCBwb2x5Z29uLT53aW5kUnVsZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOiB7
Ci0gICAgICAgIGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSogcmVjdGFuZ2xlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7Ci0g
ICAgICAgIGZsb2F0IGxlZnQgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+bGVmdCgp
LCBib3hXaWR0aCk7Ci0gICAgICAgIGZsb2F0IHRvcCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVj
dGFuZ2xlLT50b3AoKSwgYm94SGVpZ2h0KTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kcygKLSAg
ICAgICAgICAgIGxlZnQsCi0gICAgICAgICAgICB0b3AsCi0gICAgICAgICAgICBib3hXaWR0aCAt
IGxlZnQgLSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+cmlnaHQoKSwgYm94V2lkdGgp
LAotICAgICAgICAgICAgYm94SGVpZ2h0IC0gdG9wIC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0
YW5nbGUtPmJvdHRvbSgpLCBib3hIZWlnaHQpKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1hMZW5n
dGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1lM
ZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKLSAgICAgICAgRmxvYXRTaXplIGNv
cm5lclJhZGlpKAotICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6
IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAotICAgICAgICAg
ICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgo
cmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsQm91
bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVpZ2h0
KCksIHdyaXRpbmdNb2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1
c2lvblJlY3RhbmdsZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVy
UmFkaWksIHdyaXRpbmdNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGV4Y2x1c2lv
blNoYXBlLT5tX3dyaXRpbmdNb2RlID0gd3JpdGluZ01vZGU7Ci0gICAgZXhjbHVzaW9uU2hhcGUt
Pm1fbWFyZ2luID0gZmxvYXRWYWx1ZUZvckxlbmd0aChtYXJnaW4sIDApOwotICAgIGV4Y2x1c2lv
blNoYXBlLT5tX3BhZGRpbmcgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHBhZGRpbmcsIDApOwotCi0g
ICAgcmV0dXJuIGV4Y2x1c2lvblNoYXBlLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNkNTFmMDQxNjgyMzIxODIxNTJjMzI4MDNmYTczZmE0
ODlkNDUxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlX2gKLSNkZWZpbmUg
RXhjbHVzaW9uU2hhcGVfaAotCi0jaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdHJ1Y3QgTGluZVNlZ21lbnQgewotICAgIExpbmVTZWdtZW50KGZsb2F0IGxvZ2ljYWxM
ZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQpCi0gICAgICAgIDogbG9naWNhbExlZnQobG9naWNhbExl
ZnQpCi0gICAgICAgICwgbG9naWNhbFJpZ2h0KGxvZ2ljYWxSaWdodCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdo
dDsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPExpbmVTZWdtZW50PiBTZWdtZW50TGlzdDsKLQotCi0v
LyBBIHJlcHJlc2VudGF0aW9uIG9mIGEgQmFzaWNTaGFwZSB0aGF0IGVuYWJsZXMgbGF5b3V0IGNv
ZGUgdG8gZGV0ZXJtaW5lIGhvdyB0byBicmVhayBhIGxpbmUgdXAgaW50byBzZWdtZW50cwotLy8g
dGhhdCB3aWxsIGZpdCB3aXRoaW4gb3IgYXJvdW5kIGEgc2hhcGUuIFRoZSBsaW5lIGlzIGRlZmlu
ZWQgYnkgYSBwYWlyIG9mIGxvZ2ljYWwgWSBjb29yZGluYXRlcyBhbmQgdGhlCi0vLyBjb21wdXRl
ZCBzZWdtZW50cyBhcmUgcmV0dXJuZWQgYXMgcGFpcnMgb2YgbG9naWNhbCBYIGNvb3JkaW5hdGVz
LiBUaGUgQmFzaWNTaGFwZSBpdHNlbGYgaXMgZGVmaW5lZCBpbgotLy8gcGh5c2ljYWwgY29vcmRp
bmF0ZXMuCi0KLWNsYXNzIEV4Y2x1c2lvblNoYXBlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNT
aGFwZSosIGNvbnN0IExheW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSwgTGVu
Z3RoIG1hcmdpbiwgTGVuZ3RoIHBhZGRpbmcpOwotCi0gICAgdmlydHVhbCB+RXhjbHVzaW9uU2hh
cGUoKSB7IH0KLQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3Vu
ZGluZ0JveCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5n
TG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlv
dXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3Qm
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNh
bFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYg
bWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdCA9IDA7Ci0K
LXByb3RlY3RlZDoKLSAgICBmbG9hdCBzaGFwZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFy
Z2luOyB9Ci0gICAgZmxvYXQgc2hhcGVQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5n
OyB9Ci0KLXByaXZhdGU6Ci0gICAgV3JpdGluZ01vZGUgbV93cml0aW5nTW9kZTsKLSAgICBmbG9h
dCBtX21hcmdpbjsKLSAgICBmbG9hdCBtX3BhZGRpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFeGNsdXNpb25TaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5ZjE0ZjgyMmI3ODU0MWVkZTNlM2M0OGI4MzRkODJjMzI4YWNlMWI4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgot
ICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbmZvLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIK
LSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKLSNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci10ZW1wbGF0ZTxjbGFz
cyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdl
dHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5
b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWNvbnN0IEV4Y2x1c2lv
blNoYXBlKiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVy
dmFsR2V0dGVyPjo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEV4Y2x1c2lvblNo
YXBlKiBleGNsdXNpb25TaGFwZSA9IG1fc2hhcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBleGNs
dXNpb25TaGFwZTsKLQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSAobV9y
ZW5kZXJlci0+c3R5bGUoKS0+KnNoYXBlR2V0dGVyKSgpOwotICAgIEJhc2ljU2hhcGUqIHNoYXBl
ID0gKHNoYXBlVmFsdWUgJiYgc2hhcGVWYWx1ZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFs
dWU6OlNoYXBlKSA/IHNoYXBlVmFsdWUtPnNoYXBlKCkgOiAwOwotCi0gICAgQVNTRVJUKHNoYXBl
KTsKLQotICAgIG1fc2hhcGUgPSBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUo
c2hhcGUsIExheW91dFNpemUobV9zaGFwZUxvZ2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWln
aHQpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHls
ZSgpLT5zaGFwZU1hcmdpbigpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7
Ci0gICAgQVNTRVJUKG1fc2hhcGUpOwotICAgIHJldHVybiBtX3NoYXBlLmdldCgpOwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5
bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZh
bEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWJv
b2wgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdl
dHRlcj46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVIZWlnaHQpCi17Ci0gICAgQVNTRVJUKGxpbmVIZWlnaHQgPj0gMCk7Ci0gICAgbV9z
aGFwZUxpbmVUb3AgPSBsaW5lVG9wIC0gbG9naWNhbFRvcE9mZnNldCgpOwotICAgIG1fbGluZUhl
aWdodCA9IGxpbmVIZWlnaHQ7Ci0gICAgbV9zZWdtZW50cy5jbGVhcigpOwotCi0gICAgaWYgKGxp
bmVPdmVybGFwc1NoYXBlQm91bmRzKCkpCi0gICAgICAgIChjb21wdXRlZFNoYXBlKCktPippbnRl
cnZhbEdldHRlcikobV9zaGFwZUxpbmVUb3AsIHN0ZDo6bWluKG1fbGluZUhlaWdodCwgc2hhcGVM
b2dpY2FsQm90dG9tKCkgLSBsaW5lVG9wKSwgbV9zZWdtZW50cyk7Ci0KLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gdGhpcy0+bG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fc2VnbWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV9z
ZWdtZW50c1tpXS5sb2dpY2FsTGVmdCArPSBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICAgICAgbV9z
ZWdtZW50c1tpXS5sb2dpY2FsUmlnaHQgKz0gbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOwotfQotCi10ZW1wbGF0ZSBjbGFzcyBFeGNsdXNp
b25TaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lk
ZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz47Ci10ZW1wbGF0ZSBjbGFz
cyBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lk
ZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz47Ci19Ci0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3MDc5MmEzZjkxMjZmZDc1Y2ZiNzY4MjlmYjlhYWM2MDE4
ZmZiOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzEgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lci4KLSogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLSogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIg
QU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSogTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAot
KiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0qIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0qIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotKiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSog
U1VDSCBEQU1BR0UuCi0qLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlSW5mb19oCi0jZGVmaW5l
IEV4Y2x1c2lvblNoYXBlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1
ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8Y2xhc3MgS2V5VHlw
ZSwgY2xhc3MgSW5mb1R5cGU+Ci1jbGFzcyBNYXBwZWRJbmZvIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgSW5mb1R5cGUqIGVuc3VyZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KQotICAgIHsKLSAgICAg
ICAgSW5mb01hcCYgaW5mb01hcCA9IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZv
TWFwKCk7Ci0gICAgICAgIGlmIChJbmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCi0g
ICAgICAgICAgICByZXR1cm4gaW5mbzsKLSAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IGluZm9NYXAuYWRkKGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotICAgIH0KLSAg
ICBzdGF0aWMgdm9pZCByZW1vdmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkgeyBpbmZvTWFwKCku
cmVtb3ZlKGtleSk7IH0KLSAgICBzdGF0aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5VHlwZSog
a2V5KSB7IHJldHVybiBpbmZvTWFwKCkuZ2V0KGtleSk7IH0KLXByaXZhdGU6Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPGNvbnN0IEtleVR5cGUqLCBPd25QdHI8SW5mb1R5cGU+ID4gSW5mb01hcDsKLSAg
ICBzdGF0aWMgSW5mb01hcCYgaW5mb01hcCgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEluZm9NYXAsIHN0YXRpY0luZm9NYXAsICgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y0luZm9NYXA7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVz
aW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KEV4Y2x1c2lvblNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQs
IFNlZ21lbnRMaXN0JikgY29uc3Q+Ci1jbGFzcyBFeGNsdXNpb25TaGFwZUluZm8gewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkV4Y2x1c2lvblNo
YXBlSW5mbygpIHsgfQotCi0gICAgdm9pZCBzZXRTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3Jl
bmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgewotICAgICAgICAg
ICAgbG9naWNhbFdpZHRoIC09IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lk
dGgoKTsKLSAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NoYXBl
TG9naWNhbFdpZHRoID09IGxvZ2ljYWxXaWR0aCAmJiBtX3NoYXBlTG9naWNhbEhlaWdodCA9PSBs
b2dpY2FsSGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkaXJ0eVNoYXBlU2l6
ZSgpOwotICAgICAgICBtX3NoYXBlTG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoOwotICAgICAg
ICBtX3NoYXBlTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQ7Ci0gICAgfQotCi0gICAgdmly
dHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlv
dXRVbml0IGxpbmVIZWlnaHQpOwotICAgIHZvaWQgY2xlYXJTZWdtZW50cygpIHsgbV9zZWdtZW50
cy5jbGVhcigpOyB9Ci0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IHsg
cmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dpY2FsVG9w
T2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBsb2dpY2Fs
VG9wT2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBjb25zdCB7
IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9naWNhbExl
ZnRPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBjb25zdCB7
IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsgbG9naWNh
bExlZnRPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgoKSBjb25z
dCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgoKTsgfQot
ICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0
ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBsb2dpY2Fs
VG9wT2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBtX2xpbmVIZWlnaHQgKyBsb2dpY2FsVG9wT2Zmc2V0
KCk7IH0KLQotICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKSBjb25z
dCB7IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9C
T1gpID8gKG1fc2hhcGVMb2dpY2FsSGVpZ2h0ICsgbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxIZWlnaHQoKSkgOiBtX3NoYXBlTG9naWNhbEhlaWdodDsgfQotCi0gICAgYm9vbCBs
aW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMaW5lVG9wKCkg
PCBzaGFwZUxvZ2ljYWxCb3R0b20oKSAmJiBzaGFwZUxvZ2ljYWxUb3AoKSA8PSBsb2dpY2FsTGlu
ZUJvdHRvbSgpOyB9Ci0gICAgYm9vbCBsaW5lV2l0aGluU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYmIChsb2dpY2FsTGluZUJvdHRvbSgpIDw9
IHNoYXBlTG9naWNhbEJvdHRvbSgpKTsgfQotCi0gICAgdm9pZCBkaXJ0eVNoYXBlU2l6ZSgpIHsg
bV9zaGFwZS5jbGVhcigpOyB9Ci0gICAgYm9vbCBzaGFwZVNpemVEaXJ0eSgpIHsgcmV0dXJuICFt
X3NoYXBlLmdldCgpOyB9Ci0gICAgY29uc3QgUmVuZGVyVHlwZSogb3duZXIoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlcmVyOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBFeGNsdXNpb25TaGFwZUluZm8o
Y29uc3QgUmVuZGVyVHlwZSogcmVuZGVyZXIpOiBtX3JlbmRlcmVyKHJlbmRlcmVyKSB7IH0KLQot
ICAgIGNvbnN0IEV4Y2x1c2lvblNoYXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9
IDA7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVy
ZXItPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IExheW91dFVuaXQoKTsgfTsKLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0
eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLT5pc1JlbmRl
clJlZ2lvbigpKSA/IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpIDogTGF5b3V0
VW5pdCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IG1fc2hhcGVMaW5lVG9wOwotICAgIExheW91dFVu
aXQgbV9saW5lSGVpZ2h0OwotICAgIFNlZ21lbnRMaXN0IG1fc2VnbWVudHM7Ci0KLXByaXZhdGU6
Ci0gICAgbXV0YWJsZSBPd25QdHI8RXhjbHVzaW9uU2hhcGU+IG1fc2hhcGU7Ci0KLSAgICBMYXlv
dXRVbml0IG1fc2hhcGVMb2dpY2FsV2lkdGg7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNh
bEhlaWdodDsKLSAgICBjb25zdCBSZW5kZXJUeXBlKiBtX3JlbmRlcmVyOwotfTsKLX0KLSNlbmRp
ZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZUluc2lkZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE3NDRm
Y2JhOTk1NGQ5ZGEwYTk5NTVkY2E4N2FiZGVkM2U5MzExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
Ci0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIgotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0KLSNpbmNsdWRlICJJbmxpbmVJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTGluZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRS
YW5nZShjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBl
bmQpCi0gICAgOiBzdGFydChzdGFydC5yb290KCksIHN0YXJ0Lm9iamVjdCgpLCBzdGFydC5vZmZz
ZXQoKSkKLSAgICAsIGVuZChlbmQucm9vdCgpLCBlbmQub2JqZWN0KCksIGVuZC5vZmZzZXQoKSkK
LSAgICB7Ci0gICAgfQotCi1ib29sIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVk
Rm9yKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKLXsKLSAgICBFeGNsdXNpb25TaGFwZVZh
bHVlKiBzaGFwZVZhbHVlID0gcmVuZGVyZXItPnN0eWxlKCktPnJlc29sdmVkU2hhcGVJbnNpZGUo
KTsKLSAgICBpZiAoIXNoYXBlVmFsdWUgfHwgc2hhcGVWYWx1ZS0+dHlwZSgpICE9IEV4Y2x1c2lv
blNoYXBlVmFsdWU6OlNoYXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCYXNpY1No
YXBlKiBzaGFwZSA9IHNoYXBlVmFsdWUtPnNoYXBlKCk7Ci0gICAgcmV0dXJuIHNoYXBlICYmIHNo
YXBlLT50eXBlKCkgIT0gQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTsK
LX0KLQotYm9vbCBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9w
KGZsb2F0IG1pblNlZ21lbnRXaWR0aCkKLXsKLSAgICBjb25zdCBFeGNsdXNpb25TaGFwZSogc2hh
cGUgPSBjb21wdXRlZFNoYXBlKCk7Ci0gICAgaWYgKCFzaGFwZSB8fCBtX2xpbmVIZWlnaHQgPD0g
MCB8fCBsb2dpY2FsTGluZVRvcCgpID4gc2hhcGVMb2dpY2FsQm90dG9tKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIExheW91dFVuaXQgbmV3TGluZVRvcDsKLSAgICBpZiAoc2hhcGUt
PmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AobV9zaGFwZUxpbmVUb3AsIExheW91dFNp
emUobWluU2VnbWVudFdpZHRoLCBtX2xpbmVIZWlnaHQpLCBuZXdMaW5lVG9wKSkgewotICAgICAg
ICBpZiAobmV3TGluZVRvcCA+IG1fc2hhcGVMaW5lVG9wKSB7Ci0gICAgICAgICAgICBtX3NoYXBl
TGluZVRvcCA9IG5ld0xpbmVUb3A7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NDAzMmZmOTlmNmZkYjdkY2MyNGI4NjZjOTQxYjg2
MzAyNTgwMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRv
YmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAg
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm9faAotI2RlZmluZSBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm9faAotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNs
dXNpb25TaGFwZUluZm8uaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbmxpbmVJdGVy
YXRvcjsKLWNsYXNzIFJlbmRlckJsb2NrOwotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi1zdHJ1Y3Qg
TGluZVNlZ21lbnRJdGVyYXRvciB7Ci0gICAgUmVuZGVyT2JqZWN0KiByb290OwotICAgIFJlbmRl
ck9iamVjdCogb2JqZWN0OwotICAgIHVuc2lnbmVkIG9mZnNldDsKLSAgICBMaW5lU2VnbWVudEl0
ZXJhdG9yKFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVk
IG9mZnNldCkKLSAgICAgICAgOiByb290KHJvb3QpCi0gICAgICAgICwgb2JqZWN0KG9iamVjdCkK
LSAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgTGlu
ZVNlZ21lbnRSYW5nZSB7Ci0gICAgTGluZVNlZ21lbnRJdGVyYXRvciBzdGFydDsKLSAgICBMaW5l
U2VnbWVudEl0ZXJhdG9yIGVuZDsKLSAgICBMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0
ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Ci19OwotCi10eXBlZGVm
IFZlY3RvcjxMaW5lU2VnbWVudFJhbmdlPiBTZWdtZW50UmFuZ2VMaXN0OwotCi1jbGFzcyBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJs
b2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFwZTo6
Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJl
bmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKHJl
bmRlcmVyKSk7IH0KLQotICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIpOwotCi0gICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0Zvckxp
bmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFCi0g
ICAgewotICAgICAgICBtX3NlZ21lbnRSYW5nZXMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIEV4
Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBl
SW5zaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNl
Z21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBib29sIGhh
c1NlZ21lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsaW5lT3ZlcmxhcHNTaGFw
ZUJvdW5kcygpICYmIG1fc2VnbWVudHMuc2l6ZSgpOwotICAgIH0KLSAgICBjb25zdCBTZWdtZW50
TGlzdCYgc2VnbWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1NlZ21lbnRz
KCkpOwotICAgICAgICByZXR1cm4gbV9zZWdtZW50czsKLSAgICB9Ci0gICAgU2VnbWVudFJhbmdl
TGlzdCYgc2VnbWVudFJhbmdlcygpIHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQotICAgIGNv
bnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3Nl
Z21lbnRSYW5nZXM7IH0KLSAgICBjb25zdCBMaW5lU2VnbWVudCogY3VycmVudFNlZ21lbnQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFoYXNTZWdtZW50cygpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIEFTU0VSVChtX3NlZ21lbnRSYW5nZXMuc2l6ZSgpIDwgbV9zZWdtZW50
cy5zaXplKCkpOwotICAgICAgICByZXR1cm4gJm1fc2VnbWVudHNbbV9zZWdtZW50UmFuZ2VzLnNp
emUoKV07Ci0gICAgfQotICAgIGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2Vn
bWVudFdpZHRoKTsKLQotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCB2YWx1ZSkgeyBtX25l
ZWRzTGF5b3V0ID0gdmFsdWU7IH0KLSAgICBib29sIG5lZWRzTGF5b3V0KCkgeyByZXR1cm4gbV9u
ZWVkc0xheW91dDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21w
dXRlZFNoYXBlKCktPnNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5k
ZXJlcikKLSAgICA6IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxl
OjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2
YWxzPiAocmVuZGVyZXIpCi0gICAgLCBtX25lZWRzTGF5b3V0KGZhbHNlKQotICAgIHsgfQotCi0g
ICAgU2VnbWVudFJhbmdlTGlzdCBtX3NlZ21lbnRSYW5nZXM7Ci0gICAgYm9vbCBtX25lZWRzTGF5
b3V0OjE7Ci19OwotCi19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNDljY2U1YTU2ZjFjYTlkYzA0YzQ5ODMwZjJjODVjZDdkZGUyYTVl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAi
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIgotCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWJvb2wgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6aXNF
bmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCogYm94KQotewotICAgIEV4Y2x1c2lvblNoYXBlVmFs
dWUqIHZhbHVlID0gYm94LT5zdHlsZSgpLT5zaGFwZU91dHNpZGUoKTsKLSAgICByZXR1cm4gYm94
LT5pc0Zsb2F0aW5nV2l0aFNoYXBlT3V0c2lkZSgpICYmIHZhbHVlLT50eXBlKCkgPT0gRXhjbHVz
aW9uU2hhcGVWYWx1ZTo6U2hhcGUgJiYgdmFsdWUtPnNoYXBlKCk7Ci19Ci0KLWJvb2wgRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkKLXsKLSAgICBpZiAoc2hhcGVTaXplRGlydHko
KSB8fCBtX2xpbmVUb3AgIT0gbGluZVRvcCB8fCBtX2xpbmVIZWlnaHQgIT0gbGluZUhlaWdodCkg
ewotICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxl
OjpzaGFwZU91dHNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+Ojpj
b21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpKSB7Ci0gICAgICAgICAg
ICBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1swXS5sb2dp
Y2FsTGVmdCAtIHNoYXBlTG9naWNhbExlZnQoKTsKLSAgICAgICAgICAgIG1fcmlnaHRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1ttX3NlZ21lbnRzLnNpemUoKS0xXS5s
b2dpY2FsUmlnaHQgLSBzaGFwZUxvZ2ljYWxSaWdodCgpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7Ci0gICAgICAg
ICAgICBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9saW5lVG9wID0gbGluZVRvcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zZWdt
ZW50cy5zaXplKCk7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGM4N2E1YzQ4YjdiMWZmY2UyMTU2ZjgxNzg3NDZmM2YzMzIwNzg1ZjQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0x
LDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNv
cnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UiDigJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICog
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mb19oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm9faAotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFw
ZUluZm8uaCIKLSNpbmNsdWRlICJMYXlvdXRTaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgUmVuZGVyQm94OwotCi1jbGFzcyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvIDog
cHVibGljIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVP
dXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPiwgcHVibGljIE1h
cHBlZEluZm88UmVuZGVyQm94LCBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvPiB7Ci1wdWJsaWM6
Ci0gICAgTGF5b3V0U2l6ZSBzaGFwZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlv
dXRTaXplKHNoYXBlTG9naWNhbExlZnQoKSwgc2hhcGVMb2dpY2FsVG9wKCkpOyB9Ci0KLSAgICBM
YXlvdXRVbml0IGxlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1
cm4gbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsgfQotICAgIExheW91dFVuaXQg
cmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9yaWdo
dFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb21w
dXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0KSBPVkVSUklERTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgeyByZXR1cm4g
YWRvcHRQdHIobmV3IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8ocmVuZGVyZXIpKTsgfQotICAg
IHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqKTsKLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZU1hcmdpbkxv
Z2ljYWxCb3VuZGluZ0JveCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mbyhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSA6IEV4Y2x1c2lvblNoYXBlSW5mbzxS
ZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6Omdl
dEV4Y2x1ZGVkSW50ZXJ2YWxzPihyZW5kZXJlcikgeyB9Ci0KLSAgICBMYXlvdXRVbml0IG1fbGVm
dFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7Ci0gICAgTGF5b3V0VW5pdCBtX3JpZ2h0U2Vn
bWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsKLSAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKLX07
Ci0KLX0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcAppbmRleCAwZjZkOTNjYWI5NTMyZDQzNzMxYzBkNWFiMjQzMzE1ZGYzNjI1ZjMyLi5kOWVi
ZDY0N2E3ZDk1ODU3ZDI4YTlhZTk5NmYzZWViMzRjODdmOTIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgTGF5b3V0U3RhdGU6Okxh
eW91dFN0YXRlKExheW91dFN0YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBM
YXlvdXRTaXoKICAgICAsIG1fbGluZUdyaWQoMCkKICAgICAsIG1fbmV4dChwcmV2KQogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotICAgICwgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8oMCkKKyAg
ICAsIG1fc2hhcGVJbnNpZGVJbmZvKDApCiAjZW5kaWYKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBt
X3JlbmRlcmVyKHJlbmRlcmVyKQpAQCAtMTEzLDkgKzExMyw5IEBAIExheW91dFN0YXRlOjpMYXlv
dXRTdGF0ZShMYXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgTGF5
b3V0U2l6CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRl
ckJsb2NrKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlckJsb2NrID0gdG9S
ZW5kZXJCbG9jayhyZW5kZXJlcik7Ci0gICAgICAgIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
ID0gcmVuZGVyQmxvY2stPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgICAgICBpZiAo
IW1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUlu
c2lkZUluZm8gJiYgcmVuZGVyQmxvY2stPmFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1No
YXJpbmcoKSkKLSAgICAgICAgICAgIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbV9uZXh0
LT5tX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzsKKyAgICAgICAgbV9zaGFwZUluc2lkZUluZm8g
PSByZW5kZXJCbG9jay0+c2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIGlmICghbV9zaGFwZUlu
c2lkZUluZm8gJiYgbV9uZXh0LT5tX3NoYXBlSW5zaWRlSW5mbyAmJiByZW5kZXJCbG9jay0+YWxs
b3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQorICAgICAgICAgICAgbV9zaGFwZUluc2lkZUlu
Zm8gPSBtX25leHQtPm1fc2hhcGVJbnNpZGVJbmZvOwogICAgIH0KICNlbmRpZgogCkBAIC0xNDks
NyArMTQ5LDcgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkK
ICAgICAsIG1fbGluZUdyaWQoMCkKICAgICAsIG1fbmV4dCgwKQogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotICAgICwgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8oMCkKKyAgICAsIG1fc2hhcGVJ
bnNpZGVJbmZvKDApCiAjZW5kaWYKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICNpZm5k
ZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCmluZGV4IDc1YzM1
M2Q1ZGRhODA4ZjE5YmM4ZmJhZWM0Njg3M2I1ZWY1NjNhZGEuLmQ3NzQ5YzUyYzYwZDc1NjIwMWE5
ODEzOTJlODNiNWI1YzE3MmEwOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlck9iamVj
dDsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1jbGFz
cyBFeGNsdXNpb25TaGFwZUluc2lkZUluZm87CitjbGFzcyBTaGFwZUluc2lkZUluZm87CiAjZW5k
aWYKIAogY2xhc3MgTGF5b3V0U3RhdGUgewpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9saW5lR3JpZCgwKQogICAgICAgICAsIG1fbmV4dCgwKQogI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQotICAgICAgICAsIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKDApCisgICAgICAg
ICwgbV9zaGFwZUluc2lkZUluZm8oMCkKICNlbmRpZgogICAgICAgICAsIG1fcGFnZUxvZ2ljYWxI
ZWlnaHQoMCkKICNpZm5kZWYgTkRFQlVHCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIG5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUdyaWQgfHwgKG1faXNQYWdpbmF0ZWQgJiYgbV9wYWdlTG9naWNhbEhlaWdo
dCk7IH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9leGNsdXNp
b25TaGFwZUluc2lkZUluZm87IH0KKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5m
bygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVJbnNpZGVJbmZvOyB9CiAjZW5kaWYKIHByaXZhdGU6
CiAgICAgLy8gVGhlIG5vcm1hbCBvcGVyYXRvciBuZXcgaXMgZGlzYWxsb3dlZC4KQEAgLTEyNSw4
ICsxMjUsOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGN1cnJlbnQgbGluZSBncmlkIHRoYXQgd2Un
cmUgc25hcHBpbmcgdG8gYW5kIHRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBncmlkLgog
ICAgIFJlbmRlckJsb2NrKiBtX2xpbmVHcmlkOwogICAgIExheW91dFN0YXRlKiBtX25leHQ7Ci0j
aWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyog
bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm87CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAg
U2hhcGVJbnNpZGVJbmZvKiBtX3NoYXBlSW5zaWRlSW5mbzsKICNlbmRpZgogCiAgICAgLy8gRklY
TUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGxheW91dCBjbGlwIHJlY3QgYW5kIHRoZSBwYWlu
dCBjbGlwIHJlY3Qgd2hpY2ggbWF5IGJlIGxhcmdlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCmluZGV4IGIwZDE1OWYyZTc0YTA5YjA3OWQ2NzI3ZWQ5ZWMxM2MwZjMw
OTQ0MzcuLmZhODAzZTlmNzdjYWFjOGYwMTAyNWExNGU2NWFiMDM5MzU1MTJkMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNjcsOCArNjcsOCBAQAogI2lu
Y2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIKKyNpbmNsdWRlICJT
aGFwZUluc2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZU91dHNpZGVJbmZvLmgiCiAjZW5kaWYK
ICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFu
Z2UuaD4KQEAgLTM2Myw5ICszNjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogICAgIFJl
bmRlclN0eWxlKiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgCiAjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCi0gICAgLy8gRklYTUU6IEJ1ZyA4OTk5MzogU3R5bGUgY2hhbmdlcyBzaG91bGQgYWZmZWN0
IHRoZSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm9zIGZvciBvdGhlciByZW5kZXIgYmxvY2tzIHRo
YXQKLSAgICAvLyBzaGFyZSB0aGUgc2FtZSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8KLSAgICB1
cGRhdGVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKG5ld1N0eWxlLT5y
ZXNvbHZlZFNoYXBlSW5zaWRlKCksIG9sZFN0eWxlID8gb2xkU3R5bGUtPnJlc29sdmVkU2hhcGVJ
bnNpZGUoKSA6IDApOworICAgIHVwZGF0ZVNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2Uo
bmV3U3R5bGUtPnJlc29sdmVkU2hhcGVJbnNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+cmVz
b2x2ZWRTaGFwZUluc2lkZSgpIDogMCk7CiAjZW5kaWYKIAogICAgIGlmICghaXNBbm9ueW1vdXNC
bG9jaygpKSB7CkBAIC0xNDQwLDE3ICsxNDM4LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dCgpCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0
ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9u
U2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUsIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNo
YXBlSW5zaWRlKQordm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBTaGFwZVZhbHVlKiBzaGFwZUluc2lkZSwgY29uc3QgU2hhcGVWYWx1
ZSogb2xkU2hhcGVJbnNpZGUpCiB7CiAgICAgLy8gRklYTUU6IEEgZnV0dXJlIG9wdGltaXphdGlv
biB3b3VsZCBkbyBhIGRlZXAgY29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuCiAgICAgaWYgKHNoYXBl
SW5zaWRlID09IG9sZFNoYXBlSW5zaWRlKQogICAgICAgICByZXR1cm47CiAKKyAgICBTaGFwZUlu
c2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbzsKICAgICBpZiAoc2hhcGVJbnNpZGUpIHsKLSAgICAg
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBl
bnN1cmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOworICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBl
bnN1cmVTaGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5kaXJ0eVNo
YXBlU2l6ZSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNldEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyhudWxscHRyKTsKKyAgICAgICAgc2V0U2hhcGVJbnNpZGVJbmZvKG51bGxwdHIpOwogICAg
ICAgICBtYXJrU2hhcGVJbnNpZGVEZXNjZW5kYW50c0ZvckxheW91dCgpOwogICAgIH0KIH0KQEAg
LTE0NzIsMTYgKzE0NzEsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya1NoYXBlSW5zaWRlRGVz
Y2VuZGFudHNGb3JMYXlvdXQoKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBleGNs
dXNpb25JbmZvUmVxdWlyZXNSZWxheW91dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCitzdGF0
aWMgaW5saW5lIGJvb2wgc2hhcGVJbmZvUmVxdWlyZXNSZWxheW91dChjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2spCiB7CiAjaWYgIUVOQUJMRShDU1NfU0hBUEVTKQogICAgIHJldHVybiBmYWxzZTsK
ICNlbHNlCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBpbmZvID0gYmxvY2stPmV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogaW5mbyA9IGJsb2Nr
LT5zaGFwZUluc2lkZUluZm8oKTsKICAgICBpZiAoaW5mbykKICAgICAgICAgaW5mby0+c2V0TmVl
ZHNMYXlvdXQoaW5mby0+c2hhcGVTaXplRGlydHkoKSk7CiAgICAgZWxzZQotICAgICAgICBpbmZv
ID0gYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICBpbmZv
ID0gYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAgIHJldHVybiBpbmZvICYmIGlu
Zm8tPm5lZWRzTGF5b3V0KCk7CiAjZW5kaWYKIH0KQEAgLTE0ODksMTEgKzE0ODgsMTEgQEAgc3Rh
dGljIGlubGluZSBib29sIGV4Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KGNvbnN0IFJlbmRl
ckJsb2NrKiBibG9jaykKIGJvb2wgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNp
b25zQmVmb3JlQ2hpbGRMYXlvdXQoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBpZiAoIWZsb3dUaHJlYWQgJiYgIWV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbygpKQorICAgIGlmICghZmxvd1RocmVhZCAmJiAhc2hhcGVJbnNpZGVJbmZv
KCkpCiAjZWxzZQogICAgIGlmICghZmxvd1RocmVhZCkKICNlbmRpZgotICAgICAgICByZXR1cm4g
ZXhjbHVzaW9uSW5mb1JlcXVpcmVzUmVsYXlvdXQodGhpcyk7CisgICAgICAgIHJldHVybiBzaGFw
ZUluZm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOwogCiAgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgTGF5b3V0VW5pdCBvbGRUb3AgPSBsb2dpY2FsVG9wKCk7
CkBAIC0xNTA0LDcgKzE1MDMsNyBAQCBib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5k
RXhjbHVzaW9uc0JlZm9yZUNoaWxkTGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqCiAgICAgdXBkYXRl
TG9naWNhbEhlaWdodCgpOwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgY29tcHV0ZUV4
Y2x1c2lvblNoYXBlU2l6ZSgpOworICAgIGNvbXB1dGVTaGFwZVNpemUoKTsKICNlbmRpZgogCiAg
ICAgLy8gU2V0IG91ciBzdGFydCBhbmQgZW5kIHJlZ2lvbnMuIE5vIHJlZ2lvbnMgYWJvdmUgb3Ig
YmVsb3cgdXMgd2lsbCBiZSBjb25zaWRlcmVkIGJ5IG91ciBjaGlsZHJlbi4gVGhleSBhcmUKQEAg
LTE1MTQsMTYgKzE1MTMsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4
Y2x1c2lvbnNCZWZvcmVDaGlsZExheW91dChSZW5kZXJGbG93VGhyZWFkKgogICAgIHNldExvZ2lj
YWxIZWlnaHQob2xkSGVpZ2h0KTsKICAgICBzZXRMb2dpY2FsVG9wKG9sZFRvcCk7CiAgICAgCi0g
ICAgcmV0dXJuIGV4Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOworICAgIHJldHVy
biBzaGFwZUluZm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCi12b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlRXhjbHVzaW9uU2hhcGVTaXplKCkKK3Zv
aWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVTaGFwZVNpemUoKQogewotICAgIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+ZXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvKCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykgeworICAg
IFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+c2hhcGVJbnNpZGVJbmZv
KCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbykgewogICAgICAgICBib29sIHBlcmNlbnRhZ2VM
b2dpY2FsSGVpZ2h0UmVzb2x2YWJsZSA9IHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZh
YmxlRnJvbUJsb2NrKHRoaXMsIGZhbHNlKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLT5zZXRTaGFwZVNpemUobG9naWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0
UmVzb2x2YWJsZSA/IGxvZ2ljYWxIZWlnaHQoKSA6IExheW91dFVuaXQoKSk7CisgICAgICAgIHNo
YXBlSW5zaWRlSW5mby0+c2V0U2hhcGVTaXplKGxvZ2ljYWxXaWR0aCgpLCBwZXJjZW50YWdlTG9n
aWNhbEhlaWdodFJlc29sdmFibGUgPyBsb2dpY2FsSGVpZ2h0KCkgOiBMYXlvdXRVbml0KCkpOwog
ICAgIH0KIH0KICNlbmRpZgpAQCAtMTUzMiw3ICsxNTMxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNBZnRlckNoaWxkTGF5b3V0KFJlbmRlckZsb3dUaHJl
YWQqIGYKIHsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAvLyBBIHByZXZpb3VzIHNpYmxp
bmcgaGFzIGNoYW5nZWQgZGltZW5zaW9uLCBzbyB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZSBzaGFw
ZSB3aXRoIHRoZSBjb250ZW50Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUlu
c2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUlu
c2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAg
IGlmIChoZWlnaHRDaGFuZ2VkICYmIHNoYXBlSW5zaWRlSW5mbykKICAgICAgICAgc2hhcGVJbnNp
ZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOwogI2VuZGlmCkBAIC00MDExLDEwICs0MDEwLDEwIEBA
IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5n
T2JqZWN0KFJlbmRlckJveCogbykKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAg
ICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBvLT5leGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvKCk7CisgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0g
by0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgIGlmIChzaGFwZU91dHNpZGUpIHsKICAgICAgICAg
c2hhcGVPdXRzaWRlLT5zZXRTaGFwZVNpemUoby0+bG9naWNhbFdpZHRoKCksIG8tPmxvZ2ljYWxI
ZWlnaHQoKSk7Ci0gICAgICAgIC8vIFRoZSBDU1MgRXhjbHVzaW9ucyBzcGVjaWZpY2F0aW9uIHNh
eXMgdGhhdCB0aGUgbWFyZ2lucyBhcmUgaWdub3JlZAorICAgICAgICAvLyBUaGUgQ1NTIFNoYXBl
cyBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCB0aGUgbWFyZ2lucyBhcmUgaWdub3JlZAogICAgICAg
ICAvLyB3aGVuIGEgZmxvYXQgaGFzIGEgc2hhcGUgb3V0c2lkZS4KICAgICAgICAgc2V0TG9naWNh
bFdpZHRoRm9yRmxvYXQobmV3T2JqLCBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbFdpZHRoKCkp
OwogICAgIH0gZWxzZQpAQCAtNDA5Miw3ICs0MDkxLDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxv
Y2s6OmNvbXB1dGVMb2dpY2FsTG9jYXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCog
ZmwKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldDsgLy8gQ29uc3RhbnQgcGFydCBv
ZiByaWdodCBvZmZzZXQuCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgLy8gRklYTUUgQnVn
IDEwMjk0ODogVGhpcyBvbmx5IHdvcmtzIGZvciBzaGFwZSBvdXRzaWRlIGRpcmVjdGx5IHNldCBv
biB0aGlzIGJsb2NrLgotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJ
bmZvID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBz
aGFwZUluc2lkZUluZm8gPSB0aGlzLT5zaGFwZUluc2lkZUluZm8oKTsKICAgICAvLyBGSVhNRSBC
dWcgMTAyODQ2OiBUYWtlIGludG8gYWNjb3VudCB0aGUgaGVpZ2h0IG9mIHRoZSBjb250ZW50LiBU
aGUgb2Zmc2V0IHNob3VsZCBiZQogICAgIC8vIGVxdWFsIHRvIHRoZSBtYXhpbXVtIHNlZ21lbnQg
bGVuZ3RoLgogICAgIGlmIChzaGFwZUluc2lkZUluZm8gJiYgc2hhcGVJbnNpZGVJbmZvLT5oYXNT
ZWdtZW50cygpICYmIHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKS5zaXplKCkgPT0gMSkgewpA
QCAtNDI0Nyw4ICs0MjQ2LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMo
KQogCiAgICAgICAgIHNldExvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgZmxvYXRM
b2dpY2FsTG9jYXRpb24ueSgpKTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYg
KGNoaWxkQm94LT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCkpCi0gICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGNoaWxkQm94LT5leGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvKCktPnNoYXBlTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgaWYgKGNo
aWxkQm94LT5zaGFwZU91dHNpZGVJbmZvKCkpCisgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGNoaWxkQm94LT5zaGFwZU91dHNpZGVJbmZvKCktPnNo
YXBlTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICBz
ZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JD
aGlsZChjaGlsZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5B
ZnRlckZvckNoaWxkKGNoaWxkQm94KSk7CkBAIC00NDM0LDcgKzQ0MzMsNyBAQCBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wLCBMYXlvdXRVbgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdCogbGFzdEZsb2F0ID0gYWRhcHRlci5sYXN0RmxvYXQoKTsKICAgICAgICAgaWYg
KG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBsYXN0RmxvYXQp
IHsKLSAgICAgICAgICAgIGlmIChFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNp
ZGUgPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKSkg
eworICAgICAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RG
bG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpKSB7CiAgICAgICAgICAgICAgICAg
c2hhcGVPdXRzaWRlLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKGxvZ2ljYWxUb3AgLSBsb2dpY2Fs
VG9wRm9yRmxvYXQobGFzdEZsb2F0KSArIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsVG9wKCks
IGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgICAgIGxlZnQgKz0gc2hhcGVPdXRzaWRlLT5y
aWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ0
OTIsNyArNDQ5MSw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNl
dEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVCiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCiAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBhZGFwdGVy
Lmxhc3RGbG9hdCgpOwogICAgICAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9h
dFNoYXBlT2Zmc2V0ICYmIGxhc3RGbG9hdCkgewotICAgICAgICAgICAgaWYgKEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKSB7CisgICAgICAgICAgICBpZiAoU2hhcGVPdXRzaWRl
SW5mbyogc2hhcGVPdXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJ
bmZvKCkpIHsKICAgICAgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0Zv
ckxpbmUobG9naWNhbFRvcCAtIGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgc2hhcGVP
dXRzaWRlLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAg
ICAgcmlnaHRGbG9hdE9mZnNldCArPSBzaGFwZU91dHNpZGUtPmxlZnRTZWdtZW50U2hhcGVCb3Vu
ZGluZ0JveERlbHRhKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCmluZGV4IGQzZGNhM2Y3NTg0MmMwMWM1OGNhY2YxNjFlOTcwNzk5ZmE4Y2FhZGYu
LjBhN2Q1OThhYmI0MTAxMjYzOWI4NGE2ZGE2ODg0Nzg0MzYwOGI1MTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgi
CisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0NiwyOCArNDQ2LDI4IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKiBlbnN1cmVFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKQorICAgIFNoYXBlSW5z
aWRlSW5mbyogZW5zdXJlU2hhcGVJbnNpZGVJbmZvKCkKICAgICB7CiAgICAgICAgIGlmICghbV9y
YXJlRGF0YSB8fCAhbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8pCi0gICAgICAgICAgICBz
ZXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjpjcmVh
dGVJbmZvKHRoaXMpKTsKKyAgICAgICAgICAgIHNldFNoYXBlSW5zaWRlSW5mbyhTaGFwZUluc2lk
ZUluZm86OmNyZWF0ZUluZm8odGhpcykpOwogICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9z
aGFwZUluc2lkZUluZm8uZ2V0KCk7CiAgICAgfQogCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25zdAorICAgIFNoYXBlSW5zaWRlSW5m
byogc2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0
YSB8fCAhbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8pCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9y
KHRoaXMpID8gbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8uZ2V0KCkgOiAwOworICAgICAg
ICByZXR1cm4gU2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IodGhpcykgPyBtX3JhcmVEYXRh
LT5tX3NoYXBlSW5zaWRlSW5mby5nZXQoKSA6IDA7CiAgICAgfQotICAgIHZvaWQgc2V0RXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvPiB2
YWx1ZSkKKyAgICB2b2lkIHNldFNoYXBlSW5zaWRlSW5mbyhQYXNzT3duUHRyPFNoYXBlSW5zaWRl
SW5mbz4gdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgICAg
ICBtX3JhcmVEYXRhID0gYWRvcHRQdHIobmV3IFJlbmRlckJsb2NrUmFyZURhdGEodGhpcykpOwog
ICAgICAgICBtX3JhcmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mbyA9IHZhbHVlOwogICAgIH0KICAg
ICB2b2lkIG1hcmtTaGFwZUluc2lkZURlc2NlbmRhbnRzRm9yTGF5b3V0KCk7Ci0gICAgRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKiBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25z
dDsKLSAgICBib29sIGFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSBjb25z
dCB7IHJldHVybiAhaXNJbmxpbmUoKSAmJiAhaXNGbG9hdGluZygpOyB9CisgICAgU2hhcGVJbnNp
ZGVJbmZvKiBsYXlvdXRTaGFwZUluc2lkZUluZm8oKSBjb25zdDsKKyAgICBib29sIGFsbG93c1No
YXBlSW5zaWRlSW5mb1NoYXJpbmcoKSBjb25zdCB7IHJldHVybiAhaXNJbmxpbmUoKSAmJiAhaXNG
bG9hdGluZygpOyB9CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtNTg1LDggKzU4NSw4IEBAIHBy
b3RlY3RlZDoKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICB2b2lkIGNv
bXB1dGVFeGNsdXNpb25TaGFwZVNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZUV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSosIGNv
bnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZEV4Y2x1c2lvblNoYXBlKTsKKyAgICB2b2lkIGNv
bXB1dGVTaGFwZVNpemUoKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5
bGVDaGFuZ2UoY29uc3QgU2hhcGVWYWx1ZSosIGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBlKTsK
ICNlbmRpZgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRy
ZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmpl
Y3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7
IH0KQEAgLTc4OSw3ICs3ODksNyBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgeFBvc2l0aW9u
Rm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25z
dAogICAgIHsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8oKTsKKyAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRl
ID0gY2hpbGQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgaWYgKHNo
YXBlT3V0c2lkZSkKICAgICAgICAgICAgIHJldHVybiBjaGlsZC0+eCgpOwogI2VuZGlmCkBAIC04
MDMsNyArODAzLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHlQb3NpdGlvbkZvckZsb2F0
SW5jbHVkaW5nTWFyZ2luKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QKICAgICB7
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvKCk7CisgICAgICAgIFNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxk
LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgICAgIGlmIChzaGFwZU91dHNp
ZGUpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKTsKICNlbmRpZgpAQCAtMTA4NCw4ICsx
MDg0LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91
dFN0YXRlJiwgYm9vbCBoYXNJbmxpbmVDaGlsZCk7CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxv
YXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJ
bmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGlu
ZUJpZGlTdGF0dXMsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKTsKICNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKLSAgICB2b2lkIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yRXhjbHVz
aW9ucyhFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qLCBMYXlvdXRVbml0JiwgTGluZUxheW91dFN0
YXRlJiwgYm9vbCYpOwotICAgIGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVp
Z2h0SWZOZWVkZWQoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCwgTGluZUxh
eW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29sdmVyJiwgRmxvYXRpbmdPYmplY3QqLCBJbmxpbmVJ
dGVyYXRvciYsIFdvcmRNZWFzdXJlbWVudHMmKTsKKyAgICB2b2lkIHVwZGF0ZUxpbmVCb3VuZGFy
aWVzRm9yU2hhcGVzKFNoYXBlSW5zaWRlSW5mbyosIExheW91dFVuaXQmLCBMaW5lTGF5b3V0U3Rh
dGUmLCBib29sJik7CisgICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWln
aHRJZk5lZWRlZChTaGFwZUluc2lkZUluZm8qLCBMYXlvdXRVbml0LCBMaW5lTGF5b3V0U3RhdGUm
LCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBGbG9hdGluZ09iamVjdCosIElubGluZUl0ZXJhdG9yJiwg
V29yZE1lYXN1cmVtZW50cyYpOwogI2VuZGlmCiAgICAgY29uc3QgSW5saW5lSXRlcmF0b3ImIHJl
c3RhcnRMYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMYXlvdXRVbml0IG9sZExvZ2ljYWxIZWln
aHQsIExheW91dFVuaXQgbmV3TG9naWNhbEhlaWdodCwgIEZsb2F0aW5nT2JqZWN0KiBsYXN0Rmxv
YXRGcm9tUHJldmlvdXNMaW5lLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCAgY29uc3QgSW5saW5lSXRl
cmF0b3ImKTsKICAgICB2b2lkIGxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUm
KTsKQEAgLTEyOTIsNyArMTI5Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBSb290SW5saW5lQm94
KiBtX2xpbmVCcmVha1RvQXZvaWRXaWRvdzsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAg
ICAgT3duUHRyPEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87Cisg
ICAgICAgIE93blB0cjxTaGFwZUluc2lkZUluZm8+IG1fc2hhcGVJbnNpZGVJbmZvOwogI2VuZGlm
CiAgICAgICAgIGJvb2wgbV9zaG91bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdyA6IDE7CiAgICAg
ICAgIGJvb2wgbV9kaXNjYXJkTWFyZ2luQmVmb3JlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggZmQ5YzdjOTQ2NWNk
NjYxOWQyZDFmOWRkNzFmMDc2NDdiNGMxMTM2Yi4uNzA0NTk4ZDIwN2ZmNGNkNTIxOGQzYjQ0YTVk
MDA5OTQxYzg2MWNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVk
ZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZv
LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVkcpCkBAIC03NywxNiArNzcsMTYgQEAgc3RhdGlj
IExheW91dFVuaXQgbG9naWNhbEhlaWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2Nr
LCBib29sIGlzRmlyc3RMaW4KIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCkgY29uc3QKK1NoYXBlSW5zaWRlSW5mbyogUmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5z
aWRlSW5mbygpIGNvbnN0CiB7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUlu
c2lkZUluZm8gPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
bygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdmlldygpLT5sYXlv
dXRTdGF0ZSgpLT5zaGFwZUluc2lkZUluZm8oKTsKIAotICAgIGlmICghc2hhcGVJbnNpZGVJbmZv
ICYmIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSAmJiBhbGxvd3NFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm9TaGFyaW5nKCkpIHsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbyAmJiBmbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCkgJiYgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKSB7
CiAgICAgICAgIC8vIHJlZ2lvbkF0QmxvY2tPZmZzZXQgcmV0dXJucyByZWdpb25zIGxpa2UgYW4g
YXJyYXkgZmlyc3Q9ezAsTi0xfSwgc2Vjb25kPXtOLE0tMX0sIC4uLgogICAgICAgICBMYXlvdXRV
bml0IG9mZnNldCA9IGxvZ2ljYWxIZWlnaHQoKSArIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKHRoaXMs
IGZhbHNlKSAtIExheW91dFVuaXQoMSk7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0g
cmVnaW9uQXRCbG9ja09mZnNldChvZmZzZXQpOwogICAgICAgICBpZiAocmVnaW9uKQotICAgICAg
ICAgICAgc2hhcGVJbnNpZGVJbmZvID0gcmVnaW9uLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KTsKKyAgICAgICAgICAgIHNoYXBlSW5zaWRlSW5mbyA9IHJlZ2lvbi0+c2hhcGVJbnNpZGVJbmZv
KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mbzsKQEAgLTExNCw5ICsxMTQs
OSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoYmxvY2spOwogI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQotICAgICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
OwotICAgICAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKQotICAgICAgICAgICAgbV9z
ZWdtZW50ID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOworICAg
ICAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dFNo
YXBlSW5zaWRlSW5mbygpOworICAgICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKQorICAgICAgICAg
ICAgbV9zZWdtZW50ID0gc2hhcGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOwogI2VuZGlm
CiAgICAgICAgIHVwZGF0ZUF2YWlsYWJsZVdpZHRoKCk7CiAgICAgfQpAQCAtMTk2LDIxICsxOTYs
MjEgQEAgaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zs
b2F0SWZOZWVkZWQoUmVuZGVyQmxvY2s6OkZsb2EKICAgICAvLyB3aGVuIHdlIGFkZCBhIHN1YnNl
cXVlbnQgZmxvYXQgb24gdGhlIHNhbWUgbGluZSwgd2UgbmVlZCB0byB1bmRvIHRoZSBzaGFwZSBk
ZWx0YSBpbiBvcmRlciB0byBwb3NpdGlvbgogICAgIC8vIGJhc2VkIG9uIHRoZSBib3VuZGluZyBi
b3guIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhl
IGZsb2F0aW5nIG9iamVjdCBsaXN0IHRvIGZpbmQKICAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMg
ZmxvYXQgdGhhdCBpcyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBFeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvKiBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CisgICAgU2hh
cGVPdXRzaWRlSW5mbyogbGFzdFNoYXBlT3V0c2lkZUluZm8gPSAwOwogICAgIGNvbnN0IFJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5t
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7CiAgICAgZm9yICgtLWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkgewogICAgICAgICBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9ICppdDsKICAgICAgICAgaWYgKGxh
c3RGbG9hdCAhPSBuZXdGbG9hdCAmJiBsYXN0RmxvYXQtPnR5cGUoKSA9PSBuZXdGbG9hdC0+dHlw
ZSgpKSB7Ci0gICAgICAgICAgICBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IGxhc3RGbG9hdC0+cmVu
ZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICAgICAgbGFzdFNo
YXBlT3V0c2lkZUluZm8gPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8o
KTsKICAgICAgICAgICAgIGlmIChsYXN0U2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgICAg
ICBsYXN0U2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5s
b2dpY2FsSGVpZ2h0KCkgLSBtX2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSAr
IGxhc3RTaGFwZU91dHNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZv
ckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNp
ZGVJbmZvID0gbmV3RmxvYXQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8o
KTsKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJl
bmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykK
ICAgICAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2Nr
LT5sb2dpY2FsSGVpZ2h0KCkgLSBtX2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQp
ICsgc2hhcGVPdXRzaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHRGb3JM
aW5lKG1fYmxvY2ssIG1faXNGaXJzdExpbmUpKTsKICNlbmRpZgpAQCAtMTAzNSwxMCArMTAzNSwx
MCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9y
TGluZShSb290SW5saW5lQm94KiBsaW5lQm94LAogICAgIHVwZGF0ZUxvZ2ljYWxJbmxpbmVQb3Np
dGlvbnModGhpcywgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVM
b2dpY2FsV2lkdGgsIGlzRmlyc3RMaW5lLCBzaG91bGRJbmRlbnRUZXh0LCAwKTsKICAgICBib29s
IG5lZWRzV29yZFNwYWNpbmc7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8oKTsKLSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYm
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5z
aWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAg
aWYgKHNoYXBlSW5zaWRlSW5mbyAmJiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsK
ICAgICAgICAgQmlkaVJ1biogc2VnbWVudFN0YXJ0ID0gZmlyc3RSdW47Ci0gICAgICAgIGNvbnN0
IFNlZ21lbnRMaXN0JiBzZWdtZW50cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVu
dHMoKTsKKyAgICAgICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzID0gc2hhcGVJbnNpZGVJ
bmZvLT5zZWdtZW50cygpOwogICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1heDxmbG9hdD4o
cm91bmRUb0ludChzZWdtZW50c1swXS5sb2dpY2FsTGVmdCksIGxpbmVMb2dpY2FsTGVmdCk7CiAg
ICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodCA9IG1pbjxmbG9hdD4oZmxvb3JUb0ludChzZWdtZW50
c1swXS5sb2dpY2FsUmlnaHQpLCBsaW5lTG9naWNhbFJpZ2h0KTsKICAgICAgICAgZmxvYXQgc3Rh
cnRMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0OwpAQCAtMTM1OSwxMyArMTM1OSwxMyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2Nr
KiBibG9jaywgSW5saW5lQmlkaQogICAgIFVOVVNFRF9QQVJBTShibG9jayk7CiAgICAgY29uc3Ry
dWN0QmlkaVJ1bnNGb3JTZWdtZW50KHRvcFJlc29sdmVyLCBiaWRpUnVucywgZW5kT2ZMaW5lLCBv
dmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICNlbHNlCi0gICAgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBibG9jay0+bGF5b3V0
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lk
ZUluZm8gfHwgIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAg
IFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gYmxvY2stPmxheW91dFNoYXBlSW5z
aWRlSW5mbygpOworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8t
Pmhhc1NlZ21lbnRzKCkpIHsKICAgICAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KHRv
cFJlc29sdmVyLCBiaWRpUnVucywgZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFNlZ21lbnRS
YW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNlZ21l
bnRSYW5nZXMoKTsKKyAgICBjb25zdCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0g
c2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50UmFuZ2VzKCk7CiAgICAgQVNTRVJUKHNlZ21lbnRSYW5n
ZXMuc2l6ZSgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudFJhbmdlcy5z
aXplKCk7IGkrKykgewpAQCAtMTYzMSwyNiArMTYzMSwyNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0
IGZpcnN0UG9zaXRpdmVXaWR0aChjb25zdCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1l
bnRzKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0
TG9naWNhbExpbmVUb3AoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8sIElubGluZUl0ZXJhdG9yIHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0
IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCitzdGF0aWMgaW5saW5lIExheW91
dFVuaXQgYWRqdXN0TG9naWNhbExpbmVUb3AoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUlu
Zm8sIElubGluZUl0ZXJhdG9yIHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRN
ZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8gfHwgZW5kICE9IHN0YXJ0KQorICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8
IGVuZCAhPSBzdGFydCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBmbG9hdCBtaW5XaWR0aCA9
IGZpcnN0UG9zaXRpdmVXaWR0aCh3b3JkTWVhc3VyZW1lbnRzKTsKICAgICBBU1NFUlQobWluV2lk
dGggfHwgd29yZE1lYXN1cmVtZW50cy5pc0VtcHR5KCkpOwotICAgIGlmIChtaW5XaWR0aCA+IDAg
JiYgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5hZGp1c3RMb2dpY2FsTGluZVRvcChtaW5XaWR0
aCkpCi0gICAgICAgIHJldHVybiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxvZ2ljYWxMaW5l
VG9wKCk7CisgICAgaWYgKG1pbldpZHRoID4gMCAmJiBzaGFwZUluc2lkZUluZm8tPmFkanVzdExv
Z2ljYWxMaW5lVG9wKG1pbldpZHRoKSkKKyAgICAgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+
bG9naWNhbExpbmVUb3AoKTsKIAotICAgIHJldHVybiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8t
PnNoYXBlTG9naWNhbEJvdHRvbSgpOworICAgIHJldHVybiBzaGFwZUluc2lkZUluZm8tPnNoYXBl
TG9naWNhbEJvdHRvbSgpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91bmRh
cmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8sIExheW91dFVuaXQmIGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgYm9vbCYgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSkKK3Zv
aWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yU2hhcGVzKFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvLCBMYXlvdXRVbml0JiBhYnNvbHV0ZUxvZ2ljYWxUb3AsIExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wmIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJ
bnNpZGUpCiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gdGhpcy0+bG9naWNhbEhl
aWdodCgpOwogICAgIFJlbmRlclJlZ2lvbiogY3VycmVudFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tP
ZmZzZXQobG9naWNhbEhlaWdodCk7CiAgICAgaWYgKGN1cnJlbnRSZWdpb24pCi0gICAgICAgIGV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
OwotICAgIGlmICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKQorICAgICAgICBzaGFwZUluc2lk
ZUluZm8gPSBsYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5m
bykKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0VW5pdCBsaW5lVG9wID0gbG9naWNhbEhl
aWdodCArIGFic29sdXRlTG9naWNhbFRvcDsKQEAgLTE2NTgsMTggKzE2NTgsMTggQEAgdm9pZCBS
ZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyogZXgKIAogICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpIHsK
ICAgICAgICAgUmVuZGVyUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChs
b2dpY2FsSGVpZ2h0ICsgbGluZUhlaWdodCAtIExheW91dFVuaXQoMSkpOwotICAgICAgICBsaW5l
VG9wICs9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSgpOworICAgICAgICBsaW5lVG9wICs9IHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogICAgICAgICAvLyBDb250ZW50IGluIGEgZmxvdyB0
aHJlYWQgaXMgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGhyZWFkLCBidXQgdGhl
IHNoYXBlIGNhbGN1bGF0aW9uIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByZWdp
b24uCiAgICAgICAgIGlmIChjdXJyZW50UmVnaW9uID09IG5leHRSZWdpb24pCiAgICAgICAgICAg
ICBsaW5lVG9wIC09IGN1cnJlbnRSZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVu
dCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBCdWcgOTUzNjE6IEl0IGlzIHBvc3NpYmxlIGZv
ciBhIGxpbmUgdG8gZ3JvdyBiZXlvbmQgbGluZUhlaWdodCwgaW4gd2hpY2ggY2FzZSB0aGVzZSBz
ZWdtZW50cyBtYXkgYmUgaW5jb3JyZWN0LgotICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+
Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKKyAgICBzaGFwZUlu
c2lkZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CiAK
ICAgICAvLyBUaGUgb3ZlcmZsb3cgc2hvdWxkIGJlIHB1c2hlZCBiZWxvdyB0aGUgY29udGVudCBi
b3gKLSAgICBMYXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLT5zaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpOwotICAgIGlmICgh
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSAmJiAhbGlu
ZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSAmJiBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCkg
eworICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgPSBzaGFwZUluc2lk
ZUluZm8tPnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KCk7CisgICAgaWYgKCFzaGFwZUluc2lk
ZUluZm8tPmxpbmVXaXRoaW5TaGFwZUJvdW5kcygpICYmICFsaW5lT3ZlcmZsb3dzRnJvbVNoYXBl
SW5zaWRlICYmIHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7CiAgICAgICAgIGxpbmVPdmVy
Zmxvd3NGcm9tU2hhcGVJbnNpZGUgPSB0cnVlOwogICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2lj
YWxIZWlnaHQgPSBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodDsKIApAQCAtMTY4MSw5ICsxNjgx
LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25z
KEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXgKICAgICAgICAgICAgIG5ld0xvZ2ljYWxIZWln
aHQgPSBsb2dpY2FsSGVpZ2h0ICsgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgLSBsaW5lVG9w
IC0gY3VycmVudFJlZ2lvbi0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogCiAgICAgICAgICAg
ICBSZW5kZXJSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG5ld0xvZ2lj
YWxIZWlnaHQpOwotICAgICAgICAgICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBuZXh0U2hh
cGVJbmZvID0gMDsKKyAgICAgICAgICAgIFNoYXBlSW5zaWRlSW5mbyogbmV4dFNoYXBlSW5mbyA9
IDA7CiAgICAgICAgICAgICBpZiAobmV4dFJlZ2lvbikKLSAgICAgICAgICAgICAgICBuZXh0U2hh
cGVJbmZvID0gbmV4dFJlZ2lvbi0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAg
ICAgICAgICAgbmV4dFNoYXBlSW5mbyA9IG5leHRSZWdpb24tPnNoYXBlSW5zaWRlSW5mbygpOwog
CiAgICAgICAgICAgICAvLyBUaGUgb3ZlcmZsb3cgZmxvd3MgaW50byBhbm90aGVyIHJlZ2lvbiB3
aXRoIHNoYXBlLWluc2lkZQogICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWdpb24gIT0gbmV4dFJl
Z2lvbiAmJiBuZXh0U2hhcGVJbmZvKSB7CkBAIC0xNjkyLDcgKzE2OTIsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKiBleAogICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbmV4dFNo
YXBlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkgLSBuZXh0UmVnaW9uLT5ib3JkZXJBbmRQYWRkaW5n
QmVmb3JlKCk7CiAgICAgICAgICAgICAgICAgbmV4dFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21lbnRz
Rm9yTGluZShvZmZzZXQsIGxpbmVIZWlnaHQpOwogCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvID0gbmV4dFNoYXBlSW5mbzsKKyAgICAgICAgICAgICAgICBzaGFwZUlu
c2lkZUluZm8gPSBuZXh0U2hhcGVJbmZvOwogICAgICAgICAgICAgICAgIGxpbmVPdmVyZmxvd3NG
cm9tU2hhcGVJbnNpZGUgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcw
MCw5ICsxNzAwLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JF
eGNsdXNpb25zKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXgKICAgICB9CiB9CiAKLWJvb2wg
UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVk
KEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBMYXlv
dXRVbml0IGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwg
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZy
b21QcmV2aW91c0xpbmUsIElubGluZUl0ZXJhdG9yJiBlbmQsIFdvcmRNZWFzdXJlbWVudHMmIHdv
cmRNZWFzdXJlbWVudHMpCitib29sIFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGluZVRvcEFu
ZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywg
TGF5b3V0VW5pdCBhYnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0Rmxv
YXRGcm9tUHJldmlvdXNMaW5lLCBJbmxpbmVJdGVyYXRvciYgZW5kLCBXb3JkTWVhc3VyZW1lbnRz
JiB3b3JkTWVhc3VyZW1lbnRzKQogewotICAgIExheW91dFVuaXQgYWRqdXN0ZWRMb2dpY2FsTGlu
ZVRvcCA9IGFkanVzdExvZ2ljYWxMaW5lVG9wKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgcmVz
b2x2ZXIucG9zaXRpb24oKSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKTsKKyAgICBMYXlvdXRVbml0
IGFkanVzdGVkTG9naWNhbExpbmVUb3AgPSBhZGp1c3RMb2dpY2FsTGluZVRvcChzaGFwZUluc2lk
ZUluZm8sIHJlc29sdmVyLnBvc2l0aW9uKCksIGVuZCwgd29yZE1lYXN1cmVtZW50cyk7CiAgICAg
aWYgKCFhZGp1c3RlZExvZ2ljYWxMaW5lVG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTE3MjksMTkgKzE3MjksMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0
c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KIAogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQogICAgIExheW91dFVuaXQgYWJzb2x1dGVMb2dpY2FsVG9wOwotICAgIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbykgewotICAgICAgICBBU1NFUlQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5vd25lcigp
ID09IHRoaXMgfHwgYWxsb3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKTsKLSAg
ICAgICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5leGNsdXNpb25TaGFw
ZUluc2lkZUluZm8oKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0g
bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbykgeworICAg
ICAgICBBU1NFUlQoc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzU2hh
cGVJbnNpZGVJbmZvU2hhcmluZygpKTsKKyAgICAgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAhPSB0
aGlzLT5zaGFwZUluc2lkZUluZm8oKSkgewogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMDI4
NDogSWYgc3Vic2VxdWVudCBMYXlvdXRTdGF0ZXMgYXJlIHB1c2hlZCwgd2Ugd2lsbCBoYXZlIHRv
IGFkZAogICAgICAgICAgICAgLy8gdGhlaXIgb2Zmc2V0cyBmcm9tIHRoZSBvcmlnaW5hbCBzaGFw
ZS1pbnNpZGUgY29udGFpbmVyLgogICAgICAgICAgICAgYWJzb2x1dGVMb2dpY2FsVG9wID0gbG9n
aWNhbFRvcCgpOwogICAgICAgICB9CiAgICAgICAgIC8vIEJlZ2luIGxheW91dCBhdCB0aGUgbG9n
aWNhbCB0b3Agb2Ygb3VyIHNoYXBlIGluc2lkZS4KLSAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQo
KSArIGFic29sdXRlTG9naWNhbFRvcCA8IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVM
b2dpY2FsVG9wKCkpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkgLSBhYnNvbHV0ZUxvZ2lj
YWxUb3A7CisgICAgICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgKyBhYnNvbHV0ZUxvZ2ljYWxUb3Ag
PCBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpKSB7CisgICAgICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgp
IC0gYWJzb2x1dGVMb2dpY2FsVG9wOwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dU
aHJlYWQoKSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworICAgICAgICAg
ICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJB
bmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxI
ZWlnaHQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTc2OSw3ICsxNzY5LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgSW5saW4KICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmUgPSAoY29udGFpbnNGbG9hdHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCku
bGFzdCgpIDogMDsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICB1cGRhdGVMaW5l
Qm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0
ZUxvZ2ljYWxUb3AsIGxheW91dFN0YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKTsK
KyAgICAgICAgdXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMoc2hhcGVJbnNpZGVJbmZvLCBh
YnNvbHV0ZUxvZ2ljYWxUb3AsIGxheW91dFN0YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5z
aWRlKTsKICNlbmRpZgogICAgICAgICBXb3JkTWVhc3VyZW1lbnRzIHdvcmRNZWFzdXJlbWVudHM7
CiAgICAgICAgIGVuZCA9IGxpbmVCcmVha2VyLm5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGxheW91
dFN0YXRlLmxpbmVJbmZvKCksIHJlbmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CkBAIC0x
Nzg1LDcgKzE3ODUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5S
YW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogICAgICAgICB9CiAKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYgKGFkanVzdExvZ2ljYWxMaW5lVG9wQW5k
TG9naWNhbEhlaWdodElmTmVlZGVkKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVM
b2dpY2FsVG9wLCBsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIGVuZCwgd29yZE1lYXN1cmVtZW50cykpCisgICAgICAgIGlmIChhZGp1c3RMb2dpY2FsTGlu
ZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChzaGFwZUluc2lkZUluZm8sIGFic29sdXRlTG9n
aWNhbFRvcCwgbGF5b3V0U3RhdGUsIHJlc29sdmVyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5l
LCBlbmQsIHdvcmRNZWFzdXJlbWVudHMpKQogICAgICAgICAgICAgY29udGludWU7CiAjZW5kaWYK
ICAgICAgICAgQVNTRVJUKGVuZCAhPSByZXNvbHZlci5wb3NpdGlvbigpKTsKQEAgLTI3MzgsMjkg
KzI3MzgsMjkgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0
TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2wKICNpZiAhRU5BQkxFKENTU19TSEFQ
RVMpCiAgICAgcmV0dXJuIG5leHRTZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5k
ZXJUZXh0SW5mbywgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5h
dGVkTGluZXMsIHdvcmRNZWFzdXJlbWVudHMpOwogI2Vsc2UKLSAgICBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJ
bmZvID0gbV9ibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CiAKLSAgICBpZiAoIWV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbyB8fCAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5saW5lT3Zl
cmxhcHNTaGFwZUJvdW5kcygpKQorICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUlu
c2lkZUluZm8tPmxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkpCiAgICAgICAgIHJldHVybiBuZXh0
U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9h
dEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3Vy
ZW1lbnRzKTsKIAogICAgIC8vIEluIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlIHdlIGhhdmUg
dG8gdXNlIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgdG8gZGV0ZXJtaW5lIHRoZSBsaW5lIHNl
Z21lbnRzIHNpbmNlIHNoYXBlLW91dHNpZGUncyBjb2RlcGF0aHMgdXNlcyB0aGUgc2FtZSBjb2Rl
IHRvIGRldGVybWluZSBpdHMgc2VnbWVudHMuIFRoZSBsaW5lIGNvbnRhaW5pbmcgaXMgbm90IGEg
cmVxdWlyZW1lbnQgZm9yIHNoYXBlLW91dHNpZGUsCiAgICAgLy8gc28gaW4gdGhpcyBjYXNlIHdl
IGNhbiBlbmQgdXAgd2l0aCBzb21lIGV4dHJhIHNlZ21lbnRzIGZvciB0aGUgb3ZlcmZsb3dpbmcg
Y29udGVudCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gYXBwbHkgdGhlIHNlZ21lbnRzIGZvciB0aGUg
b3ZlcmZsb3dpbmcgY29udGVudCwgc28gd2UgbmVlZCB0byByZXNldCBpdC4KLSAgICBpZiAoIW1f
YmxvY2stPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSAmJiAhZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSkgewotICAgICAgICBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8tPmNsZWFyU2VnbWVudHMoKTsKKyAgICBpZiAoIW1fYmxvY2stPmZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKSAmJiAhc2hhcGVJbnNpZGVJbmZvLT5saW5lV2l0aGluU2hhcGVC
b3VuZHMoKSkgeworICAgICAgICBzaGFwZUluc2lkZUluZm8tPmNsZWFyU2VnbWVudHMoKTsKICAg
ICAgICAgcmV0dXJuIG5leHRTZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJU
ZXh0SW5mbywgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVk
TGluZXMsIHdvcmRNZWFzdXJlbWVudHMpOwogICAgIH0KIAogICAgIElubGluZUl0ZXJhdG9yIGVu
ZCA9IHJlc29sdmVyLnBvc2l0aW9uKCk7CiAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5k
OwogCi0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsK
KyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgewogICAgICAgICBlbmQg
PSBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxh
c3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3Jk
TWVhc3VyZW1lbnRzKTsKICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3Rl
ZElzb2xhdGVzKG9sZEVuZCk7CiAgICAgICAgIHJldHVybiBvbGRFbmQ7CiAgICAgfQogCi0gICAg
Y29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5z
ZWdtZW50cygpOwotICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBleGNsdXNp
b25TaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5nZXMoKTsKKyAgICBjb25zdCBTZWdtZW50TGlz
dCYgc2VnbWVudHMgPSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCk7CisgICAgU2VnbWVudFJh
bmdlTGlzdCYgc2VnbWVudFJhbmdlcyA9IHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygp
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21lbnRzLnNpemUoKSAmJiAhZW5k
LmF0RW5kKCk7IGkrKykgewogICAgICAgICBJbmxpbmVJdGVyYXRvciBzZWdtZW50U3RhcnQgPSBy
ZXNvbHZlci5wb3NpdGlvbigpOwpAQCAtMzM5OCw3ICszMzk4LDcgQEAgSW5saW5lSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKElubGluZUJpZGlSZXNv
bHZlciYgcmUKIAogIGVuZDoKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qIHNoYXBlSW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbmZvID0gbV9ibG9jay0+
bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgYm9vbCBzZWdtZW50QWxsb3dzT3ZlcmZsb3cg
PSAhc2hhcGVJbmZvIHx8ICFzaGFwZUluZm8tPmhhc1NlZ21lbnRzKCk7CiAjZWxzZQogICAgIGJv
b2wgc2VnbWVudEFsbG93c092ZXJmbG93ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKaW5kZXggMTE0ZGY1YjBiMjYyNzkyZjFiOTNkNzY5NDkxOWFiNTZhMmYyNTEx
ZS4uMjdjNDZlZjAxNDBjMjc0NTNmYzZjNjY2NjE2ODBhNGFlMjViYjE5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFJlbmRl
ckJveDo6d2lsbEJlRGVzdHJveWVkKCkKICAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhl
aWdodERlc2NlbmRhbnRJZk5lZWRlZCh0aGlzKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
ICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CisgICAgU2hh
cGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKICNlbmRpZgogCiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpOwpAQCAtMzE1LDIyICszMTUsMjIgQEAgdm9p
ZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAg
ICB1cGRhdGVFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShzdHlsZSgp
LT5zaGFwZU91dHNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVPdXRzaWRlKCkgOiAw
KTsKKyAgICB1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShzdHlsZSgpLT5z
aGFwZU91dHNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVPdXRzaWRlKCkgOiAwKTsK
ICNlbmRpZgogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi12b2lkIFJlbmRlckJveDo6dXBk
YXRlRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVz
aW9uU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBv
bGRTaGFwZU91dHNpZGUpCit2b2lkIFJlbmRlckJveDo6dXBkYXRlU2hhcGVPdXRzaWRlSW5mb0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBTaGFw
ZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUpCiB7CiAgICAgLy8gRklYTUU6IEEgZnV0dXJlIG9wdGlt
aXphdGlvbiB3b3VsZCBkbyBhIGRlZXAgY29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuIChidWcgMTAw
ODExKQogICAgIGlmIChzaGFwZU91dHNpZGUgPT0gb2xkU2hhcGVPdXRzaWRlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoc2hhcGVPdXRzaWRlKSB7Ci0gICAgICAgIEV4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gPSBFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvOjplbnN1cmVJbmZvKHRoaXMpOwotICAgICAgICBleGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGVJbmZvID0gU2hhcGVPdXRzaWRlSW5mbzo6ZW5zdXJlSW5mbyh0aGlzKTsKKyAgICAg
ICAgc2hhcGVPdXRzaWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKKyAgICAgICAg
U2hhcGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggOWFiZjZiNDgwYWY3ZTM4ZjZhODdiZDQ0NWMw
YTczOTBjNDA0MDdmOC4uYTdmYzFlY2VjZmQzYzgwNjFjYTFiNmRmMGMwM2Q3NGM5OGI2NjkxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMjcsNyArMjcsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlck92ZXJmbG93LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgi
CisjaW5jbHVkZSAiU2hhcGVPdXRzaWRlSW5mby5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTU3Nyw5ICs1NzcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTYW1lRGlyZWN0
aW9uQXMoY29uc3QgUmVuZGVyQm94KiBvYmplY3QpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmRp
cmVjdGlvbigpID09IG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7IH0KIAogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIGV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8oKSBjb25zdAorICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lk
ZUluZm8oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzRmxvYXRpbmdXaXRoU2hhcGVP
dXRzaWRlKCkgJiYgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMp
ID8gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6aW5mbyh0aGlzKSA6IDA7CisgICAgICAgIHJl
dHVybiBpc0Zsb2F0aW5nV2l0aFNoYXBlT3V0c2lkZSgpICYmIFNoYXBlT3V0c2lkZUluZm86Omlz
RW5hYmxlZEZvcih0aGlzKSA/IFNoYXBlT3V0c2lkZUluZm86OmluZm8odGhpcykgOiAwOwogICAg
IH0KICNlbmRpZgogCkBAIC02MjQsNyArNjI0LDcgQEAgcHJvdGVjdGVkOgogIAogcHJpdmF0ZToK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICB2b2lkIHVwZGF0ZUV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBl
T3V0c2lkZSwgY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKTsKKyAg
ICB2b2lkIHVwZGF0ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBl
VmFsdWUqIHNoYXBlT3V0c2lkZSwgY29uc3QgU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKTsK
ICNlbmRpZgogCiAgICAgYm9vbCBmaXhlZEVsZW1lbnRMYXlzT3V0UmVsYXRpdmVUb0ZyYW1lKEZy
YW1lKiwgRnJhbWVWaWV3KikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA2MWJiMWM2MzcwYzA5YzhlZDZlYTU1ZmQx
ZTJhNDY0MjI1ZjcyMzk1Li5hYmFkNWI3MmEzOTQyN2EzMDQ4ZTUxYmY0OWFmY2ZhNTNmMDQxZTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKQEAgLTYyNyw3ICs2MjcsNyBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludE9mZnNldCgpIGNvbnN0CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBpZiAo
aXNCb3goKSAmJiBpc0Zsb2F0aW5nKCkpCi0gICAgICAgIGlmIChFeGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvKiBzaGFwZU91dHNpZGUgPSB0b1JlbmRlckJveCh0aGlzKS0+ZXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mbygpKQorICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRl
ID0gdG9SZW5kZXJCb3godGhpcyktPnNoYXBlT3V0c2lkZUluZm8oKSkKICAgICAgICAgICAgIG9m
ZnNldCAtPSBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbE9mZnNldCgpOwogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDg4YTA4Yjg4YTM1NmRkNzk3NDBl
NmFkYWQ3OTM1MzVlZTIxZWQ5NjUuLmFlNTQzNGZjNTk3ZThhNGJmZDY5MDRjMzQxM2IwNmJiYzU2
ZDZkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMjQ5LDggKzI0
OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IG1fbGF5
b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKSB8fCByZW5k
ZXJlci0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpCiAgICAgICAgICAgICB8fCBtX2xheW91
dFN0YXRlLT5saW5lR3JpZCgpIHx8IChyZW5kZXJlci0+c3R5bGUoKS0+bGluZUdyaWQoKSAhPSBS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVHcmlkKCkgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkp
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgICAgICB8fCAocmVuZGVyZXItPmlzUmVu
ZGVyQmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+ZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKCkpCi0gICAgICAgICAgICB8fCAobV9sYXlvdXRTdGF0ZS0+ZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCkgJiYgcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9j
ayhyZW5kZXJlciktPmFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKKyAg
ICAgICAgICAgIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2so
cmVuZGVyZXIpLT5zaGFwZUluc2lkZUluZm8oKSkKKyAgICAgICAgICAgIHx8IChtX2xheW91dFN0
YXRlLT5zaGFwZUluc2lkZUluZm8oKSAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICF0
b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQog
I2VuZGlmCiAgICAgICAgICAgICApIHsKICAgICAgICAgICAgIHB1c2hMYXlvdXRTdGF0ZUZvckN1
cnJlbnRGbG93VGhyZWFkKHJlbmRlcmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjEyNGZkNTYwNzMzNTYzYjRh
MGM4NzhhMzg2ZmQ0NDBjYTUyODMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwCkBAIC0wLDAgKzEsNTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgorCisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEVk
Z2VJbnRlcnNlY3Rpb25UeXBlIHsKKyAgICBOb3JtYWwsCisgICAgVmVydGV4TWluWSwKKyAgICBW
ZXJ0ZXhNYXhZLAorICAgIFZlcnRleFlCb3RoCit9OworCitzdHJ1Y3QgRWRnZUludGVyc2VjdGlv
biB7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZTsKKyAgICBGbG9hdFBvaW50IHBv
aW50OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHR5cGU7Cit9OworCitzdGF0aWMgaW5saW5l
IGZsb2F0IGxlZnRTaWRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiAoKHBv
aW50LngoKSAtIHZlcnRleDEueCgpKSAqICh2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkgLSAo
KHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpICogKHBvaW50LnkoKSAtIHZlcnRleDEueSgpKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1JlZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50
JiBwcmV2VmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQm
IG5leHRWZXJ0ZXgpCit7CisgICAgcmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0
ZXgsIHZlcnRleCkgPCAwOworfQorCitzdGF0aWMgYm9vbCBjb21wdXRlWEludGVyc2VjdGlvbihj
b25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxvYXQgeSwgRWRnZUludGVyc2Vj
dGlvbiYgcmVzdWx0KQoreworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRn
ZVBvaW50ZXI7CisKKyAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9
IGVkZ2UudmVydGV4MSgpOworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZl
cnRleDIoKTsKKyAgICBmbG9hdCBkeSA9IHZlcnRleDIueSgpIC0gdmVydGV4MS55KCk7CisKKyAg
ICBmbG9hdCBpbnRlcnNlY3Rpb25YOworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIGludGVyc2Vj
dGlvblR5cGU7CisKKyAgICBpZiAoIWR5KSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBW
ZXJ0ZXhZQm90aDsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9IGVkZ2UubWluWCgpOworICAgIH0g
ZWxzZSBpZiAoeSA9PSBlZGdlLm1pblkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0g
VmVydGV4TWluWTsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRl
eDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4Mi54KCk7CisgICAgfSBlbHNlIGlmICh5ID09
IGVkZ2UubWF4WSgpKSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNYXhZOwor
ICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkpID8gdmVy
dGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcnNlY3Rp
b25UeXBlID0gTm9ybWFsOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gKCh5IC0gdmVydGV4MS55
KCkpICogKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpIC8gZHkpICsgdmVydGV4MS54KCk7Cisg
ICAgfQorCisgICAgcmVzdWx0LmVkZ2UgPSBlZGdlUG9pbnRlcjsKKyAgICByZXN1bHQudHlwZSA9
IGludGVyc2VjdGlvblR5cGU7CisgICAgcmVzdWx0LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBpbndh
cmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UpCit7CisgICAgRmxvYXRT
aXplIGVkZ2VEZWx0YSA9IGVkZ2UudmVydGV4MigpIC0gZWRnZS52ZXJ0ZXgxKCk7CisgICAgaWYg
KCFlZGdlRGVsdGEud2lkdGgoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgoZWRnZURlbHRh
LmhlaWdodCgpID4gMCA/IC0xIDogMSksIDApOworICAgIGlmICghZWRnZURlbHRhLmhlaWdodCgp
KQorICAgICAgICByZXR1cm4gRmxvYXRTaXplKDAsIChlZGdlRGVsdGEud2lkdGgoKSA+IDAgPyAx
IDogLTEpKTsKKyAgICBmbG9hdCBlZGdlTGVuZ3RoID0gZWRnZURlbHRhLmRpYWdvbmFsTGVuZ3Ro
KCk7CisgICAgcmV0dXJuIEZsb2F0U2l6ZSgtZWRnZURlbHRhLmhlaWdodCgpIC8gZWRnZUxlbmd0
aCwgZWRnZURlbHRhLndpZHRoKCkgLyBlZGdlTGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSBG
bG9hdFNpemUgb3V0d2FyZEVkZ2VOb3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkK
K3sKKyAgICByZXR1cm4gLWlud2FyZEVkZ2VOb3JtYWwoZWRnZSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBhcHBlbmRBcmMoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNlcywgY29uc3QgRmxv
YXRQb2ludCYgYXJjQ2VudGVyLCBmbG9hdCBhcmNSYWRpdXMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0QXJjVmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiBlbmRBcmNWZXJ0ZXgsIGJvb2wgcGFkZGlu
ZykKK3sKKyAgICBmbG9hdCBzdGFydEFuZ2xlID0gYXRhbjIoc3RhcnRBcmNWZXJ0ZXgueSgpIC0g
YXJjQ2VudGVyLnkoKSwgc3RhcnRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7CisgICAg
ZmxvYXQgZW5kQW5nbGUgPSBhdGFuMihlbmRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwg
ZW5kQXJjVmVydGV4LngoKSAtIGFyY0NlbnRlci54KCkpOworICAgIGNvbnN0IGZsb2F0IHR3b1BJ
ID0gcGlGbG9hdCAqIDI7CisgICAgaWYgKHN0YXJ0QW5nbGUgPCAwKQorICAgICAgICBzdGFydEFu
Z2xlICs9IHR3b1BJOworICAgIGlmIChlbmRBbmdsZSA8IDApCisgICAgICAgIGVuZEFuZ2xlICs9
IHR3b1BJOworICAgIGZsb2F0IGFuZ2xlID0gKHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgPyAoc3Rh
cnRBbmdsZSAtIGVuZEFuZ2xlKSA6IChzdGFydEFuZ2xlICsgdHdvUEkgLSBlbmRBbmdsZSk7Cisg
ICAgY29uc3QgZmxvYXQgYXJjU2VnbWVudENvdW50ID0gNjsgLy8gQW4gZXZlbiBudW1iZXIgc28g
dGhhdCBvbmUgYXJjIHZlcnRleCB3aWxsIGJlIGVhY3RseSBhcmNSYWRpdXMgZnJvbSBhcmNDZW50
ZXIuCisgICAgZmxvYXQgYXJjU2VnbWVudEFuZ2xlID0gICgocGFkZGluZykgPyAtYW5nbGUgOiB0
d29QSSAtIGFuZ2xlKSAvIGFyY1NlZ21lbnRDb3VudDsKKworICAgIHZlcnRpY2VzLmFwcGVuZChz
dGFydEFyY1ZlcnRleCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyY1NlZ21lbnRD
b3VudDsgKytpKSB7CisgICAgICAgIGZsb2F0IGFuZ2xlID0gc3RhcnRBbmdsZSArIGFyY1NlZ21l
bnRBbmdsZSAqIGk7CisgICAgICAgIHZlcnRpY2VzLmFwcGVuZChhcmNDZW50ZXIgKyBGbG9hdFBv
aW50KGNvcyhhbmdsZSkgKiBhcmNSYWRpdXMsIHNpbihhbmdsZSkgKiBhcmNSYWRpdXMpKTsKKyAg
ICB9CisgICAgdmVydGljZXMuYXBwZW5kKGVuZEFyY1ZlcnRleCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKFZlY3RvcjxGbG9hdFBvaW50PiYg
dmVydGljZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnRpY2VzLnNpemUo
KTsgKytpKQorICAgICAgICB2ZXJ0aWNlc1tpXS5zZXQoTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS54
KCkpLnRvRmxvYXQoKSwgTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS55KCkpLnRvRmxvYXQoKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgUGFzc093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1dGVTaGFwZVBh
ZGRpbmdCb3VuZHMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBwYWRkaW5nLCBX
aW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gcGFk
ZGVkVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkpOworICAgIEZs
b2F0UG9pbnQgaW50ZXJzZWN0aW9uOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBv
bHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKKyAgICAgICAgY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsKKyAgICAgICAg
T2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIGlud2FyZEVkZ2VOb3Jt
YWwodGhpc0VkZ2UpICogcGFkZGluZyk7CisgICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZP
ZmZzZXRFZGdlKHByZXZFZGdlLCBpbndhcmRFZGdlTm9ybWFsKHByZXZFZGdlKSAqIHBhZGRpbmcp
OworCisgICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVk
Z2UsIGludGVyc2VjdGlvbikpCisgICAgICAgICAgICBwYWRkZWRWZXJ0aWNlcy0+YXBwZW5kKGlu
dGVyc2VjdGlvbik7CisgICAgICAgIGVsc2UgaWYgKGlzUmVmbGV4VmVydGV4KHByZXZFZGdlLnZl
cnRleDEoKSwgdGhpc0VkZ2UudmVydGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgyKCkpKQorICAgICAg
ICAgICAgYXBwZW5kQXJjKCpwYWRkZWRWZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgpLCBwYWRk
aW5nLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwg
dHJ1ZSk7CisgICAgfQorCisgICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgqcGFkZGVk
VmVydGljZXMpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKHBhZGRlZFZl
cnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKK30KKworc3RhdGljIGlubGluZSBQYXNzT3du
UHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKGNvbnN0IEZsb2F0UG9s
eWdvbiYgcG9seWdvbiwgZmxvYXQgbWFyZ2luLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBP
d25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gbWFyZ2luVmVydGljZXMgPSBhZG9wdFB0cihuZXcg
VmVjdG9yPEZsb2F0UG9pbnQ+KCkpOworICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9uOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVk
Z2VBdChpKTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlz
RWRnZS5wcmV2aW91c0VkZ2UoKTsKKyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNl
dEVkZ2UodGhpc0VkZ2UsIG91dHdhcmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIG1hcmdpbik7Cisg
ICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBvdXR3YXJk
RWRnZU5vcm1hbChwcmV2RWRnZSkgKiBtYXJnaW4pOworCisgICAgICAgIGlmIChwcmV2T2Zmc2V0
RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCisgICAgICAg
ICAgICBtYXJnaW5WZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFwcGVuZEFyYygqbWFyZ2luVmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEo
KSwgbWFyZ2luLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRl
eDEoKSwgZmFsc2UpOworICAgIH0KKworICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQo
Km1hcmdpblZlcnRpY2VzKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbiht
YXJnaW5WZXJ0aWNlcy5yZWxlYXNlKCksIGZpbGxSdWxlKSk7Cit9CisKK2NvbnN0IEZsb2F0UG9s
eWdvbiYgUG9seWdvblNoYXBlOjpzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAoreworICAgIEFT
U0VSVChzaGFwZVBhZGRpbmcoKSA+PSAwKTsKKyAgICBpZiAoIXNoYXBlUGFkZGluZygpKQorICAg
ICAgICByZXR1cm4gbV9wb2x5Z29uOworCisgICAgaWYgKCFtX3BhZGRpbmdCb3VuZHMpCisgICAg
ICAgIG1fcGFkZGluZ0JvdW5kcyA9IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMobV9wb2x5Z29u
LCBzaGFwZVBhZGRpbmcoKSwgbV9wb2x5Z29uLmZpbGxSdWxlKCkpOworCisgICAgcmV0dXJuICpt
X3BhZGRpbmdCb3VuZHM7Cit9CisKK2NvbnN0IEZsb2F0UG9seWdvbiYgUG9seWdvblNoYXBlOjpz
aGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNoYXBlTWFyZ2luKCkgPj0g
MCk7CisgICAgaWYgKCFzaGFwZU1hcmdpbigpKQorICAgICAgICByZXR1cm4gbV9wb2x5Z29uOwor
CisgICAgaWYgKCFtX21hcmdpbkJvdW5kcykKKyAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21w
dXRlU2hhcGVNYXJnaW5Cb3VuZHMobV9wb2x5Z29uLCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24u
ZmlsbFJ1bGUoKSk7CisKKyAgICByZXR1cm4gKm1fbWFyZ2luQm91bmRzOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgZ2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMoY29uc3QgRWRnZUludGVy
c2VjdGlvbiYgaW50ZXJzZWN0aW9uLCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBGbG9hdFBvaW50
JiB0aGlzVmVydGV4LCBGbG9hdFBvaW50JiBuZXh0VmVydGV4KQoreworICAgIGlmIChpbnRlcnNl
Y3Rpb24udHlwZSAhPSBWZXJ0ZXhNaW5ZICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1h
eFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChpbnRlcnNlY3Rpb24uZWRn
ZSAmJiBpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKKyAgICBjb25zdCBGbG9hdFBvbHln
b24mIHBvbHlnb24gPSAqKGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7CisKKyAg
ICBpZiAoKGludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRl
eDEoKS55KCkgPCB0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpKSkKKyAgICAgICAgfHwgKGludGVyc2Vj
dGlvbi50eXBlID09IFZlcnRleE1heFkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlz
RWRnZS52ZXJ0ZXgyKCkueSgpKSkpIHsKKyAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVy
dGV4QXQodGhpc0VkZ2UucHJldmlvdXNFZGdlKCkudmVydGV4SW5kZXgxKCkpOworICAgICAgICB0
aGlzVmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7Cisg
ICAgICAgIG5leHRWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4
MigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhB
dCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29u
LnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKKyAgICAgICAgbmV4dFZlcnRleCA9
IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UubmV4dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcHBlbmRJ
bnRlcnZhbFgoZmxvYXQgeCwgYm9vbCBpbnNpZGUsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcmVz
dWx0KQoreworICAgIGlmICghaW5zaWRlKQorICAgICAgICByZXN1bHQuYXBwZW5kKFNoYXBlSW50
ZXJ2YWwoeCkpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54
MiA9IHg7CisKKyAgICByZXR1cm4gIWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUVk
Z2VJbnRlcnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNv
bnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQgeDEgPSBp
bnRlcnNlY3Rpb24xLnBvaW50LngoKTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIucG9p
bnQueCgpOworICAgIHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwgaW50
ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4MjsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZVhJbnRl
cnNlY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeSwgYm9vbCBpc01p
blksIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcmVzdWx0KQoreworICAgIFZlY3Rvcjxjb25zdCBG
bG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRn
ZXMoeSwgeSwgZWRnZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8RWRnZUludGVy
c2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlv
bjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24p
ICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgaW50ZXJz
ZWN0aW9ucy5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJzZWN0
aW9ucy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQoaW50ZXJz
ZWN0aW9ucy5iZWdpbigpLCBpbnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRn
ZUludGVyc2VjdGlvblgpOworCisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGludCB3aW5k
Q291bnQgPSAwOworICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7CisKKyAgICB3aGlsZSAoaW5kZXgg
PCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9u
JiB0aGlzSW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleF07CisgICAgICAgIGlmIChp
bmRleCArIDEgPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgY29uc3QgRWRn
ZUludGVyc2VjdGlvbiYgbmV4dEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXggKyAx
XTsKKyAgICAgICAgICAgIGlmICgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4dElu
dGVyc2VjdGlvbi5wb2ludC54KCkpICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4
TWluWSB8fCB0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlvbnMg
d2hvc2UgdHlwZXMgYXJlIFZlcnRleE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0
ZXhNaW5ZLgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50ZXJz
ZWN0aW9ucyB3aG9zZSB0eXBlcyBhcmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRleE1h
eFksVmVydGV4TWluWSB3aXRoIG9uZSBpbnRlcnNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSYgdGhpc0VkZ2UgPSAqdGhpc0ludGVyc2VjdGlvbi5lZGdlOworICAgICAgICBib29sIGV2ZW5P
ZGRDcm9zc2luZyA9ICF3aW5kQ291bnQ7CisKKyAgICAgICAgaWYgKHBvbHlnb24uZmlsbFJ1bGUo
KSA9PSBSVUxFX0VWRU5PREQpIHsKKyAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0VkZ2Uu
dmVydGV4MigpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDEoKS55KCkpID8gMSA6IC0xOworICAgICAg
ICAgICAgZXZlbk9kZENyb3NzaW5nID0gZXZlbk9kZENyb3NzaW5nIHx8ICF3aW5kQ291bnQ7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZXZlbk9kZENyb3NzaW5nKSB7CisgICAgICAgICAgICBi
b29sIGVkZ2VDcm9zc2luZyA9IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWw7CisgICAg
ICAgICAgICBpZiAoIWVkZ2VDcm9zc2luZykgeworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
cHJldlZlcnRleDsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHRoaXNWZXJ0ZXg7CisgICAg
ICAgICAgICAgICAgRmxvYXRQb2ludCBuZXh0VmVydGV4OworCisgICAgICAgICAgICAgICAgaWYg
KGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZWZXJ0
ZXgsIHRoaXNWZXJ0ZXgsIG5leHRWZXJ0ZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
ZXh0VmVydGV4LnkoKSA9PSB5KQorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5n
ID0gKGlzTWluWSkgPyBwcmV2VmVydGV4LnkoKSA+IHkgOiBwcmV2VmVydGV4LnkoKSA8IHk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByZXZWZXJ0ZXgueSgpID09IHkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IG5leHRWZXJ0ZXgueSgp
ID4geSA6IG5leHRWZXJ0ZXgueSgpIDwgeTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZWRnZUNyb3NzaW5nKQorICAgICAg
ICAgICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50
LngoKSwgaW5zaWRlLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgKytpbmRleDsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMo
Y29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxT
aGFwZUludGVydmFsPiYgcmVzdWx0KQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25F
ZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBl
ZGdlcykpCisgICAgICAgIHJldHVybjsKKworICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0
aW9uOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlICplZGdlID0gZWRnZXNbaV07CisgICAgICAg
IGZsb2F0IHgxOworICAgICAgICBmbG9hdCB4MjsKKworICAgICAgICBpZiAoZWRnZS0+bWluWSgp
IDwgeTEpIHsKKyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRl
cnNlY3Rpb24pOworICAgICAgICAgICAgeDEgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHgxID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPCBlZGdl
LT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCku
eCgpOworCisgICAgICAgIGlmIChlZGdlLT5tYXhZKCkgPiB5MikgeworICAgICAgICAgICAgY29t
cHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwgeTIsIGludGVyc2VjdGlvbik7CisgICAgICAgICAgICB4
MiA9IGludGVyc2VjdGlvbi5wb2ludC54KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
eDIgPSAoZWRnZS0+dmVydGV4MSgpLnkoKSA+IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+
dmVydGV4MSgpLngoKSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7CisKKyAgICAgICAgaWYgKHgxID4g
eDIpCisgICAgICAgICAgICBzdGQ6OnN3YXAoeDEsIHgyKTsKKworICAgICAgICBpZiAoeDIgPiB4
MSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU2hhcGVJbnRlcnZhbCh4MSwgeDIpKTsKKyAg
ICB9CisKKyAgICBzb3J0U2hhcGVJbnRlcnZhbHMocmVzdWx0KTsKK30KKwordm9pZCBQb2x5Z29u
U2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGNv
bnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7CisgICAgaWYg
KHBvbHlnb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxv
Z2ljYWxUb3A7CisgICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKKwor
ICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAg
ICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7
CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2
YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBtZXJnZWRJbnRlcnZhbHM7CisgICAg
bWVyZ2VTaGFwZUludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgbWVyZ2VkSW50
ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAg
IGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdl
SW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBleGNsdWRlZEludGVydmFs
czsKKyAgICBtZXJnZVNoYXBlSW50ZXJ2YWxzKG1lcmdlZEludGVydmFscywgZWRnZUludGVydmFs
cywgZXhjbHVkZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgaW50
ZXJ2YWwgPSBleGNsdWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5l
U2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK3ZvaWQgUG9s
eWdvblNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAg
ICBpZiAocG9seWdvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkx
ID0gbG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0
OworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxz
OworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2
YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJ
bnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGNvbW1vbkludGVydmFsczsK
KyAgICBpbnRlcnNlY3RTaGFwZUludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywg
Y29tbW9uSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2
YWxzOworICAgIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEs
IHkyLCBlZGdlSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBpbmNsdWRl
ZEludGVydmFsczsKKyAgICBzdWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywg
ZWRnZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluY2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFNoYXBl
SW50ZXJ2YWwgaW50ZXJ2YWwgPSBpbmNsdWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRQ
b2x5Z29uJiBwb2x5Z29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9mZnNldEVk
Z2VJbmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDIpCit7CisgICAgVmVjdG9yPGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdF
ZGdlcyhyZWN0LnkoKSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOworICAgICAgICBp
ZiAoZWRnZS0+ZWRnZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdlLT5lZGdlSW5k
ZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChyZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwg
Y29uc3QgRmxvYXRSZWN0JiByMikKK3sKKyAgICBpZiAocjEueSgpIDwgcjIueSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocjEueSgpID09IHIyLnkoKSkKKyAgICAgICAgcmV0dXJu
IHIxLngoKSA8IHIyLngoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9seWdvblNo
YXBlOjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNh
bEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBM
YXlvdXRVbml0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBt
aW5Mb2dpY2FsSW50ZXJ2YWxUb3A7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5M
b2dpY2FsSW50ZXJ2YWxTaXplLmhlaWdodCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGgg
PSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFBvbHln
b24mIHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBjb25zdCBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSBwb2x5Z29uLmJvdW5kaW5nQm94KCk7CisgICAgaWYgKG1pbkludGVydmFs
V2lkdGggPiBib3VuZGluZ0JveC53aWR0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBmbG9hdCBtaW5ZID0gc3RkOjptYXgoYm91bmRpbmdCb3gueSgpLCBtaW5JbnRlcnZhbFRvcCk7
CisgICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKworICAgIGlmICht
YXhZID4gYm91bmRpbmdCb3gubWF4WSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBW
ZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIHBvbHlnb24ub3Zlcmxh
cHBpbmdFZGdlcyhtaW5JbnRlcnZhbFRvcCwgYm91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7CisK
KyAgICBmbG9hdCBkeCA9IG1pbkludGVydmFsV2lkdGggLyAyOworICAgIGZsb2F0IGR5ID0gbWlu
SW50ZXJ2YWxIZWlnaHQgLyAyOworICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0
RWRnZXM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOwor
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52
ZXJ0ZXgxKCk7CisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRl
eDEoKTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4Migp
OworICAgICAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VCdWZmZXI7CisK
KyAgICAgICAgaWYgKHZlcnRleDIueSgpID4gdmVydGV4MS55KCkgPyB2ZXJ0ZXgyLngoKSA+PSB2
ZXJ0ZXgxLngoKSA6IHZlcnRleDEueCgpID49IHZlcnRleDIueCgpKSB7CisgICAgICAgICAgICBv
ZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUo
ZHgsIC1keSkpKTsKKyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBv
bHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRn
ZSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKKyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBw
ZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIC1keSkpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpc1JlZmxleFZlcnRleCh2ZXJ0ZXgwLCB2ZXJ0ZXgxLCB2ZXJ0
ZXgyKSkgeworICAgICAgICAgICAgaWYgKHZlcnRleDIueCgpIDw9IHZlcnRleDEueCgpICYmIHZl
cnRleDAueCgpIDw9IHZlcnRleDEueCgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZm
ZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZShkeCwgLWR5KSwg
RmxvYXRTaXplKGR4LCBkeSkpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueCgpID49
IHZlcnRleDEueCgpICYmIHZlcnRleDAueCgpID49IHZlcnRleDEueCgpKQorICAgICAgICAgICAg
ICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZs
b2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICAgICAgaWYg
KHZlcnRleDIueSgpIDw9IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpIDw9IHZlcnRleDEueSgp
KQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25F
ZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIGR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueSgpID49IHZlcnRleDEueSgpICYmIHZlcnRleDAu
eSgpID49IHZlcnRleDEueSgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBw
ZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0
U2l6ZShkeCwgLWR5KSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IG9mZnNldEVkZ2VCdWZmZXIuc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpZiAob2Zm
c2V0RWRnZUJ1ZmZlcltqXS5tYXhZKCkgPj0gbWluWSkKKyAgICAgICAgICAgICAgICBvZmZzZXRF
ZGdlcy5hcHBlbmQob2Zmc2V0RWRnZUJ1ZmZlcltqXSk7CisgICAgfQorCisgICAgb2Zmc2V0RWRn
ZXMuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHBvbHlnb24sIG1pbkludGVydmFsVG9wLCBGbG9h
dFNpemUoMCwgZHkpKSk7CisKKyAgICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9u
OworICAgIEZsb2F0UmVjdCBmaXJzdEZpdFJlY3Q7CisgICAgYm9vbCBmaXJzdEZpdEZvdW5kID0g
ZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2Zmc2V0RWRnZXMuc2l6ZSgp
IC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb2Zmc2V0
RWRnZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlc1tpXS5pbnRl
cnNlY3Rpb24ob2Zmc2V0RWRnZXNbal0sIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKSkgeworICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbihvZmZzZXRF
ZGdlc0ludGVyc2VjdGlvbi54KCkgLSBkeCwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueSgpIC0g
ZHkpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QocG90
ZW50aWFsRmlyc3RGaXRMb2NhdGlvbiwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7CisgICAgICAg
ICAgICAgICAgaWYgKChvZmZzZXRFZGdlc1tpXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdl
OjpMaW5lVG9wCisgICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldEVkZ2VzW2pdLmJhc2lzKCkg
PT0gT2Zmc2V0UG9seWdvbkVkZ2U6OkxpbmVUb3AKKyAgICAgICAgICAgICAgICAgICAgfHwgcG90
ZW50aWFsRmlyc3RGaXRMb2NhdGlvbi55KCkgPj0gbWluSW50ZXJ2YWxUb3ApCisgICAgICAgICAg
ICAgICAgICAgICYmICghZmlyc3RGaXRGb3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVudGlh
bEZpcnN0Rml0UmVjdCwgZmlyc3RGaXRSZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgcG9s
eWdvbi5jb250YWlucyhvZmZzZXRFZGdlc0ludGVyc2VjdGlvbikKKyAgICAgICAgICAgICAgICAg
ICAgJiYgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKHBvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVj
dCwgb2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgp
KSkgeworICAgICAgICAgICAgICAgICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgZmlyc3RGaXRSZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChm
aXJzdEZpdEZvdW5kKQorICAgICAgICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGZpcnN0Rml0
UmVjdC55KCkpOworICAgIHJldHVybiBmaXJzdEZpdEZvdW5kOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Bv
bHlnb25TaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hh
cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42MjhhYzNhZGQwNjU2ZDY3M2IxMjdkNjg4OGJmMGU4NjAyYjYxODBj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5
Z29uU2hhcGUuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
ZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICog
ICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUG9seWdvblNoYXBl
X2gKKyNkZWZpbmUgUG9seWdvblNoYXBlX2gKKworI2luY2x1ZGUgIkZsb2F0UG9seWdvbi5oIgor
I2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIE9mZnNldFBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBh
aXIgeworcHVibGljOgorICAgIGVudW0gQmFzaXMgeworICAgICAgICBFZGdlLAorICAgICAgICBW
ZXJ0ZXgsCisgICAgICAgIExpbmVUb3AKKyAgICB9OworCisgICAgT2Zmc2V0UG9seWdvbkVkZ2Uo
Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisg
ICAgICAgIDogbV92ZXJ0ZXgxKGVkZ2UudmVydGV4MSgpICsgb2Zmc2V0KQorICAgICAgICAsIG1f
dmVydGV4MihlZGdlLnZlcnRleDIoKSArIG9mZnNldCkKKyAgICAgICAgLCBtX2VkZ2VJbmRleChl
ZGdlLmVkZ2VJbmRleCgpKQorICAgICAgICAsIG1fYmFzaXMoRWRnZSkKKyAgICB7CisgICAgfQor
CisgICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2ludCYgcmVmbGV4VmVydGV4LCBj
b25zdCBGbG9hdFNpemUmIG9mZnNldDEsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MikKKyAgICAg
ICAgOiBtX3ZlcnRleDEocmVmbGV4VmVydGV4ICsgb2Zmc2V0MSkKKyAgICAgICAgLCBtX3ZlcnRl
eDIocmVmbGV4VmVydGV4ICsgb2Zmc2V0MikKKyAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKKyAg
ICAgICAgLCBtX2Jhc2lzKFZlcnRleCkKKyAgICB7CisgICAgfQorCisgICAgT2Zmc2V0UG9seWdv
bkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2
YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorICAgICAgICA6IG1fdmVydGV4MShGbG9h
dFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkg
KyBvZmZzZXQpCisgICAgICAgICwgbV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGlu
Z0JveCgpLm1heFgoKSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAgICAg
LCBtX2VkZ2VJbmRleCgtMSkKKyAgICAgICAgLCBtX2Jhc2lzKExpbmVUb3ApCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdmVydGV4MTsgfQorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYg
dmVydGV4MigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGV4MjsgfQorICAgIGludCBl
ZGdlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsgfQorICAgIEJhc2lzIGJhc2lz
KCkgY29uc3QgeyByZXR1cm4gbV9iYXNpczsgfQorCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQg
bV92ZXJ0ZXgxOworICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgyOworICAgIGludCBtX2VkZ2VJbmRl
eDsKKyAgICBCYXNpcyBtX2Jhc2lzOworfTsKKworY2xhc3MgUG9seWdvblNoYXBlIDogcHVibGlj
IFNoYXBlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQb2x5Z29uU2hhcGUpOworcHVibGlj
OgorICAgIFBvbHlnb25TaGFwZShQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRp
Y2VzLCBXaW5kUnVsZSBmaWxsUnVsZSkKKyAgICAgICAgOiBTaGFwZSgpCisgICAgICAgICwgbV9w
b2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkKKyAgICAgICAgLCBtX21hcmdpbkJvdW5kcyhudWxs
cHRyKQorICAgICAgICAsIG1fcGFkZGluZ0JvdW5kcyhudWxscHRyKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdp
bkJvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBl
UGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9
CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Bv
bHlnb24uaXNFbXB0eSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxz
KExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50
TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVy
dmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRl
ZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29u
c3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0
IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVNYXJn
aW5Cb3VuZHMoKSBjb25zdDsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlUGFkZGluZ0Jv
dW5kcygpIGNvbnN0OworCisgICAgRmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKKyAgICBtdXRhYmxl
IE93blB0cjxGbG9hdFBvbHlnb24+IG1fbWFyZ2luQm91bmRzOworICAgIG11dGFibGUgT3duUHRy
PEZsb2F0UG9seWdvbj4gbV9wYWRkaW5nQm91bmRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gUG9seWdvblNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUyN2ZjZmE3
MmFmM2M5MzAwNTVlNTkzYjlmNTRjNzQ3YTQxNzBhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCkBAIC0wLDAgKzEs
MjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBD
T1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
CisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
CisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlY3RhbmdsZVNo
YXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZWxsaXBzZVhJbnRlcmNlcHQoZmxvYXQgeSwgZmxv
YXQgcngsIGZsb2F0IHJ5KQoreworICAgIEFTU0VSVChyeSA+IDApOworICAgIHJldHVybiByeCAq
IHNxcnQoMSAtICh5ICogeSkgLyAocnkgKiByeSkpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0
IGVsbGlwc2VZSW50ZXJjZXB0KGZsb2F0IHgsIGZsb2F0IHJ4LCBmbG9hdCByeSkKK3sKKyAgICBB
U1NFUlQocnggPiAwKTsKKyAgICByZXR1cm4gcnkgKiBzcXJ0KDEgLSAoeCAqIHgpIC8gKHJ4ICog
cngpKTsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjpwYWRkaW5nQm91
bmRzKGZsb2F0IHBhZGRpbmcpIGNvbnN0Cit7CisgICAgQVNTRVJUKHBhZGRpbmcgPj0gMCk7Cisg
ICAgaWYgKCFwYWRkaW5nIHx8IGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisg
ICAgZmxvYXQgYm91bmRzWCA9IHgoKSArIHN0ZDo6bWluKHdpZHRoKCkgLyAyLCBwYWRkaW5nKTsK
KyAgICBmbG9hdCBib3VuZHNZID0geSgpICsgc3RkOjptaW4oaGVpZ2h0KCkgLyAyLCBwYWRkaW5n
KTsKKyAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgLSBwYWRk
aW5nICogMik7CisgICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gc3RkOjptYXgoMC4wZiwgaGVpZ2h0
KCkgLSBwYWRkaW5nICogMik7CisgICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHN0ZDo6bWF4KDAu
MGYsIHJ4KCkgLSBwYWRkaW5nKTsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gc3RkOjptYXgo
MC4wZiwgcnkoKSAtIHBhZGRpbmcpOworICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0KEZsb2F0
UmVjdChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwgRmxvYXRT
aXplKGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKK30KKworRmxvYXRSb3VuZGVkUmVj
dCBGbG9hdFJvdW5kZWRSZWN0OjptYXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdAorewor
ICAgIEFTU0VSVChtYXJnaW4gPj0gMCk7CisgICAgaWYgKCFtYXJnaW4pCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkgLSBtYXJnaW47CisgICAgZmxvYXQg
Ym91bmRzWSA9IHkoKSAtIG1hcmdpbjsKKyAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHdpZHRoKCkg
KyBtYXJnaW4gKiAyOworICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9IGhlaWdodCgpICsgbWFyZ2lu
ICogMjsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gcngoKSArIG1hcmdpbjsKKyAgICBmbG9h
dCBib3VuZHNSYWRpdXNZID0gcnkoKSArIG1hcmdpbjsKKyAgICByZXR1cm4gRmxvYXRSb3VuZGVk
UmVjdChGbG9hdFJlY3QoYm91bmRzWCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdo
dCksIEZsb2F0U2l6ZShib3VuZHNSYWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Cit9CisKK0Zsb2F0
UG9pbnQgRmxvYXRSb3VuZGVkUmVjdDo6Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lk
dGhBdEludGVyY2VwdCkgY29uc3QKK3sKKyAgICBmbG9hdCB4aSA9ICh3aWR0aCgpIC0gd2lkdGhB
dEludGVyY2VwdCkgLyAyOworICAgIGZsb2F0IHlpID0gcnkoKSAtIGVsbGlwc2VZSW50ZXJjZXB0
KHJ4KCkgLSB4aSwgcngoKSwgcnkoKSk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoeGksIHlpKTsK
K30KKworRmxvYXRSb3VuZGVkUmVjdCBSZWN0YW5nbGVTaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRz
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcykgewor
ICAgICAgICBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgPSB0cnVlOworICAgICAgICBt
X3BhZGRpbmdCb3VuZHMgPSBtX2JvdW5kcy5wYWRkaW5nQm91bmRzKHNoYXBlUGFkZGluZygpKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fcGFkZGluZ0JvdW5kczsKK30KKworRmxvYXRSb3VuZGVkUmVj
dCBSZWN0YW5nbGVTaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAoreworICAgIGlmICgh
bV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMpIHsKKyAgICAgICAgbV9oYXZlSW5pdGlhbGl6
ZWRNYXJnaW5Cb3VuZHMgPSB0cnVlOworICAgICAgICBtX21hcmdpbkJvdW5kcyA9IG1fYm91bmRz
Lm1hcmdpbkJvdW5kcyhzaGFwZU1hcmdpbigpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWFyZ2lu
Qm91bmRzOworfQorCit2b2lkIFJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyhM
YXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExp
c3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMg
PSBzaGFwZU1hcmdpbkJvdW5kcygpOworICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgeTIgPSBs
b2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKKworICAgIGlmICh5MiA8IGJvdW5kcy55KCkgfHwg
eTEgPj0gYm91bmRzLm1heFkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeDEgPSBi
b3VuZHMueCgpOworICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKKworICAgIGlmIChib3Vu
ZHMucnkoKSA+IDApIHsKKyAgICAgICAgaWYgKHkyIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgp
KSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9IHkyIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgp
OworICAgICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4
KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5y
eCgpIC0geGk7CisgICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSAr
IHhpOworICAgICAgICB9IGVsc2UgaWYgKHkxID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgp
KSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MSAtIChib3VuZHMubWF4WSgpIC0gYm91bmRz
LnJ5KCkpOworICAgICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91
bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJv
dW5kcy5yeCgpIC0geGk7CisgICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMu
cngoKSArIHhpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LmFwcGVuZChMaW5lU2Vn
bWVudCh4MSwgeDIpKTsKK30KKwordm9pZCBSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJbnRl
cnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
Ym91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBmbG9h
dCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgaWYgKHkxIDwgYm91bmRz
LnkoKSB8fCB5MiA+IGJvdW5kcy5tYXhZKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0
IHgxID0gYm91bmRzLngoKTsKKyAgICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7CisKKyAgICBp
ZiAoYm91bmRzLnJ5KCkgPiAwKSB7CisgICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29ybmVyID0g
eTEgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCk7CisgICAgICAgIGJvb2wgeTJJbnRlcmNlcHRz
Q29ybmVyID0geTIgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgIGZsb2F0
IHhpID0gMDsKKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyICYmIHkySW50ZXJjZXB0
c0Nvcm5lcikgeworICAgICAgICAgICAgaWYgICh5MSA8IGJvdW5kcy5oZWlnaHQoKSArIDIgKiBi
b3VuZHMueSgpIC0geTIpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91bmRz
LnkoKSAtIGJvdW5kcy5yeSgpOworICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNl
cHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMu
cnkoKSk7CisgICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRz
LnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh5
MUludGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMu
eSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlp
LCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICB9IGVsc2UgaWYgKHkySW50ZXJj
ZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFko
KSAtIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWks
IGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJ
bnRlcmNlcHRzQ29ybmVyIHx8IHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEg
PSBib3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRz
Lm1heFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1
bHQuYXBwZW5kKExpbmVTZWdtZW50KHgxLCB4MikpOworfQorCitib29sIFJlY3RhbmdsZVNoYXBl
OjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbElu
dGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlv
dXRVbml0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5M
b2dpY2FsSW50ZXJ2YWxUb3A7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dp
Y2FsSW50ZXJ2YWxTaXplLmhlaWdodCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBt
aW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiBib3VuZHMgPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1w
dHkoKSB8fCBtaW5JbnRlcnZhbFdpZHRoID4gYm91bmRzLndpZHRoKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZHMueSgpLCBtaW5JbnRl
cnZhbFRvcCk7CisgICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKwor
ICAgIGlmIChtYXhZID4gYm91bmRzLm1heFkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYm9vbCBpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyID0gbWluWSA8IGJvdW5kcy55KCkgKyBi
b3VuZHMucnkoKTsKKyAgICBib29sIGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgPSBtYXhZID4g
Ym91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpOworCisgICAgaWYgKCFpbnRlcnZhbE92ZXJsYXBz
TWluQ29ybmVyICYmICFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyKSB7CisgICAgICAgIHJlc3Vs
dCA9IG1pblk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZsb2F0IGNlbnRl
clkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMjsKKyAgICBib29sIG1pbkNvcm5l
ckRlZmluZXNYID0gZmFicyhjZW50ZXJZIC0gbWluWSkgPiBmYWJzKGNlbnRlclkgLSBtYXhZKTsK
KyAgICBib29sIGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgPSBtaW5JbnRlcnZhbFdpZHRoICsg
MiAqIGJvdW5kcy5yeCgpIDw9IGJvdW5kcy53aWR0aCgpOworICAgIEZsb2F0UG9pbnQgY29ybmVy
SW50ZXJjZXB0ID0gYm91bmRzLmNvcm5lckludGVyY2VwdEZvcldpZHRoKG1pbkludGVydmFsV2lk
dGgpOworCisgICAgaWYgKGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgKCFpbnRlcnZhbE92
ZXJsYXBzTWF4Q29ybmVyIHx8IG1pbkNvcm5lckRlZmluZXNYKSkgeworICAgICAgICBpZiAoaW50
ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyB8fCBib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0Lnko
KSA8IG1pblkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWluSW50ZXJ2YWxIZWlnaHQgPCBib3Vu
ZHMuaGVpZ2h0KCkgLSAoMiAqIGNvcm5lckludGVyY2VwdC55KCkpKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVy
IHx8ICFtaW5Db3JuZXJEZWZpbmVzWCkpIHsKKyAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhp
bkNvcm5lcnMgfHwgbWluWSA8PSAgYm91bmRzLm1heFkoKSAtIGNvcm5lckludGVyY2VwdC55KCkg
LSBtaW5JbnRlcnZhbEhlaWdodCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTllY2YwNTA0YmI5OTNj
OTExMDM5MDYzNDkzNDVlZTQyOTQ0NmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuaApAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBSZWN0YW5nbGVTaGFwZV9oCisjZGVmaW5lIFJlY3RhbmdsZVNoYXBlX2gK
KworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZsb2F0Um91bmRlZFJlY3QgOiBwdWJsaWMgRmxvYXRSZWN0IHsKK3B1YmxpYzoK
KyAgICBGbG9hdFJvdW5kZWRSZWN0KCkgeyB9CisgICAgRmxvYXRSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKKyAgICAgICAgOiBGbG9h
dFJlY3QoYm91bmRzKQorICAgICAgICAsIG1fcmFkaWkocmFkaWkpCisgICAgeworICAgIH0KKwor
ICAgIGZsb2F0IHJ4KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpaS53aWR0aCgpOyB9CisgICAgZmxv
YXQgcnkoKSBjb25zdCB7IHJldHVybiBtX3JhZGlpLmhlaWdodCgpOyB9CisgICAgRmxvYXRSb3Vu
ZGVkUmVjdCBtYXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdDsKKyAgICBGbG9hdFJvdW5k
ZWRSZWN0IHBhZGRpbmdCb3VuZHMoZmxvYXQgcGFkZGluZykgY29uc3Q7CisgICAgRmxvYXRQb2lu
dCBjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3aWR0aCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgRmxvYXRTaXplIG1fcmFkaWk7Cit9OworCitjbGFzcyBSZWN0YW5nbGVTaGFwZSA6IHB1
YmxpYyBTaGFwZSB7CitwdWJsaWM6CisgICAgUmVjdGFuZ2xlU2hhcGUoY29uc3QgRmxvYXRSZWN0
JiBib3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCisgICAgICAgIDogU2hhcGUoKQorICAg
ICAgICAsIG1fYm91bmRzKGJvdW5kcywgcmFkaWkpCisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6
ZWRNYXJnaW5Cb3VuZHMoZmFsc2UpCisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5n
Qm91bmRzKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hh
cGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0
aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpKTsgfQorICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKSk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
Ym91bmRzLmlzRW1wdHkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFs
cyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVu
dExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRl
cnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNv
bnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25z
dCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlTWFyZ2lu
Qm91bmRzKCkgY29uc3Q7CisgICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZVBhZGRpbmdCb3VuZHMo
KSBjb25zdDsKKworICAgIEZsb2F0Um91bmRlZFJlY3QgbV9ib3VuZHM7CisgICAgbXV0YWJsZSBG
bG9hdFJvdW5kZWRSZWN0IG1fbWFyZ2luQm91bmRzOworICAgIG11dGFibGUgRmxvYXRSb3VuZGVk
UmVjdCBtX3BhZGRpbmdCb3VuZHM7CisgICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVk
TWFyZ2luQm91bmRzIDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRQYWRk
aW5nQm91bmRzIDogMTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFJlY3RhbmdsZVNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjc5MjBjYzllNDg4MTM2ODkxNzQ4NWNiMDMzNzhlOWY0MDAwMmYzYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUu
Y3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MK
KyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNoYXBlLmgiCisKKyNpbmNsdWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCisjaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAi
UG9seWdvblNoYXBlLmgiCisjaW5jbHVkZSAiUmVjdGFuZ2xlU2hhcGUuaCIKKyNpbmNsdWRlICJX
aW5kUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0ZVJlY3RhbmdsZVNoYXBlKGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQoreworICAgIEFTU0VS
VChib3VuZHMud2lkdGgoKSA+PSAwICYmIGJvdW5kcy5oZWlnaHQoKSA+PSAwICYmIHJhZGlpLndp
ZHRoKCkgPj0gMCAmJiByYWRpaS5oZWlnaHQoKSA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFJlY3RhbmdsZVNoYXBlKGJvdW5kcywgcmFkaWkpKTsKK30KKworc3RhdGljIFBhc3NPd25Q
dHI8U2hhcGU+IGNyZWF0ZVNoYXBlQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxv
YXQgcmFkaXVzKQoreworICAgIEFTU0VSVChyYWRpdXMgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBSZWN0YW5nbGVTaGFwZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2Vu
dGVyLnkoKSAtIHJhZGl1cywgcmFkaXVzKjIsIHJhZGl1cyoyKSwgRmxvYXRTaXplKHJhZGl1cywg
cmFkaXVzKSkpOworfQorCitzdGF0aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRlU2hhcGVFbGxp
cHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKK3sK
KyAgICBBU1NFUlQocmFkaWkud2lkdGgoKSA+PSAwICYmIHJhZGlpLmhlaWdodCgpID49IDApOwor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUmVjdGFuZ2xlU2hhcGUoRmxvYXRSZWN0KGNlbnRlci54
KCkgLSByYWRpaS53aWR0aCgpLCBjZW50ZXIueSgpIC0gcmFkaWkuaGVpZ2h0KCksIHJhZGlpLndp
ZHRoKCkqMiwgcmFkaWkuaGVpZ2h0KCkqMiksIHJhZGlpKSk7Cit9CisKK3N0YXRpYyBQYXNzT3du
UHRyPFNoYXBlPiBjcmVhdGVQb2x5Z29uU2hhcGUoUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2lu
dD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQb2x5Z29uU2hhcGUodmVydGljZXMsIGZpbGxSdWxlKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgRmxvYXRSZWN0IHBoeXNpY2FsUmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVy
biByZWN0OworICAgIGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkp
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSBy
ZWN0Lm1heFgoKSwgcmVjdC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpKTsKKyAgICByZXR1cm4gcmVj
dC50cmFuc3Bvc2VkUmVjdCgpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2lj
YWxQb2ludFRvTG9naWNhbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJv
eEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworICAgIGlm
IChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVy
biBGbG9hdFBvaW50KHBvaW50LnkoKSwgbG9naWNhbEJveEhlaWdodCAtIHBvaW50LngoKSk7Cisg
ICAgcmV0dXJuIHBvaW50LnRyYW5zcG9zZWRQb2ludCgpOworfQorCitzdGF0aWMgaW5saW5lIEZs
b2F0U2l6ZSBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSkKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpKQorICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gc2l6ZS50cmFu
c3Bvc2VkU2l6ZSgpOworfQorCitQYXNzT3duUHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUo
Y29uc3QgQmFzaWNTaGFwZSogYmFzaWNTaGFwZSwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJv
eFNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFk
ZGluZykKK3sKKyAgICBBU1NFUlQoYmFzaWNTaGFwZSk7CisKKyAgICBib29sIGhvcml6b250YWxX
cml0aW5nTW9kZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKKyAgICBm
bG9hdCBib3hXaWR0aCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLndp
ZHRoKCkgOiBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBib3hIZWlnaHQgPSBo
b3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSA6IGxvZ2ljYWxC
b3hTaXplLndpZHRoKCk7CisgICAgT3duUHRyPFNoYXBlPiBzaGFwZTsKKworICAgIHN3aXRjaCAo
YmFzaWNTaGFwZS0+dHlwZSgpKSB7CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVS
ZWN0YW5nbGVUeXBlOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3Rh
bmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqPihiYXNpY1NoYXBl
KTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcygKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JM
ZW5ndGgocmVjdGFuZ2xlLT54KCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVG
b3JMZW5ndGgocmVjdGFuZ2xlLT55KCksIGJveEhlaWdodCksCisgICAgICAgICAgICBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+d2lkdGgoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAg
ZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmhlaWdodCgpLCBib3hIZWlnaHQpKTsKKyAg
ICAgICAgTGVuZ3RoIHJhZGl1c1hMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsK
KyAgICAgICAgTGVuZ3RoIHJhZGl1c1lMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1ko
KTsKKyAgICAgICAgRmxvYXRTaXplIGNvcm5lclJhZGlpKAorICAgICAgICAgICAgcmFkaXVzWExl
bmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0
aCwgYm94V2lkdGgpLAorICAgICAgICAgICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8g
MCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7CisgICAg
ICAgIEZsb2F0UmVjdCBsb2dpY2FsQm91bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5k
cywgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFw
ZSA9IGNyZWF0ZVJlY3RhbmdsZVNoYXBlKGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9n
aWNhbChjb3JuZXJSYWRpaSwgd3JpdGluZ01vZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlQ2lyY2xlVHlwZTogeworICAgICAgICBj
b25zdCBCYXNpY1NoYXBlQ2lyY2xlKiBjaXJjbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1No
YXBlQ2lyY2xlKj4oYmFzaWNTaGFwZSk7CisgICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZsb2F0
IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWSgpLCBib3hIZWln
aHQpOworICAgICAgICBmbG9hdCByYWRpdXMgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+
cmFkaXVzKCksIHN0ZDo6bWluKGJveEhlaWdodCwgYm94V2lkdGgpKTsKKyAgICAgICAgRmxvYXRQ
b2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNl
bnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwor
CisgICAgICAgIHNoYXBlID0gY3JlYXRlU2hhcGVDaXJjbGUobG9naWNhbENlbnRlciwgcmFkaXVz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1No
YXBlRWxsaXBzZVR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlw
c2UgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSo+KGJhc2ljU2hhcGUpOwor
ICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50
ZXJYKCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0VmFsdWVGb3JM
ZW5ndGgoZWxsaXBzZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOworICAgICAgICBmbG9hdCByYWRp
dXNYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdpZHRoKTsK
KyAgICAgICAgZmxvYXQgcmFkaXVzWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFk
aXVzWSgpLCBib3hIZWlnaHQpOworICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50ZXIgPSBw
aHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIGxvZ2lj
YWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7CisgICAgICAgIEZsb2F0U2l6ZSBsb2dp
Y2FsUmFkaWkgPSBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1
c1kpLCB3cml0aW5nTW9kZSk7CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVTaGFwZUVsbGlwc2Uo
bG9naWNhbENlbnRlciwgbG9naWNhbFJhZGlpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUG9seWdvblR5cGU6IHsKKyAgICAgICAgY29u
c3QgQmFzaWNTaGFwZVBvbHlnb24qIHBvbHlnb24gPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1No
YXBlUG9seWdvbio+KGJhc2ljU2hhcGUpOworICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3RoPiYg
dmFsdWVzID0gcG9seWdvbi0+dmFsdWVzKCk7CisgICAgICAgIHNpemVfdCB2YWx1ZXNTaXplID0g
dmFsdWVzLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWVzU2l6ZSAlIDIpKTsKKyAgICAg
ICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxGbG9hdFBvaW50Pih2YWx1ZXNTaXplIC8gMikpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzU2l6ZTsgaSArPSAyKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50
IHZlcnRleCgKKyAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChp
KSwgYm94V2lkdGgpLAorICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVz
LmF0KGkgKyAxKSwgYm94SGVpZ2h0KSk7CisgICAgICAgICAgICAoKnZlcnRpY2VzKVtpIC8gMl0g
PSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKHZlcnRleCwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCks
IHdyaXRpbmdNb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHNoYXBlID0gY3JlYXRlUG9seWdv
blNoYXBlKHZlcnRpY2VzLnJlbGVhc2UoKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVj
dGFuZ2xlVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqIHJl
Y3RhbmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSo+KGJh
c2ljU2hhcGUpOworICAgICAgICBmbG9hdCBsZWZ0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0
YW5nbGUtPmxlZnQoKSwgYm94V2lkdGgpOworICAgICAgICBmbG9hdCB0b3AgPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKHJlY3RhbmdsZS0+dG9wKCksIGJveEhlaWdodCk7CisgICAgICAgIEZsb2F0UmVj
dCBib3VuZHMoCisgICAgICAgICAgICBsZWZ0LAorICAgICAgICAgICAgdG9wLAorICAgICAgICAg
ICAgYm94V2lkdGggLSBsZWZ0IC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnJpZ2h0
KCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGJveEhlaWdodCAtIHRvcCAtIGZsb2F0VmFsdWVG
b3JMZW5ndGgocmVjdGFuZ2xlLT5ib3R0b20oKSwgYm94SGVpZ2h0KSk7CisgICAgICAgIExlbmd0
aCByYWRpdXNYTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7CisgICAgICAgIExl
bmd0aCByYWRpdXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7CisgICAgICAg
IEZsb2F0U2l6ZSBjb3JuZXJSYWRpaSgKKyAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRl
ZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRo
KSwKKyAgICAgICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOworICAgICAgICBGbG9hdFJl
Y3QgbG9naWNhbEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxC
b3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVS
ZWN0YW5nbGVTaGFwZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVy
UmFkaWksIHdyaXRpbmdNb2RlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNoYXBlLT5t
X3dyaXRpbmdNb2RlID0gd3JpdGluZ01vZGU7CisgICAgc2hhcGUtPm1fbWFyZ2luID0gZmxvYXRW
YWx1ZUZvckxlbmd0aChtYXJnaW4sIDApOworICAgIHNoYXBlLT5tX3BhZGRpbmcgPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHBhZGRpbmcsIDApOworCisgICAgcmV0dXJuIHNoYXBlLnJlbGVhc2UoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkOWVjZmQ3MjBiZDBkZDUzODA0MTMxOGM5ODI1YmYzMzcx
MWU1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVfaAorI2RlZmlu
ZSBTaGFwZV9oCisKKyNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJl
Y3QuaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBMaW5lU2VnbWVudCB7CisgICAgTGluZVNlZ21lbnQoZmxvYXQgbG9naWNhbExlZnQsIGZs
b2F0IGxvZ2ljYWxSaWdodCkKKyAgICAgICAgOiBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAg
ICAgICAgLCBsb2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQorICAgIHsKKyAgICB9CisKKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0OworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0OworfTsK
KwordHlwZWRlZiBWZWN0b3I8TGluZVNlZ21lbnQ+IFNlZ21lbnRMaXN0OworCisKKy8vIEEgcmVw
cmVzZW50YXRpb24gb2YgYSBCYXNpY1NoYXBlIHRoYXQgZW5hYmxlcyBsYXlvdXQgY29kZSB0byBk
ZXRlcm1pbmUgaG93IHRvIGJyZWFrIGEgbGluZSB1cCBpbnRvIHNlZ21lbnRzCisvLyB0aGF0IHdp
bGwgZml0IHdpdGhpbiBvciBhcm91bmQgYSBzaGFwZS4gVGhlIGxpbmUgaXMgZGVmaW5lZCBieSBh
IHBhaXIgb2YgbG9naWNhbCBZIGNvb3JkaW5hdGVzIGFuZCB0aGUKKy8vIGNvbXB1dGVkIHNlZ21l
bnRzIGFyZSByZXR1cm5lZCBhcyBwYWlycyBvZiBsb2dpY2FsIFggY29vcmRpbmF0ZXMuIFRoZSBC
YXNpY1NoYXBlIGl0c2VsZiBpcyBkZWZpbmVkIGluCisvLyBwaHlzaWNhbCBjb29yZGluYXRlcy4K
KworY2xhc3MgU2hhcGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBj
cmVhdGVTaGFwZShjb25zdCBCYXNpY1NoYXBlKiwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJv
eFNpemUsIFdyaXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZyk7CisKKyAg
ICB2aXJ0dWFsIH5TaGFwZSgpIHsgfQorCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFy
Z2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVk
SW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJ
bnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVk
SW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25z
dCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQp
IGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIGZsb2F0IHNoYXBlTWFyZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXJnaW47IH0KKyAgICBmbG9hdCBzaGFwZVBhZGRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3BhZGRpbmc7IH0KKworcHJpdmF0ZToKKyAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdN
b2RlOworICAgIGZsb2F0IG1fbWFyZ2luOworICAgIGZsb2F0IG1fcGFkZGluZzsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNoYXBlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE1NTgzMjFj
Y2Y4ZmUwYzI4MDI3YTQ1ZmM3YjIzNmE1NzU3ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
CisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNoYXBlSW5mby5oIgorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclJl
Z2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgewordGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1
ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50
ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+
Citjb25zdCBTaGFwZSogU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZh
bEdldHRlcj46OmNvbXB1dGVkU2hhcGUoKSBjb25zdAoreworICAgIGlmIChTaGFwZSogc2hhcGUg
PSBtX3NoYXBlLmdldCgpKQorICAgICAgICByZXR1cm4gc2hhcGU7CisKKyAgICBTaGFwZVZhbHVl
KiBzaGFwZVZhbHVlID0gKG1fcmVuZGVyZXItPnN0eWxlKCktPipzaGFwZUdldHRlcikoKTsKKyAg
ICBCYXNpY1NoYXBlKiBzaGFwZSA9IChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPnR5cGUoKSA9
PSBTaGFwZVZhbHVlOjpTaGFwZSkgPyBzaGFwZVZhbHVlLT5zaGFwZSgpIDogMDsKKworICAgIEFT
U0VSVChzaGFwZSk7CisKKyAgICBtX3NoYXBlID0gU2hhcGU6OmNyZWF0ZVNoYXBlKHNoYXBlLCBM
YXlvdXRTaXplKG1fc2hhcGVMb2dpY2FsV2lkdGgsIG1fc2hhcGVMb2dpY2FsSGVpZ2h0KSwgbV9y
ZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hh
cGVNYXJnaW4oKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVQYWRkaW5nKCkpOworICAgIEFT
U0VSVChtX3NoYXBlKTsKKyAgICByZXR1cm4gbV9zaGFwZS5nZXQoKTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91
dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+Citib29sIFNoYXBlSW5mbzxSZW5kZXJUeXBlLCBz
aGFwZUdldHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91
dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQoreworICAgIEFTU0VSVChsaW5l
SGVpZ2h0ID49IDApOworICAgIG1fc2hhcGVMaW5lVG9wID0gbGluZVRvcCAtIGxvZ2ljYWxUb3BP
ZmZzZXQoKTsKKyAgICBtX2xpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0OworICAgIG1fc2VnbWVudHMu
Y2xlYXIoKTsKKworICAgIGlmIChsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQorICAgICAgICAo
Y29tcHV0ZWRTaGFwZSgpLT4qaW50ZXJ2YWxHZXR0ZXIpKG1fc2hhcGVMaW5lVG9wLCBzdGQ6Om1p
bihtX2xpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGluZVRvcCksIG1fc2VnbWVu
dHMpOworCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IHRoaXMtPmxvZ2ljYWxM
ZWZ0T2Zmc2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NlZ21lbnRzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNhbExl
ZnRPZmZzZXQ7CisgICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2ljYWxM
ZWZ0T2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKK30KKwor
dGVtcGxhdGUgY2xhc3MgU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29s
dmVkU2hhcGVJbnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+OwordGVtcGxhdGUg
Y2xhc3MgU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZT
aGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTEzZDMyYTVkNjA5NWY1
ZDJmMDk4ZThmYjA5MGE2MTJjNTRlMzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyog
Q29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
KyogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyogICAgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorKiBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SCisqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgorKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyogU1VDSCBEQU1BR0UuCisqLworCisjaWZu
ZGVmIFNoYXBlSW5mb19oCisjZGVmaW5lIFNoYXBlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIK
KyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSAi
U2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwg
Y2xhc3MgSW5mb1R5cGU+CitjbGFzcyBNYXBwZWRJbmZvIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
SW5mb1R5cGUqIGVuc3VyZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KQorICAgIHsKKyAgICAgICAg
SW5mb01hcCYgaW5mb01hcCA9IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFw
KCk7CisgICAgICAgIGlmIChJbmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCisgICAg
ICAgICAgICByZXR1cm4gaW5mbzsKKyAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IGluZm9NYXAuYWRkKGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIH0KKyAgICBz
dGF0aWMgdm9pZCByZW1vdmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkgeyBpbmZvTWFwKCkucmVt
b3ZlKGtleSk7IH0KKyAgICBzdGF0aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5VHlwZSoga2V5
KSB7IHJldHVybiBpbmZvTWFwKCkuZ2V0KGtleSk7IH0KK3ByaXZhdGU6CisgICAgdHlwZWRlZiBI
YXNoTWFwPGNvbnN0IEtleVR5cGUqLCBPd25QdHI8SW5mb1R5cGU+ID4gSW5mb01hcDsKKyAgICBz
dGF0aWMgSW5mb01hcCYgaW5mb01hcCgpCisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEluZm9NYXAsIHN0YXRpY0luZm9NYXAsICgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY0lu
Zm9NYXA7CisgICAgfQorfTsKKwordGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1
ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50
ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+
CitjbGFzcyBTaGFwZUluZm8geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHZpcnR1YWwgflNoYXBlSW5mbygpIHsgfQorCisgICAgdm9pZCBzZXRTaGFwZVNpemUo
TGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCkKKyAgICB7
CisgICAgICAgIGlmIChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5U
X0JPWCkgeworICAgICAgICAgICAgbG9naWNhbFdpZHRoIC09IG1fcmVuZGVyZXItPmJvcmRlckFu
ZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gbV9y
ZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtX3NoYXBlTG9naWNhbFdpZHRoID09IGxvZ2ljYWxXaWR0aCAmJiBtX3NoYXBl
TG9naWNhbEhlaWdodCA9PSBsb2dpY2FsSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkaXJ0eVNoYXBlU2l6ZSgpOworICAgICAgICBtX3NoYXBlTG9naWNhbFdpZHRoID0gbG9n
aWNhbFdpZHRoOworICAgICAgICBtX3NoYXBlTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQ7
CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0
VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpOworICAgIHZvaWQgY2xlYXJTZWdt
ZW50cygpIHsgbV9zZWdtZW50cy5jbGVhcigpOyB9CisKKyAgICBMYXlvdXRVbml0IHNoYXBlTG9n
aWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3go
KS55KCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNh
bEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3go
KS5tYXhZKCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9n
aWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94
KCkueCgpICsgbG9naWNhbExlZnRPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dp
Y2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94
KCkubWF4WCgpICsgbG9naWNhbExlZnRPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVM
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5n
Qm94KCkud2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9
CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zaGFw
ZUxpbmVUb3AgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
aW5lQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBtX2xpbmVIZWlnaHQg
KyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KKworICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5n
QmxvY2tIZWlnaHQoKSBjb25zdCB7IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6
aW5nKCkgPT0gQ09OVEVOVF9CT1gpID8gKG1fc2hhcGVMb2dpY2FsSGVpZ2h0ICsgbV9yZW5kZXJl
ci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSkgOiBtX3NoYXBlTG9naWNhbEhlaWdo
dDsgfQorCisgICAgYm9vbCBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IGxvZ2ljYWxMaW5lVG9wKCkgPCBzaGFwZUxvZ2ljYWxCb3R0b20oKSAmJiBzaGFwZUxvZ2ljYWxU
b3AoKSA8PSBsb2dpY2FsTGluZUJvdHRvbSgpOyB9CisgICAgYm9vbCBsaW5lV2l0aGluU2hhcGVC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYmIChsb2dp
Y2FsTGluZUJvdHRvbSgpIDw9IHNoYXBlTG9naWNhbEJvdHRvbSgpKTsgfQorCisgICAgdm9pZCBk
aXJ0eVNoYXBlU2l6ZSgpIHsgbV9zaGFwZS5jbGVhcigpOyB9CisgICAgYm9vbCBzaGFwZVNpemVE
aXJ0eSgpIHsgcmV0dXJuICFtX3NoYXBlLmdldCgpOyB9CisgICAgY29uc3QgUmVuZGVyVHlwZSog
b3duZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICBT
aGFwZUluZm8oY29uc3QgUmVuZGVyVHlwZSogcmVuZGVyZXIpOiBtX3JlbmRlcmVyKHJlbmRlcmVy
KSB7IH0KKworICAgIGNvbnN0IFNoYXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7CisgICAgdmly
dHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9
IDA7CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVy
ZXItPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IExheW91dFVuaXQoKTsgfTsKKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0
eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLT5pc1JlbmRl
clJlZ2lvbigpKSA/IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpIDogTGF5b3V0
VW5pdCgpOyB9CisKKyAgICBMYXlvdXRVbml0IG1fc2hhcGVMaW5lVG9wOworICAgIExheW91dFVu
aXQgbV9saW5lSGVpZ2h0OworICAgIFNlZ21lbnRMaXN0IG1fc2VnbWVudHM7CisKK3ByaXZhdGU6
CisgICAgbXV0YWJsZSBPd25QdHI8U2hhcGU+IG1fc2hhcGU7CisKKyAgICBMYXlvdXRVbml0IG1f
c2hhcGVMb2dpY2FsV2lkdGg7CisgICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbEhlaWdodDsK
KyAgICBjb25zdCBSZW5kZXJUeXBlKiBtX3JlbmRlcmVyOworfTsKK30KKyNlbmRpZgorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRl
SW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5m
by5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDEyOTVkMDNlZGIyNzNmYWU3YmFiZWNkMWM0YmFlMDllYWFjZTBk
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnNpZGVJbmZvLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZv
LmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIklubGluZUl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitM
aW5lU2VnbWVudFJhbmdlOjpMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBz
dGFydCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCkKKyAgICA6IHN0YXJ0KHN0YXJ0LnJvb3Qo
KSwgc3RhcnQub2JqZWN0KCksIHN0YXJ0Lm9mZnNldCgpKQorICAgICwgZW5kKGVuZC5yb290KCks
IGVuZC5vYmplY3QoKSwgZW5kLm9mZnNldCgpKQorICAgIHsKKyAgICB9CisKK2Jvb2wgU2hhcGVJ
bnNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQorewor
ICAgIFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSByZW5kZXJlci0+c3R5bGUoKS0+cmVzb2x2ZWRT
aGFwZUluc2lkZSgpOworICAgIGlmICghc2hhcGVWYWx1ZSB8fCBzaGFwZVZhbHVlLT50eXBlKCkg
IT0gU2hhcGVWYWx1ZTo6U2hhcGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJhc2lj
U2hhcGUqIHNoYXBlID0gc2hhcGVWYWx1ZS0+c2hhcGUoKTsKKyAgICByZXR1cm4gc2hhcGUgJiYg
c2hhcGUtPnR5cGUoKSAhPSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBl
OworfQorCitib29sIFNoYXBlSW5zaWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQg
bWluU2VnbWVudFdpZHRoKQoreworICAgIGNvbnN0IFNoYXBlKiBzaGFwZSA9IGNvbXB1dGVkU2hh
cGUoKTsKKyAgICBpZiAoIXNoYXBlIHx8IG1fbGluZUhlaWdodCA8PSAwIHx8IGxvZ2ljYWxMaW5l
VG9wKCkgPiBzaGFwZUxvZ2ljYWxCb3R0b20oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgTGF5b3V0VW5pdCBuZXdMaW5lVG9wOworICAgIGlmIChzaGFwZS0+Zmlyc3RJbmNsdWRlZElu
dGVydmFsTG9naWNhbFRvcChtX3NoYXBlTGluZVRvcCwgTGF5b3V0U2l6ZShtaW5TZWdtZW50V2lk
dGgsIG1fbGluZUhlaWdodCksIG5ld0xpbmVUb3ApKSB7CisgICAgICAgIGlmIChuZXdMaW5lVG9w
ID4gbV9zaGFwZUxpbmVUb3ApIHsKKyAgICAgICAgICAgIG1fc2hhcGVMaW5lVG9wID0gbmV3TGlu
ZVRvcDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMDZiMzY0NTRiOWRh
YjFjMjAyNjU3NzA1ZWQ0OTcxODliYzdlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oCkBAIC0wLDAgKzEsMTE1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVJbnNpZGVJbmZvX2gK
KyNkZWZpbmUgU2hhcGVJbnNpZGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisj
aW5jbHVkZSAiU2hhcGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5saW5l
SXRlcmF0b3I7CitjbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlck9iamVjdDsKKworc3Ry
dWN0IExpbmVTZWdtZW50SXRlcmF0b3IgeworICAgIFJlbmRlck9iamVjdCogcm9vdDsKKyAgICBS
ZW5kZXJPYmplY3QqIG9iamVjdDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgTGluZVNlZ21l
bnRJdGVyYXRvcihSZW5kZXJPYmplY3QqIHJvb3QsIFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNp
Z25lZCBvZmZzZXQpCisgICAgICAgIDogcm9vdChyb290KQorICAgICAgICAsIG9iamVjdChvYmpl
Y3QpCisgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorfTsKKworc3RydWN0
IExpbmVTZWdtZW50UmFuZ2UgeworICAgIExpbmVTZWdtZW50SXRlcmF0b3Igc3RhcnQ7CisgICAg
TGluZVNlZ21lbnRJdGVyYXRvciBlbmQ7CisgICAgTGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxp
bmVJdGVyYXRvciYgc3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQpOworfTsKKwordHlw
ZWRlZiBWZWN0b3I8TGluZVNlZ21lbnRSYW5nZT4gU2VnbWVudFJhbmdlTGlzdDsKKworY2xhc3Mg
U2hhcGVJbnNpZGVJbmZvIDogcHVibGljIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0
eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGVJbnNpZGVJbmZvPiBjcmVhdGVJ
bmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNo
YXBlSW5zaWRlSW5mbyhyZW5kZXJlcikpOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRG
b3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgYm9vbCBjb21w
dXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV9zZWdtZW50UmFuZ2VzLmNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiBTaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2
ZWRTaGFwZUluc2lkZSwgJlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdt
ZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CisgICAgfQorCisgICAgYm9vbCBoYXNT
ZWdtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVC
b3VuZHMoKSAmJiBtX3NlZ21lbnRzLnNpemUoKTsKKyAgICB9CisgICAgY29uc3QgU2VnbWVudExp
c3QmIHNlZ21lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTZWdtZW50cygp
KTsKKyAgICAgICAgcmV0dXJuIG1fc2VnbWVudHM7CisgICAgfQorICAgIFNlZ21lbnRSYW5nZUxp
c3QmIHNlZ21lbnRSYW5nZXMoKSB7IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7IH0KKyAgICBjb25z
dCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdt
ZW50UmFuZ2VzOyB9CisgICAgY29uc3QgTGluZVNlZ21lbnQqIGN1cnJlbnRTZWdtZW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghaGFzU2VnbWVudHMoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBBU1NFUlQobV9zZWdtZW50UmFuZ2VzLnNpemUoKSA8IG1fc2VnbWVudHMu
c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICZtX3NlZ21lbnRzW21fc2VnbWVudFJhbmdlcy5zaXpl
KCldOworICAgIH0KKyAgICBib29sIGFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21l
bnRXaWR0aCk7CisKKyAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJvb2wgdmFsdWUpIHsgbV9uZWVk
c0xheW91dCA9IHZhbHVlOyB9CisgICAgYm9vbCBuZWVkc0xheW91dCgpIHsgcmV0dXJuIG1fbmVl
ZHNMYXlvdXQ7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRl
ZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0
ZWRTaGFwZSgpLT5zaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKTsgfQorCitwcml2YXRl
OgorICAgIFNoYXBlSW5zaWRlSW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCisgICAg
OiBTaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lk
ZSwgJlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz4gKHJlbmRlcmVyKQorICAgICwgbV9uZWVk
c0xheW91dChmYWxzZSkKKyAgICB7IH0KKworICAgIFNlZ21lbnRSYW5nZUxpc3QgbV9zZWdtZW50
UmFuZ2VzOworICAgIGJvb2wgbV9uZWVkc0xheW91dDoxOworfTsKKworfQorI2VuZGlmCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRl
cnZhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI1NTgwMzhiMjQ3YzNjODc1NzJlNTg2MGYwOGM4MTkyYjIxYmE0NTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
SW50ZXJ2YWwuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNoYXBlSW50ZXJ2YWwuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9y
IHsKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGkxLCBjb25zdCBT
aGFwZUludGVydmFsJiBpMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpMS54MSA8IGky
LngxOworICAgIH0KK307CisKK2Jvb2wgU2hhcGVJbnRlcnZhbDo6aW50ZXJzZWN0KGNvbnN0IFNo
YXBlSW50ZXJ2YWwmIGksIFNoYXBlSW50ZXJ2YWwmIHJ2KSBjb25zdAoreworICAgIGlmICh4MiA8
IGkueDEgfHwgeDEgPiBpLngyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcnYueDEgPSBz
dGQ6Om1heCh4MSwgaS54MSk7CisgICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54Mik7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgc29ydFNoYXBlSW50ZXJ2YWxzKFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYgdikKK3sKKyAgICBzdGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgpLCBJbnRlcnZh
bFgxQ29tcGFyYXRvcigpKTsKK30KKwordm9pZCBtZXJnZVNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZl
Y3RvcjxTaGFwZUludGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIs
IFZlY3RvcjxTaGFwZUludGVydmFsPiYgcnYpCit7CisgICAgaWYgKCF2MS5zaXplKCkpCisgICAg
ICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgpKTsKKyAgICBlbHNlIGlmICgh
djIuc2l6ZSgpKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7
CisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiB2KHYxLnNpemUoKSAr
IHYyLnNpemUoKSk7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwqIGludGVydmFsID0gMDsKKworICAg
ICAgICBzdGQ6Om1lcmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpLCB2Mi5lbmQo
KSwgdi5iZWdpbigpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKKworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghaW50ZXJ2
YWwpCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHZbaV0ueDEgPj0gaW50ZXJ2YWwtPngxICYmIHZbaV0ueDEgPD0gaW50ZXJ2YWwtPngyKSAv
LyBGSVhNRTogMXN0IDw9IHRlc3Qgbm90IG5lZWRlZD8KKyAgICAgICAgICAgICAgICBpbnRlcnZh
bC0+eDIgPSBzdGQ6Om1heChpbnRlcnZhbC0+eDIsIHZbaV0ueDIpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7CisgICAgICAgICAgICAg
ICAgaW50ZXJ2YWwgPSAmdltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpbnRlcnZhbCkKKyAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOworICAgIH0K
K30KKwordm9pZCBpbnRlcnNlY3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRl
cnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYyLCBWZWN0b3I8U2hhcGVJ
bnRlcnZhbD4mIHJ2KQoreworICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6
ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKKworICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCisg
ICAgICAgIHJldHVybjsKKworICAgIFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgYm9vbCBv
dmVybGFwID0gZmFsc2U7CisgICAgc2l6ZV90IGkxID0gMDsKKyAgICBzaXplX3QgaTIgPSAwOwor
CisgICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGkyIDwgdjJTaXplKSB7CisgICAgICAgIFNoYXBl
SW50ZXJ2YWwgdjEyOworICAgICAgICBpZiAodjFbaTFdLmludGVyc2VjdCh2MltpMl0sIHYxMikp
IHsKKyAgICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmludGVyc2VjdChpbnRlcnZhbCwg
aW50ZXJ2YWwpKSB7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICAg
ICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSB2
MTI7CisgICAgICAgICAgICAgICAgb3ZlcmxhcCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodjFbaTFdLngyIDwgdjJbaTJdLngyKQorICAgICAgICAgICAgICAgIGkxKys7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChvdmVybGFwKQorICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChp
bnRlcnZhbCk7CisgICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
djFbaTFdLngxIDwgdjJbaTJdLngxKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChvdmVybGFwKQorICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworfQorCit2b2lkIHN1YnRy
YWN0U2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MSwgY29uc3Qg
VmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBydikKK3sK
KyAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2Mi5z
aXplKCk7CisKKyAgICBpZiAoIXYxU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2
MlNpemUpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IGkxID0gMCwgaTIgPSAwOworICAgICAgICBydi5hcHBl
bmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7CisKKyAgICAgICAgd2hpbGUgKGkxIDwgcnYu
c2l6ZSgpICYmIGkyIDwgdjJTaXplKSB7CisgICAgICAgICAgICBTaGFwZUludGVydmFsJiBpbnRl
cnZhbDEgPSBydltpMV07CisgICAgICAgICAgICBjb25zdCBTaGFwZUludGVydmFsJiBpbnRlcnZh
bDIgPSB2MltpMl07CisKKyAgICAgICAgICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwx
LngxICYmIGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgcnYu
cmVtb3ZlKGkxKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MiA8IGludGVydmFs
MS54MSkKKyAgICAgICAgICAgICAgICBpMiArPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaW50
ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngyKQorICAgICAgICAgICAgICAgIGkxICs9IDE7CisgICAg
ICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwy
LngyIDwgaW50ZXJ2YWwxLngyKSB7CisgICAgICAgICAgICAgICAgcnYuaW5zZXJ0KGkxLCBTaGFw
ZUludGVydmFsKGludGVydmFsMS54MSwgaW50ZXJ2YWwyLngxKSk7CisgICAgICAgICAgICAgICAg
aW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOworICAgICAgICAgICAgICAgIGkyICs9IDE7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGludGVydmFsMi54MSA8PSBpbnRlcnZhbDEueDEpIHsKKyAg
ICAgICAgICAgICAgICBpbnRlcnZhbDEueDEgPSBpbnRlcnZhbDIueDI7CisgICAgICAgICAgICAg
ICAgaTIgKz0gMTsKKyAgICAgICAgICAgIH0gZWxzZSAgeyAvLyAoaW50ZXJ2YWwyLngyID49IGlu
dGVydmFsMS54MikKKyAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDIgPSBpbnRlcnZhbDIueDE7
CisgICAgICAgICAgICAgICAgaTEgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmYxNGQ4YTVhNzIzMmQ5
MmVkYTNkZmQ5Mzc3OGE5MmNkNjk1NDQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU2hhcGVJbnRlcnZhbF9oCisjZGVmaW5lIFNoYXBlSW50ZXJ2YWxfaAorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBT
aGFwZUludGVydmFsIHsKK3B1YmxpYzoKKyAgICBmbG9hdCB4MTsKKyAgICBmbG9hdCB4MjsKKwor
ICAgIFNoYXBlSW50ZXJ2YWwoZmxvYXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApCisgICAgICAgIDog
eDEoeDEpCisgICAgICAgICwgeDIoeDIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaW50ZXJz
ZWN0KGNvbnN0IFNoYXBlSW50ZXJ2YWwmLCBTaGFwZUludGVydmFsJikgY29uc3Q7Cit9OworCit2
b2lkIHNvcnRTaGFwZUludGVydmFscyhWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgbWVy
Z2VTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBWZWN0
b3I8U2hhcGVJbnRlcnZhbD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgaW50ZXJz
ZWN0U2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3QgVmVj
dG9yPFNoYXBlSW50ZXJ2YWw+JiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7Cit2b2lkIHN1YnRy
YWN0U2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3QgVmVj
dG9yPFNoYXBlSW50ZXJ2YWw+JiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNoYXBlSW50ZXJ2YWxfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTE5MmY2NTA1ZDgyMTI4MzkyODJmYWQ5M2U2ZTI2M2IwZGFkMjFmNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5m
by5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRl
ICJTaGFwZU91dHNpZGVJbmZvLmgiCisKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworYm9vbCBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3Qg
UmVuZGVyQm94KiBib3gpCit7CisgICAgU2hhcGVWYWx1ZSogdmFsdWUgPSBib3gtPnN0eWxlKCkt
PnNoYXBlT3V0c2lkZSgpOworICAgIHJldHVybiBib3gtPmlzRmxvYXRpbmdXaXRoU2hhcGVPdXRz
aWRlKCkgJiYgdmFsdWUtPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSAmJiB2YWx1ZS0+c2hh
cGUoKTsKK30KKworYm9vbCBTaGFwZU91dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5l
KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQoreworICAgIGlmIChz
aGFwZVNpemVEaXJ0eSgpIHx8IG1fbGluZVRvcCAhPSBsaW5lVG9wIHx8IG1fbGluZUhlaWdodCAh
PSBsaW5lSGVpZ2h0KSB7CisgICAgICAgIGlmIChTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVy
U3R5bGU6OnNoYXBlT3V0c2lkZSwgJlNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz46OmNvbXB1
dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCkpIHsKKyAgICAgICAgICAgIG1f
bGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSBtX3NlZ21lbnRzWzBdLmxvZ2ljYWxM
ZWZ0IC0gc2hhcGVMb2dpY2FsTGVmdCgpOworICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGEgPSBtX3NlZ21lbnRzW21fc2VnbWVudHMuc2l6ZSgpLTFdLmxvZ2lj
YWxSaWdodCAtIHNoYXBlTG9naWNhbFJpZ2h0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKKyAgICAgICAgICAg
IG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBtX2xpbmVUb3AgPSBsaW5lVG9wOworICAgIH0KKworICAgIHJldHVybiBtX3NlZ21lbnRz
LnNpemUoKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiZTU5MDU2Y2MxZWQ3ZDAy
NDYyZWY0YTQ3MTZjZDM5N2JiZWEzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaApAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0g
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICog
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlT3V0c2lkZUluZm9f
aAorI2RlZmluZSBTaGFwZU91dHNpZGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQor
CisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIlNoYXBlSW5mby5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlckJveDsKKworY2xhc3MgU2hhcGVPdXRzaWRl
SW5mbyA6IHB1YmxpYyBTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0
c2lkZSwgJlNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4sIHB1YmxpYyBNYXBwZWRJbmZvPFJl
bmRlckJveCwgU2hhcGVPdXRzaWRlSW5mbz4geworcHVibGljOgorICAgIExheW91dFNpemUgc2hh
cGVMb2dpY2FsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0U2l6ZShzaGFwZUxvZ2ljYWxM
ZWZ0KCksIHNoYXBlTG9naWNhbFRvcCgpKTsgfQorCisgICAgTGF5b3V0VW5pdCBsZWZ0U2VnbWVu
dFNoYXBlQm91bmRpbmdCb3hEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGE7IH0KKyAgICBMYXlvdXRVbml0IHJpZ2h0U2VnbWVudFNoYXBlQm91
bmRpbmdCb3hEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGlu
Z0JveERlbHRhOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShM
YXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkgT1ZFUlJJREU7CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxTaGFwZU91dHNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJl
bmRlckJveCogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaGFwZU91dHNpZGVJbmZv
KHJlbmRlcmVyKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVy
Qm94Kik7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFw
ZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hh
cGUoKS0+c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQorCitwcml2YXRlOgorICAg
IFNoYXBlT3V0c2lkZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgOiBTaGFwZUluZm88
UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlNoYXBlOjpnZXRFeGNsdWRl
ZEludGVydmFscz4ocmVuZGVyZXIpIHsgfQorCisgICAgTGF5b3V0VW5pdCBtX2xlZnRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhOworICAgIExheW91dFVuaXQgbV9yaWdodFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGE7CisgICAgTGF5b3V0VW5pdCBtX2xpbmVUb3A7Cit9OworCit9Cisj
ZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9F
eGNsdXNpb25TaGFwZVZhbHVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOWQz
OTU3MzIzODJmM2IyNzZhYzU2NzZhNjJkYjE2ZjA3ZmVjYjguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0V4Y2x1c2lvblNoYXBlVmFsdWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwot
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0g
KiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFwZVZhbHVlX2gK
LSNkZWZpbmUgRXhjbHVzaW9uU2hhcGVWYWx1ZV9oCi0KLSNpbmNsdWRlICJCYXNpY1NoYXBlcy5o
IgotI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV4Y2x1c2lvblNoYXBlVmFsdWUgOiBwdWJs
aWMgUmVmQ291bnRlZDxFeGNsdXNpb25TaGFwZVZhbHVlPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBF
eGNsdXNpb25TaGFwZVZhbHVlVHlwZSB7Ci0gICAgICAgIC8vIFRoZSBBdXRvIHZhbHVlIGlzIGRl
ZmluZWQgYnkgYSBudWxsIEV4Y2x1c2lvblNoYXBlVmFsdWUqCi0gICAgICAgIFNoYXBlLAotICAg
ICAgICBPdXRzaWRlLAotICAgICAgICBJbWFnZQotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBjcmVhdGVTaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFz
aWNTaGFwZT4gc2hhcGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4Y2x1
c2lvblNoYXBlVmFsdWUoc2hhcGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGNsdXNpb25TaGFwZVZhbHVlPiBjcmVhdGVPdXRzaWRlVmFsdWUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBFeGNsdXNpb25TaGFwZVZhbHVlKE91dHNpZGUpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBjcmVhdGVJbWFn
ZVZhbHVlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEV4Y2x1c2lvblNoYXBlVmFsdWUoaW1hZ2UpKTsKLSAgICB9Ci0KLSAg
ICBFeGNsdXNpb25TaGFwZVZhbHVlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgQmFzaWNTaGFwZSogc2hhcGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLmdldCgpOyB9
Ci0gICAgU3R5bGVJbWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9
Ci0gICAgdm9pZCBzZXRJbWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgIHsK
LSAgICAgICAgaWYgKG1faW1hZ2UgIT0gaW1hZ2UpCi0gICAgICAgICAgICBtX2ltYWdlID0gaW1h
Z2U7Ci0gICAgfQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVl
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKTsgfQotCi1wcml2
YXRlOgotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFw
ZSkKLSAgICAgICAgOiBtX3R5cGUoU2hhcGUpCi0gICAgICAgICwgbV9zaGFwZShzaGFwZSkKLSAg
ICB7Ci0gICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUoRXhjbHVzaW9uU2hhcGVWYWx1ZVR5
cGUgdHlwZSkKLSAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICB7Ci0gICAgfQotICAgIEV4Y2x1
c2lvblNoYXBlVmFsdWUoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAgICAgICAgOiBt
X3R5cGUoSW1hZ2UpCi0gICAgICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICB7Ci0gICAgfQotICAg
IEV4Y2x1c2lvblNoYXBlVmFsdWVUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8QmFzaWNTaGFwZT4g
bV9zaGFwZTsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFnZTsKLX07Ci0KLX0KLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApp
bmRleCBiOGIyMjBhYjZjMTQ0MTlkMjA5OTBiZTIwOGFlMzY4NWY3NWM3YjkwLi5hNDAzN2MyNTky
MTA1OTBkYzQ0MGEyOGJkZWRjOGM0MDhmYmIwZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTE3MzMsOSArMTczMyw5IEBAIHZvaWQg
UmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlT3V0c2V0KExlbmd0aEJveCBvdXRzZXQpCiAgICAg
c3Vycm91bmQuYWNjZXNzKCktPmJvcmRlci5tX2ltYWdlLnNldE91dHNldChvdXRzZXQpOwogfQog
Ci1FeGNsdXNpb25TaGFwZVZhbHVlKiBSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlKCkK
K1NoYXBlVmFsdWUqIFJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGUoKQogewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+LCBzT3V0c2lkZVZh
bHVlLCAoRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxTaGFwZVZhbHVlPiwgc091dHNpZGVWYWx1ZSwgKFNo
YXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIHNPdXRzaWRlVmFs
dWUuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgKaW5kZXggNjkyMjBmMzA3YTc2NWJkZDUwMmZkOTgxYmIxNzc4YWYyZDc2MzE5ZS4uODNm
ZTAyMzhkMjRhNWJiNTFmYTRiNDVlMmZhMDRjNTgzZDkzODNjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNs
dWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiQ291bnRlckRpcmVjdGl2ZXMuaCIKICNpbmNs
dWRlICJEYXRhUmVmLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgogI2luY2x1
ZGUgIkZvbnRCYXNlbGluZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKQEAgLTQ5LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJT
dHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiU2hh
ZG93RGF0YS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNpbmNsdWRlICJTdHlsZUJhY2tn
cm91bmREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVCb3hEYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVE
ZXByZWNhdGVkRmxleGlibGVCb3hEYXRhLmgiCkBAIC0xNDcwLDMxICsxNDcwLDMxIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEtlcm5pbmcoU1ZHTGVuZ3RoIGspIHsgYWNjZXNzU1ZHU3R5bGUoKS0+
c2V0S2VybmluZyhrKTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIHNldFNoYXBlSW5zaWRlKFBhc3NS
ZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRTaGFwZUluc2lk
ZShQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlSW5zaWRlID09IHZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9zaGFwZUluc2lk
ZSA9IHZhbHVlOwogICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZUluc2lkZSgp
IGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlSW5zaWRlLmdldCgp
OyB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogcmVzb2x2ZWRTaGFwZUluc2lkZSgpIGNvbnN0
CisgICAgU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9zaGFwZUluc2lkZS5nZXQoKTsgfQorICAgIFNoYXBlVmFsdWUqIHJlc29s
dmVkU2hhcGVJbnNpZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVWYWx1
ZSogc2hhcGVJbnNpZGUgPSB0aGlzLT5zaGFwZUluc2lkZSgpOwotICAgICAgICBpZiAoc2hhcGVJ
bnNpZGUgJiYgc2hhcGVJbnNpZGUtPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpPdXRz
aWRlKQorICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUluc2lkZSA9IHRoaXMtPnNoYXBlSW5zaWRl
KCk7CisgICAgICAgIGlmIChzaGFwZUluc2lkZSAmJiBzaGFwZUluc2lkZS0+dHlwZSgpID09IFNo
YXBlVmFsdWU6Ok91dHNpZGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcGVPdXRzaWRlKCk7CiAg
ICAgICAgIHJldHVybiBzaGFwZUluc2lkZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFNoYXBlT3V0
c2lkZShQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKQorICAgIHZvaWQgc2V0
U2hhcGVPdXRzaWRlKFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlID09IHZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+
bV9zaGFwZU91dHNpZGUgPSB2YWx1ZTsKICAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSog
c2hhcGVPdXRzaWRlKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hh
cGVPdXRzaWRlLmdldCgpOyB9CisgICAgU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlKCkgY29uc3Qg
eyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlLmdldCgpOyB9CiAK
LSAgICBzdGF0aWMgRXhjbHVzaW9uU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlSW5zaWRlKCk7Ci0g
ICAgc3RhdGljIEV4Y2x1c2lvblNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZU91dHNpZGUoKSB7IHJl
dHVybiAwOyB9CisgICAgc3RhdGljIFNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZUluc2lkZSgpOwor
ICAgIHN0YXRpYyBTaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVPdXRzaWRlKCkgeyByZXR1cm4gMDsg
fQogCiAgICAgdm9pZCBzZXRDbGlwUGF0aChQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBv
cGVyYXRpb24pCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYXBlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZh
bHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjc0YWVlYjI5ZjgyNWNiYTU5Mzg1N2IxMDlhOWQxYWI0NDQ5Y2Iw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFw
ZVZhbHVlLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNoYXBlVmFsdWVfaAorI2RlZmluZSBTaGFwZVZhbHVlX2gKKworI2luY2x1ZGUgIkJh
c2ljU2hhcGVzLmgiCisjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcGVWYWx1ZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFNoYXBlVmFsdWU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFNoYXBlVmFs
dWVUeXBlIHsKKyAgICAgICAgLy8gVGhlIEF1dG8gdmFsdWUgaXMgZGVmaW5lZCBieSBhIG51bGwg
U2hhcGVWYWx1ZSoKKyAgICAgICAgU2hhcGUsCisgICAgICAgIE91dHNpZGUsCisgICAgICAgIElt
YWdlCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGNyZWF0ZVNo
YXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU2hhcGVWYWx1ZShzaGFwZSkpOworICAgIH0KKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGNyZWF0ZU91dHNpZGVWYWx1ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXBlVmFsdWUoT3V0c2lkZSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGNyZWF0ZUltYWdlVmFsdWUoUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2hhcGVWYWx1ZShpbWFnZSkpOworICAgIH0KKworICAgIFNoYXBlVmFsdWVUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBCYXNpY1NoYXBlKiBzaGFwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7IH0KKyAgICBTdHlsZUltYWdlKiBpbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gaW1hZ2UpCisgICAgeworICAgICAgICBpZiAobV9pbWFnZSAhPSBpbWFnZSkK
KyAgICAgICAgICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNoYXBlVmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gb3RoZXIu
dHlwZSgpOyB9CisKK3ByaXZhdGU6CisgICAgU2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hh
cGU+IHNoYXBlKQorICAgICAgICA6IG1fdHlwZShTaGFwZSkKKyAgICAgICAgLCBtX3NoYXBlKHNo
YXBlKQorICAgIHsKKyAgICB9CisgICAgU2hhcGVWYWx1ZShTaGFwZVZhbHVlVHlwZSB0eXBlKQor
ICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgIHsKKyAgICB9CisgICAgU2hhcGVWYWx1ZShQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQorICAgICAgICA6IG1fdHlwZShJbWFnZSkKKyAgICAg
ICAgLCBtX2ltYWdlKGltYWdlKQorICAgIHsKKyAgICB9CisgICAgU2hhcGVWYWx1ZVR5cGUgbV90
eXBlOworICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBtX3NoYXBlOworICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBtX2ltYWdlOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4
IDBhM2M3YThjYWMxYmMyMGEwZTQ0NWQ5NzMzZDcwNWE2MDViZDExY2MuLjA3NjdhZDhjMzFmYzdk
ZjhkZmFkOWM4YWRhOTQ5OWJlMGM5ZjQ5ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaApAQCAtMzAs
MTAgKzMwLDEwIEBACiAjaW5jbHVkZSAiQ291bnRlckRpcmVjdGl2ZXMuaCIKICNpbmNsdWRlICJD
dXJzb3JEYXRhLmgiCiAjaW5jbHVkZSAiRGF0YVJlZi5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNo
YXBlVmFsdWUuaCIKICNpbmNsdWRlICJGaWxsTGF5ZXIuaCIKICNpbmNsdWRlICJMaW5lQ2xhbXBW
YWx1ZS5oIgogI2luY2x1ZGUgIk5pbmVQaWVjZUltYWdlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTEzNiw4ICsxMzYsOCBAQCBwdWJsaWM6CiAK
ICAgICBMZW5ndGhTaXplIG1fcGFnZVNpemU7CiAKLSAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVW
YWx1ZT4gbV9zaGFwZUluc2lkZTsKLSAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gbV9z
aGFwZU91dHNpZGU7CisgICAgUmVmUHRyPFNoYXBlVmFsdWU+IG1fc2hhcGVJbnNpZGU7CisgICAg
UmVmUHRyPFNoYXBlVmFsdWU+IG1fc2hhcGVPdXRzaWRlOwogICAgIExlbmd0aCBtX3NoYXBlTWFy
Z2luOwogICAgIExlbmd0aCBtX3NoYXBlUGFkZGluZzsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203976</attachid>
            <date>2013-06-06 15:48:14 -0700</date>
            <delta_ts>2013-06-06 16:10:14 -0700</delta_ts>
            <desc>Adding folders</desc>
            <filename>bug-117162-20130606154641.patch</filename>
            <type>text/plain</type>
            <size>287123</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRkYWQ0Zjg0MWQyZmQ2
N2Y3YzcwYzYyMjRjMWIyY2UzYzM1NTc1MS4uMTNhODE5YWZhZDI2MmY2OTE2ZjBhNGQ2MDM5OTg1
MmUzN2Q5YjQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNCBAQAorMjAxMy0wNi0wNiAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSBz
cGxpdCBiZXR3ZWVuIHRoZSBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9ucywKKyAgICAgICAgc29tZSByZW5hbWluZyBpcyBuZWNlc3NhcnkuIEluIGdlbmVyYWwsIHRo
aXMgcGF0Y2ggcmVtb3ZlcyAnRXhjbHVzaW9uJyBmcm9tCisgICAgICAgIGFueSBTaGFwZXMgY29k
ZSwgbW9zdGx5IHJlbmFtaW5nIEV4Y2x1c2lvblNoYXBlIC0+IFNoYXBlLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVy
dHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAgICog
Y3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eVNoYXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
U2hhcGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVNoYXBl
OjpjcmVhdGVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFwcGVyU2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmVuc3VyZVByb3Bl
cnR5TWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2hhcGVJbnNpZGVJbmZvKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVTaGFwZVNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0ZXJDaGls
ZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9j
YXRpb25Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25O
ZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5zdXJlU2hhcGVJbnNpZGVJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaGFwZUluc2lkZUluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNldFNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5n
TWFyZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRTaGFwZUluc2lkZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3Np
dGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5zRm9yTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMb2dpY2FsTGluZVRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNh
bEhlaWdodElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGlu
ZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6d2lsbEJlRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzaGFwZU91dHNpZGVJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50T2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JlZmxleFZlcnRleCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppbndh
cmRFZGdlTm9ybWFsKToKKyAgICAgICAgKFdlYkNvcmU6Om91dHdhcmRFZGdlTm9ybWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGVuZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpzbmFwVmVydGlj
ZXNUb0xheW91dFVuaXRHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTaGFwZVBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50
ZXJzZWN0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6
OmFib3ZlT3JUb1RoZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpmaXJz
dEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1BvbHlnb25TaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpP
ZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29uRWRnZTo6
ZWRnZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpiYXNpcyk6
CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OlBvbHlnb25TaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2VZSW50
ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2VwdEZvcldp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRpbmdCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBlTWFyZ2luQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZh
bHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OmZpcnN0SW5jbHVkZWRJbnRl
cnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hh
cGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0
YW5nbGUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OkZsb2F0Um91bmRl
ZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cngpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVj
dGFuZ2xlU2hhcGU6OlJlY3RhbmdsZVNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWN0YW5nbGVTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9seWdvblNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUmVjdFRvTG9naWNhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNp
Y2FsU2l6ZVRvTG9naWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlU2hhcGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oLgorICAgICAgICAoV2ViQ29yZTo6
TGluZVNlZ21lbnQ6OkxpbmVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjp+U2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlOjpzaGFwZVBhZGRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wdXRlZFNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcHBl
ZEluZm86OmVuc3VyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6cmVtb3Zl
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjppbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcHBlZEluZm86OmluZm9NYXApOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZv
Ojp+U2hhcGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2V0U2hhcGVTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6Y2xlYXJTZWdtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlTG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluZm86OnNoYXBlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpz
aGFwZUxvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9n
aWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExpbmVUb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGluZUJvdHRvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlSW5mbzo6bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVJbmZvOjpsaW5lV2l0aGluU2hhcGVCb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcGVJbmZvOjpkaXJ0eVNoYXBlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluZm86OnNoYXBlU2l6ZURpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6b3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpTaGFwZUluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsVG9wT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGVJbnNpZGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lk
ZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6TGluZVNlZ21l
bnRJdGVyYXRvcjo6TGluZVNlZ21lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmNyZWF0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJ
bmZvOjpoYXNTZWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OnNl
Z21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2VnbWVudFJhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OmN1cnJlbnRTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2V0TmVlZHNMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpuZWVkc0xheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OlNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgICogcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUludGVydmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFNoYXBlSW50ZXJ2
YWxzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlU2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6c3Vi
dHJhY3RTaGFwZUludGVydmFscyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
dGVydmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
SW50ZXJ2YWwuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW50ZXJ2YWw6OlNoYXBlSW50ZXJ2
YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRG
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRz
Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hhcGVMb2dp
Y2FsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OmxlZnRTZWdt
ZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lk
ZUluZm86OnJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXBlT3V0c2lkZUluZm86OlNoYXBlT3V0c2lkZUluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5p
dGlhbFNoYXBlSW5zaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpzaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFwZVZhbHVlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OlNoYXBlVmFsdWUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6CisKIDIw
MTMtMDYtMDYgIERpZWdvIFBpbm8gR2FyY2lhICA8ZHBpbm9AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBQYXJhbWV0ZXIgJ3JlZkNoaWxkJyBmcm9tIGZ1bmN0aW9uICd3ZWJraXRfZG9tX25v
ZGVfaW5zZXJ0X2JlZm9yZScgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgTlVMTApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCA4ZTgzNzM1OWM5MzU2NmRjNTU2YTRlM2YyODc5Y2M2Yjc5NzIxZWZkLi41
MTdjNzdjYTk4OGNkNzA3MTZjZmVjNzdiMmY2MTI5OWExYTI0MGI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtNzYsNiArNzYsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmlu
ZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL21hdGhtbCIKKyAgICAiJHtXRUJDT1JF
X0RJUn0vcmVuZGVyaW5nL3NoYXBlcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3N0
eWxlIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3ZnIgogICAgICIke1dFQkNPUkVf
RElSfS9zdG9yYWdlIgpAQCAtMjA5MywxMyArMjA5NCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
ICAgICByZW5kZXJpbmcvQmlkaVJ1bi5jcHAKICAgICByZW5kZXJpbmcvQ291bnRlck5vZGUuY3Bw
CiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25J
bnRlcnZhbC5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKLSAgICByZW5k
ZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZS5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcAotICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8uY3BwCiAgICAgcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cAogICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAogICAgIHJlbmRlcmluZy9GbG93
VGhyZWFkQ29udHJvbGxlci5jcHAKQEAgLTIyMTQsNiArMjIwOCwxNSBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwCiAgICAg
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCiAKKyAgICByZW5kZXJp
bmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1JlY3Rhbmds
ZVNoYXBlLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisgICAgcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUluZm8uY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUlu
Zm8uY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcAorICAgIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1No
YXBlT3V0c2lkZUluZm8uaAorCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcAog
ICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUv
Q291bnRlckRpcmVjdGl2ZXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDBhNTI4ODM3ZTcy
MzQ3MjEwN2MwOGIyZGIwMzBkNDg3Y2VmODIwYmIuLjIzYWRmNGVlZTc5MTAwYWI4MmE1NzcwMmYx
NTM1YzMzYjk2ZWMzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05MCw2ICs5MCw3IEBAIHdl
YmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcgXAogCS1JJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwgXAorCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2ZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvc3RvcmFnZSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA4NDFhNTQxOTUwNGI4NjA3ZWMyNGFhNDNmMTdjOTYxOTI2
ZjVjYmYxLi45NGRmZTZjOWYyZTI3OTMxZmUzMjJlZjEyZmY5MTk3Yjk4ZjUwNjVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQzODUsMjAgKzQzODUsNiBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db3VudGVyTm9kZS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvbkludGVydmFsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
bkludGVydmFsLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29u
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCi0J
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCi0JU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluZm8uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVJbmZvLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBcCkBA
IC00NjMzLDYgKzQ2MTksMjAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0Jhc2ljU2hhcGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9C
b3JkZXJEYXRhLmggXApAQCAtNDY0Niw3ICs0NjQ2LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ3Vyc29yRGF0YS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ3Vyc29yTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvRGF0YVJlZi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRmlsbExheWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxM
YXllci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uLmgg
XApAQCAtNDY2Myw2ICs0NjYyLDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU2hhZG93RGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hh
cGVWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3Jv
dW5kRGF0YS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tn
cm91bmREYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJveERh
dGEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDBiNGE0ZmQ5ZDA2ZGRkODUzZjIwNmMxNTJiMDdkYzAy
YzJmMmE2NzkuLjA3YmE4YmQ5NzdhZjc4M2ZkMTE1ZjMwY2Q2MWRjNGVmMjRkODRiNmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQpAQCAtMTE0NSwxMyArMTE0NSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmlu
Zy9CaWRpUnVuLmNwcCBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmNwcCBcCiAgICAgcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFs
LmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIFwKLSAgICByZW5kZXJp
bmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
LmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAgXAotICAgIHJlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgXAogICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAgXAogICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVu
ZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcCBcCkBAIC0xMjQ1LDYgKzEyMzgsMTMgQEAg
U09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlcldvcmRCcmVhay5jcHAgXAogICAgIHJl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBcCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9y
LmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwIFwKKyAgICByZW5k
ZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBcCisgICAgcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW50ZXJ2YWwuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUlu
Zm8uY3BwIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwIFwKICAgICByZW5k
ZXJpbmcvc3R5bGUvQ29udGVudERhdGEuY3BwIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ291bnRl
ckRpcmVjdGl2ZXMuY3BwIFwKQEAgLTI0MDMsMTMgKzI0MDMsNiBAQCBIRUFERVJTICs9IFwKICAg
ICByZW5kZXJpbmcvYnJlYWtfbGluZXMuaCBcCiAgICAgcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmgg
XAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9u
SW50ZXJ2YWwuaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBcCi0gICAgcmVu
ZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGUuaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIFwKLSAgICByZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmggXAogICAgIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5o
IFwKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oIFwKICAgICByZW5kZXJpbmcvSGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmggXApAQCAtMjUxMywxOCArMjUwNiwyNSBAQCBIRUFERVJT
ICs9IFwKICAgICByZW5kZXJpbmcvUmVuZGVyV29yZEJyZWFrLmggXAogICAgIHJlbmRlcmluZy9S
b290SW5saW5lQm94LmggXAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5oIFwKKyAgICBy
ZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1Jl
Y3RhbmdsZVNoYXBlLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBcCisgICAgcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
c2lkZUluZm8uaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmggXAorICAg
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIFwKICAgICByZW5kZXJpbmcvc3R5
bGUvQmFzaWNTaGFwZXMuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRhLmggXAog
ICAgIHJlbmRlcmluZy9zdHlsZS9Db3VudGVyRGlyZWN0aXZlcy5oIFwKICAgICByZW5kZXJpbmcv
c3R5bGUvQ3Vyc29yRGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ3Vyc29yTGlzdC5oIFwK
LSAgICByZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIFwKICAgICByZW5kZXJp
bmcvc3R5bGUvRmlsbExheWVyLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3Qu
aCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmggXAogICAgIHJlbmRlcmlu
Zy9zdHlsZS9RdW90ZXNEYXRhLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
IFwKICAgICByZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oIFwKKyAgICByZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0
YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRhLmggXAogICAgIHJlbmRlcmlu
Zy9zdHlsZS9TdHlsZUNhY2hlZEltYWdlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQppbmRleCA1MzAyYzRjZTNk
ZmE4NmU0ZWVlYjdiNzFjMjRhNjY3MjgzZjdhMDZmLi5iNWUzMzRiMGIwYzU0ZDJjODExOTdkMzQ2
MzVlNWMwMTIwMzRmYWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtODUsNiArODUsNyBAQCBJTkNMVURF
UEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL3BsdWdpbnMgXAogICAgICQkU09VUkNFX0RJUi9y
ZW5kZXJpbmcgXAogICAgICQkU09VUkNFX0RJUi9yZW5kZXJpbmcvbWF0aG1sIFwKKyAgICAkJFNP
VVJDRV9ESVIvcmVuZGVyaW5nL3NoYXBlcyBcCiAgICAgJCRTT1VSQ0VfRElSL3JlbmRlcmluZy9z
dHlsZSBcCiAgICAgJCRTT1VSQ0VfRElSL3JlbmRlcmluZy9zdmcgXAogICAgICQkU09VUkNFX0RJ
Ui9zdG9yYWdlIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qCmluZGV4IGU4MDcyMDFiNDExMGI5Y2FjZTc1ZjBlMTYwNzRkMzJkMmVjMGQ3NjkuLjBk
OTVhMjI5MmNmNTBlMGE3Y2U1NTdmOTZlMmJiMjA0YjQ0NjIwMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNTQyMiwxMiArNTQyMiw2
IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGUuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mby5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xX
aW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtNjMwNiw2ICs2MzAwLDEyIEBACiAg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc2hhcGVzXFBvbHlnb25TaGFwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUludGVydmFs
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hh
cGVPdXRzaWRlSW5mby5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc3ZnXFNWR1BhdGhEYXRhLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTEyMTA5LDExICsxMjEwOSw2IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcYnJlYWtfbGluZXMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xDb3VudGVyTm9kZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVsbGlwc2lzQm94LmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGUuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xGaXhlZFRhYmxlTGF5b3V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcRmxvd1RocmVhZENvbnRyb2xsZXIuaCIgLz4KQEAgLTEyMTk3LDYg
KzEyMTkyLDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVy
U2VsZWN0aW9uSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XFJlbmRlclNsaWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XFJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnRlcnZh
bC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFw
ZU91dHNpZGVJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
c3ZnXFJlbmRlclNWR0Jsb2NrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc3ZnXFJlbmRlclNWR0NvbnRhaW5lci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCIgLz4KQEAgLTEyMjY5
LDcgKzEyMjcwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHls
ZVxDdXJzb3JEYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
c3R5bGVcQ3Vyc29yTGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXHN0eWxlXERhdGFSZWYuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdHlsZVxFeGNsdXNpb25TaGFwZVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRmlsbExheWVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcR3JpZFBvc2l0aW9uLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcR3JpZFRyYWNrU2l6ZS5oIiAvPgpAQCAt
MTIyODAsNiArMTIyODAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHN0eWxlXFJlbmRlclN0eWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc3R5bGVcUmVuZGVyU3R5bGVDb25zdGFudHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFkb3dEYXRhLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU2hhcGVWYWx1ZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxlQmFja2dyb3VuZERhdGEuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTdHlsZUJveERh
dGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTdHls
ZUNhY2hlZEltYWdlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZjVlODcyMzhjN2YyMDhiNzU4YTBm
ZDcxNjE4ZDAyZjRkMjJkYzcwMy4uNWUyY2UwOWVhNGY0YzNmODUzMmE4YjJjZGEzMWFkMmU2NDA4
M2ExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMjQzMiwyMyArMjQzMiwyMyBAQAogICAgIDwvQ2xDb21w
aWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVsbGlwc2lzQm94LmNw
cCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbkludGVydmFsLmNw
cCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25T
aGFwZS5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5
Z29uLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJl
Y3RhbmdsZVNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1
c2lvblJlY3RhbmdsZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHNoYXBlc1xTaGFwZS5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25TaGFwZS5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNo
YXBlc1xTaGFwZUluc2lkZUluZm8uY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCI+CisgICAgPC9DbENvbXBpbGU+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xT
aGFwZU91dHNpZGVJbmZvLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcCI+CkBAIC05MTIwLDE5ICs5MTIwLDIyIEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRWxsaXBzaXNCb3guaCI+CiAgICAgICA8Rmls
dGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbkludGVydmFsLmgiPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hhcGUuaCI+CisgICAgICA8
RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5oIj4KICAgICAg
IDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIj4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuaCI+CiAgICAgICA8Rmls
dGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmgiPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uaCI+CiAgICAgICA8
RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIj4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnRlcnZhbC5o
Ij4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hh
cGVPdXRzaWRlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaCI+CkBAIC05NTg4LDkgKzk1OTEsNiBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXERhdGFSZWYuaCI+CiAgICAgICA8RmlsdGVyPnJl
bmRlcmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEV4Y2x1c2lvblNoYXBlVmFsdWUuaCI+Ci0gICAg
ICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEZpbGxMYXllci5oIj4KICAg
ICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBA
IC05NjIxLDYgKzk2MjEsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHN0eWxlXFNoYWRvd0RhdGEuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXHN0eWxlXFNoYXBlVmFsdWUuaCI+CisgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwv
RmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXHN0eWxlXFN0eWxlQmFja2dyb3VuZERhdGEuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRl
cmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTUxODQsNCArMTUxODcs
NCBAQAogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxk
U3RlcD4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQ1MGYyYzVmNWJkNjQwNGNmZmNkNzk5NWU2NmE3ZmRmOTM1
NGY5ODcuLjRjNDg3ZWE1M2ExNTM5ZDBkOGFkOGUzNTM3YWM3ZTk3MTExZTI4ZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4
MzUsMTQgKzE4MzUsNiBAQAogCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9u
czNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICov
OyB9OwogCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNTEy
ODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi87IH07CiAJCTZFNjdEMkE5
MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0QuaCAqLzsgfTsKLQkJNkU4Nzk4QkExNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lv
bkludGVydmFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi87
IH07Ci0JCTZFODc5OEJCMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjUxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkU4Nzk4QkMxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RTg3OThCNjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFu
Z2xlLmNwcCAqLzsgfTsKLQkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJl
Y3RhbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovOyB9Owot
CQk2RTg3OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjgxNUY4MUU0QTAw
QkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLzsgfTsKLQkJNkU4Nzk4QkYxNUY4MUU0QTAw
QkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hh
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2
RUFGMzQwRjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRDE2MTM4NjlBMDA4
NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5jcHAgKi87IH07Ci0JCTZFQUYzNDEwMTYxMzg2OUEw
MDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9u
UG9seWdvbi5oICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKIAkJ
NkVCQzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENG
OEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5
IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0
LmNwcCAqLzsgfTsKQEAgLTMyNjMsOCArMzI1NSw2IEBACiAJCTk4Q0U0MzJBMTI5RTAwRTUwMDU4
MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xvYWRlci5oICovOyB9
OwogCQk5OEVCMUY5NTEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4RUIxRjk0MTMxM0ZFMDUw
MEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTlBMUI2Rjk3MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0
cmluZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3Rv
bS5jcHAgKi87IH07Ci0JCTlBOUNFRjhEMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlBOUNFRjhCMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvLmNwcCAqLzsgfTsKLQkJOUE5Q0VGOEUxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlBOUNFRjhDMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OUIxQUIwN0MxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25D
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUIxQUIwN0IxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25D
dXN0b20uY3BwICovOyB9OwogCQk5QjI0REU4RTE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJESUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovOyB9OwogCQk5QjJE
OEE3OTE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMkQ4QTc4MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRv
U3RlcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC01NzM5LDcgKzU3MjksNyBAQAogCQlGRDA2REZBNTEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZEMDZERkEzMTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwICovOyB9OwogCQlGRDA2REZBNjEzNEE0REVGMDA2RjVEN0QgLyog
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA2REZBNDEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlLmggKi87IH07CiAJCUZEMTY2MEE1MTM3ODdDNkQwMDFGRkE3QiAv
KiBEZW5vcm1hbERpc2FibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRDE2NjBBNDEzNzg3QzZEMDAxRkZBN0IgLyogRGVub3JtYWxEaXNhYmxlci5o
ICovOyB9OwotCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQxQUYx
NEUxNjU2RjEyMTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDFBRjE1MDE2NTZGMTUxMDBD
NkQ0RjcgLyogU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRDIzQTEyNTEz
RjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyM0ExMjMxM0Y1RkE1
OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAqLzsgfTsKIAkJ
RkQyM0ExMjYxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDIzQTEy
NDEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLzsg
fTsKIAkJRkQyREJGMTIxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyREJGMEUx
MkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3b3JrICovOyB9OwpAQCAtNTg1Niw2
ICs1ODQ2LDIwIEBACiAJCUZEMzE2MEMwMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRGcmFtZU1hYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDMxNjBC
QTEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3BwICovOyB9OwogCQlGRDM1OTE4RjEz
OERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzU5MThEMTM4REIyMjAwMEUxRUJFQyAv
KiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwICovOyB9OwogCQlGRDM1OTE5MDEzOERCMjIwMDBFMUVC
RUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDM1OTE4RTEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRp
bWVsaW5lLmggKi87IH07CisJCUZENDVBOTRGMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0YxNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTAxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODEx
NzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTUxMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFw
ZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMDhBODgzMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1MjE3NUQz
RjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBl
T3V0c2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRDQ1QTk1MzE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0UxNzVEMzkyNjAwMkNE
MzYwIC8qIFNoYXBlLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIxRUM4IC8qIFNo
YXBlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLzsgfTsKKwkJRkQ0
NUE5NTUxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4MjE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGVJbnNpZGVJbmZvLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NTYxNzVEM0ZCODAwQzIx
RUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lk
ZUluZm8uY3BwICovOyB9OworCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFFQzggLyogUG9seWdvblNo
YXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4
QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTgxNzVENDE0QzAwQzIxRUM4
IC8qIFJlY3RhbmdsZVNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1
OTE3NUQ0MTcxMDBDMjFFQzggLyogUG9seWdvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdBMTc1RDM5MjYwMDJDRDM2MCAvKiBQ
b2x5Z29uU2hhcGUuY3BwICovOyB9OworCQlGRDQ1QTk1QTE3NUQ0MTcxMDBDMjFFQzggLyogUmVj
dGFuZ2xlU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmNwcCAqLzsg
fTsKKwkJRkQ0NUE5NUIxNzVENDFFRTAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2YWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODg1MTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NUMxNzVENDIwRDAwQzIxRUM4IC8qIFNoYXBlSW50
ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQwOEE4ODQxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuY3BwICovOyB9OwogCQlG
RDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTAxMzdCNjUxODAwMDA4RENFIC8q
IFplcm9Qb2xlLmNwcCAqLzsgfTsKIAkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Q
b2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUz
NzM1MTEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCAqLzsgfTsKIAkJRkQ1MzczNTYxMzdC
NjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1NDEzN0I2NTNCMDAwMDhE
Q0UgLyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCAqLzsgfTsKQEAgLTU4NzgsOCArNTg4
Miw2IEBACiAJCUZENkVEMkM4MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkVEMkM2
MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuaCAqLzsgfTsKIAkJRkQ2RjI1
MkMxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZGMjUyOTEzRjVF
RjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAqLzsgfTsKIAkJ
RkQ2RjI1MkQxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ2RjI1MkEx
M0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oICovOyB9Owot
CQlGRDc0OEFCRjE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENzQ4QUJE
MTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwICovOyB9Owot
CQlGRDc0OEFDMDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc0OEFCRTE1
QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkQ3ODY4QjkxMzZCOTk5MjAw
RDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc4NjhCNzEzNkI5OTkyMDBENDAzREYgLyog
SlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLzsgfTsKIAkJRkQ3ODY4QkExMzZCOTk5MjAw
RDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3ODY4QjgxMzZCOTk5MjAwRDQwM0RGIC8qIEpT
RHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovOyB9OwogCQlGRDdGMjk5MTEzRDRDMENCMDBBRDk1
MzUgLyogV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDdGMjk4QTEzRDRDMENCMDBBRDk1MzUgLyogV2F2ZVNoYXBl
ckRTUEtlcm5lbC5jcHAgKi87IH07CkBAIC01OTQwLDggKzU5NDIsNiBAQAogCQlGREIwNTJFMDE1
NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjA1MkRFMTU2MUE0MkMwMEI1MDBENiAv
KiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oICovOyB9OwogCQlGREIxNzAwNTE0QTJCQUIyMDBBMkI1
RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjE3MDAzMTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNo
YW5uZWxSZXNhbXBsZXIuY3BwICovOyB9OwogCQlGREIxNzAwNjE0QTJCQUIyMDBBMkI1RDkgLyog
TXVsdGlDaGFubmVsUmVzYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGREIxNzAwNDE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVz
YW1wbGVyLmggKi87IH07Ci0JCUZEQjhEMURBMTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25T
aGFwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEQjhEMUQ5MTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGREI4RDFFNTE2QjBD
Qzk3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQjhEMURCMTZCMEMwRjYwMDM0MEYxMCAvKiBF
eGNsdXNpb25TaGFwZUluZm8uY3BwICovOyB9OwogCQlGREJEMURGQzE2N0ZFMjdEMDA1MUExMUUg
LyogSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGREJEMURGQjE2N0ZFMjdEMDA1MUExMUUgLyogSlNPc2NpbGxh
dG9yTm9kZUN1c3RvbS5jcHAgKi87IH07CiAJCUZEQkQ0ODBDMTU5QkM2ODcwMDkzRUI0RiAvKiBK
U01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQ0ODBBMTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlh
U3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCAqLzsgfTsKIAkJRkRCRDQ4MEQxNTlCQzY4NzAwOTNF
QjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQkQ0ODBCMTU5QkM2ODcwMDkzRUI0RiAvKiBK
U01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmggKi87IH07CkBAIC04MjI4LDE0ICs4MjI4LDYg
QEAKIAkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4
RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk2RTg3OThCNDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uSW50ZXJ2YWwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNTE1RjgxRTRBMDBCRkU0
QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXhjbHVzaW9uSW50ZXJ2YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4
Nzk4QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25SZWN0YW5nbGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEgLyogRXhj
bHVzaW9uUmVjdGFuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1
c2lvblJlY3RhbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCODE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1
c2lvblBvbHlnb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhj
bHVzaW9uUG9seWdvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFQUYzNDBF
MTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9GbG9h
dDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJDNUVBRDEzOEI1
MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MDYsOCArOTY5OCw2IEBACiAJCTk4Q0U0MzI5MTI5RTAw
RTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExpbmtMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOThFQjFGOTQx
MzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTlBMUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01TdHJpbmdMaXN0Q3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUE5Q0VGOEIxNjNCM0VBMTAw
REU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlBOUNFRjhDMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOUIxQUIwNzkxNjQ4QzY5RDAwNTFGM0YyIC8qIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTlCMUFCMDdCMTY0OEM3QzQwMDUxRjNGMiAvKiBKU0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5QjI0REU4QzE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJESUVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEJESUVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTgwLDggKzEyNTcwLDIyIEBACiAJ
CUZEMDBEN0EzMTRBM0Y2MTkwMDczNDAxMSAvKiBTaW5jUmVzYW1wbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbmNSZXNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkQwNkRGQTMxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRDA2REZBNDEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3QTE3NUQzOTI2
MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBvbHlnb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZEMDhBODdCMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seWdvblNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZEMDhBODdDMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWN0YW5nbGVTaGFwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAv
KiBSZWN0YW5nbGVTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN0
YW5nbGVTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3RTE3NUQz
OTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3RjE3
NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODAxNzVEMzky
NjAwMkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaGFwZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4
QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNoYXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RDA4QTg4MjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlSW5zaWRlSW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgzMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUlu
c2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVJbnNpZGVJ
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg0MTc1RDM5MjYwMDJD
RDM2MCAvKiBTaGFwZUludGVydmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNoYXBlSW50ZXJ2YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RDA4QTg4NTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZUludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZEMDhBODg2MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlT3V0c2lkZUluZm8u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4NzE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaGFwZU91dHNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMTY2
MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlbm9ybWFsRGlzYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRXhjbHVzaW9uU2hhcGVWYWx1
ZS5oOyBwYXRoID0gc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaGFwZVZhbHVlLmg7IHBhdGggPSBzdHls
ZS9TaGFwZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMjNBMTIzMTNG
NUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMjNBMTI0MTNGNUZBNTkw
MEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDJEQkYwRTEyQjA0OEEzMDBFRDk4QzYgLyogQWNj
ZWxlcmF0ZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEFjY2VsZXJhdGUuZnJhbWV3b3Jr
OyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5mcmFtZXdvcms7
IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC0xMjc0Miw4ICsxMjc0Niw2IEBACiAJ
CUZENkYyNTI5MTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ2RjI1MkEx
M0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ2RjI1MkIxM0Y1RUYwRTAwNjUxNjVGIC8q
IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkQ3NDhBQkQxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRDc0OEFCRTE1
QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRDc4NjhCNzEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5h
bWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEeW5hbWljc0NvbXByZXNz
b3JOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEN0YyOThBMTNENEMwQ0Iw
MEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTI4MDcsOCArMTI4MDksNiBAQAogCQlGREIwNTJERTE1NjFBNDJDMDBC
NTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXVkaW9TdW1taW5nSnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkRCMTcwMDMxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdWx0aUNoYW5uZWxSZXNh
bXBsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREIxNzAwNDE0QTJCQUIy
MDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGREI4RDFEOTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGREI4RDFEQjE2QjBDMEY2MDAzNDBGMTAg
LyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZEQkQxREZCMTY3RkUyN0QwMDUxQTExRSAvKiBKU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT3NjaWxsYXRvck5vZGVD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREJENDgwQTE1OUJDNjg3
MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCRDQ4MEIxNTlCQzY4NzAwOTNFQjRG
IC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTg5MjIsNyArMTg5MjIsNiBAQAogCQkJCUJDMjI3MkExMEU4MkU4
N0MwMEU3Rjk3NSAvKiBDdXJzb3JEYXRhLmggKi8sCiAJCQkJQkMyMjcyQUMwRTgyRThGMzAwRTdG
OTc1IC8qIEN1cnNvckxpc3QuaCAqLywKIAkJCQlCQzIyNzQ2RTBFODM2NjQ1MDBFN0Y5NzUgLyog
RGF0YVJlZi5oICovLAotCQkJCUZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBFeGNsdXNpb25T
aGFwZVZhbHVlLmggKi8sCiAJCQkJQkM1RUI2OUMwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXll
ci5jcHAgKi8sCiAJCQkJQkM1RUI2OUQwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5oICov
LAogCQkJCUExMjcwNUMyMTY1NkJENjUwMEMyRTI3QyAvKiBHcmlkUG9zaXRpb24uaCAqLywKQEAg
LTE4OTQwLDYgKzE4OTM5LDcgQEAKIAkJCQlCQzVFQjY2NzBFODFDQjcxMDBCMjU5NjUgLyogUmVu
ZGVyU3R5bGVDb25zdGFudHMuaCAqLywKIAkJCQlCQzVFQjhDMTBFODIwMzFCMDBCMjU5NjUgLyog
U2hhZG93RGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI4QzIwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRv
d0RhdGEuaCAqLywKKwkJCQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5o
ICovLAogCQkJCUJDNUVCNkEwMEU4MURDNEYwMEIyNTk2NSAvKiBTdHlsZUJhY2tncm91bmREYXRh
LmNwcCAqLywKIAkJCQlCQzVFQjZBMTBFODFEQzRGMDBCMjU5NjUgLyogU3R5bGVCYWNrZ3JvdW5k
RGF0YS5oICovLAogCQkJCUJDNUVCNjdDMEU4MUQ0MjAwMEIyNTk2NSAvKiBTdHlsZUJveERhdGEu
Y3BwICovLApAQCAtMTk4NzIsNiArMTk4NzIsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQk0MzkwNDZDMjEyREEyNUNFMDBBRjgwQTIgLyogbWF0aG1sICovLAor
CQkJCUZEMDhBODc5MTc1RDM5MjYwMDJDRDM2MCAvKiBzaGFwZXMgKi8sCiAJCQkJQkM4QzhGQUEw
RERDRDJGMjAwQjU5MkY0IC8qIHN0eWxlICovLAogCQkJCTA4OEMyRjc0MTIzOTAwODAwMDNENjVD
RSAvKiBzdmcgKi8sCiAJCQkJQThDRkYwNEIwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxh
eW91dC5jcHAgKi8sCkBAIC0xOTg4NSwyMCArMTk4ODYsNiBAQAogCQkJCTkzOTJGMTRCMEFEMTg2
MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAogCQkJCUE4Q0ZGNkNBMEExNTYxQ0QwMDBB
NDIzNCAvKiBFbGxpcHNpc0JveC5jcHAgKi8sCiAJCQkJQThDRkY2QkQwQTE1NjExODAwMEE0MjM0
IC8qIEVsbGlwc2lzQm94LmggKi8sCi0JCQkJNkU4Nzk4QjQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvbkludGVydmFsLmNwcCAqLywKLQkJCQk2RTg3OThCNTE1RjgxRTRBMDBCRkU0QUEgLyog
RXhjbHVzaW9uSW50ZXJ2YWwuaCAqLywKLQkJCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5jcHAgKi8sCi0JCQkJNkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8q
IEV4Y2x1c2lvblBvbHlnb24uaCAqLywKLQkJCQk2RTg3OThCNjE1RjgxRTRBMDBCRkU0QUEgLyog
RXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCAqLywKLQkJCQk2RTg3OThCNzE1RjgxRTRBMDBCRkU0QUEg
LyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi8sCi0JCQkJNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLywKLQkJCQk2RTg3OThCOTE1RjgxRTRBMDBCRkU0QUEg
LyogRXhjbHVzaW9uU2hhcGUuaCAqLywKLQkJCQlGREI4RDFEQjE2QjBDMEY2MDAzNDBGMTAgLyog
RXhjbHVzaW9uU2hhcGVJbmZvLmNwcCAqLywKLQkJCQlGREI4RDFEOTE2QjBDMEQ3MDAzNDBGMTAg
LyogRXhjbHVzaW9uU2hhcGVJbmZvLmggKi8sCi0JCQkJRkQ3NDhBQkQxNUJGNzRFRDAwNTlDRjBE
IC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgKi8sCi0JCQkJRkQ3NDhBQkUxNUJGNzRF
RDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oICovLAotCQkJCTlBOUNFRjhC
MTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCAqLywKLQkJ
CQk5QTlDRUY4QzE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5o
ICovLAogCQkJCTMxMzEzRjYzMTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAgKi8sCiAJCQkJMzEzMTNGNjQxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmggKi8sCiAJCQkJQThDRkYwNDgwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVM
YXlvdXQuY3BwICovLApAQCAtMjA1NTIsNiArMjA1MzksMjcgQEAKIAkJCXBhdGggPSBvcGVuZ2w7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlGRDA4QTg3OTE3NUQzOTI2MDAy
Q0QzNjAgLyogc2hhcGVzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlGRDA4QTg3QTE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmNwcCAqLywK
KwkJCQlGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmggKi8sCisJCQkJ
RkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmNwcCAqLywKKwkJCQlG
RDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuaCAqLywKKwkJCQlGRDA4
QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovLAorCQkJCUZEMDhBODdGMTc1RDM5
MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovLAorCQkJCUZEMDhBODgwMTc1RDM5MjYwMDJDRDM2MCAv
KiBTaGFwZUluZm8uY3BwICovLAorCQkJCUZEMDhBODgxMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFw
ZUluZm8uaCAqLywKKwkJCQlGRDA4QTg4MjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJ
bmZvLmNwcCAqLywKKwkJCQlGRDA4QTg4MzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJ
bmZvLmggKi8sCisJCQkJRkQwOEE4ODQxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwu
Y3BwICovLAorCQkJCUZEMDhBODg1MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmgg
Ki8sCisJCQkJRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uY3Bw
ICovLAorCQkJCUZEMDhBODg3MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmgg
Ki8sCisJCQkpOworCQkJcGF0aCA9IHNoYXBlczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CiAJCUZEMzE1RkEyMTJCMDI1QjEwMEMxQTM1OSAvKiB3ZWJhdWRpbyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTcxNiwxNCArMjE3MjQsNiBA
QAogCQkJCTE0OEFGREE1MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc2N0NFMEIxNDVBQkMxMzAwNUU2NERCIC8qIEV4Y2VwdGlvbkhl
YWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NjdDRTBDMTQ1QUJDMTMwMDVFNjREQiAvKiBF
eGNlcHRpb25JbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTg3OThCQjE1RjgxRTRB
MDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFQUYz
NDEwMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggaW4gSGVhZGVycyAqLywK
LQkJCQk2RTg3OThCRDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggaW4g
SGVhZGVycyAqLywKLQkJCQk2RTg3OThCRjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hh
cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUZEQjhEMURBMTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNs
dXNpb25TaGFwZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCUZENzQ4QUMwMTVCRjc0RUQwMDU5
Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTlB
OUNFRjhFMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggaW4g
SGVhZGVycyAqLywKLQkJCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hh
cGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTAyNDU3NTIxNkNFQUEyNzAwMEU1NjcxIC8q
IEVYVERyYXdCdWZmZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBFOEJEMDA4
NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBNzEyODBF
OEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLywKQEAgLTIy
OTg3LDYgKzIyOTg3LDcgQEAKIAkJCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRM
aWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcwNTk5NzgxMDdEOTc1MjAwQTUwQTdD
IC8qIFBvbGljeUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzA1OTk3QTEwN0Q5NzUy
MDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NTcx
NzVENDE0QzAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3
NEUyMEExMEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA2NjhFMThCMEFERDk2MjQwMDQxMjhFMCAvKiBQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFCQzEyODc3MEIzM0FBNkQwMEM2OTNENSAvKiBQb3B1cE1lbnVDbGllbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjMwMjgsNiArMjMwMjksNyBAQAogCQkJCUE4NEQ4MjdDMTFEMzMzRUQw
MDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
MzE2MDNDMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFsdGltZUFuYWx5c2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzQzNjhFODBDMjI2RTMyMDA1RUZCNUYgLyogUmVjdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkQ0NUE5NTgxNzVENDE0QzAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzJFQTNCQjE1ODVDRjU1MDA0RkFBMjYgLyogUmVmQ291bnRlZFN1cHBs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk4MzFBRTRBMTU0MjI1QzkwMEZFMjY0NCAvKiBS
ZWZlcnJlclBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBQjQxODIxM0UzNTZFODAwRDhB
QUYzIC8qIFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzI5OCw2ICsyMzMwMCwxMiBAQAog
CQkJCUJDNUVCOEM0MEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNkQxNjk2NDEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTZDRTgwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZENDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluZm8uaCBp
biBIZWFkZXJzICovLAorCQkJCUZENDVBOTUxMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluc2lk
ZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTVCMTc1RDQxRUUwMEMyMUVDOCAvKiBT
aGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1MjE3NUQzRjNFMDBDMjFF
QzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQxQUYxNTAxNjU2
RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRF
MEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
QjFGMDJGMTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI0MzQyLDYgKzI0MzUwLDEzIEBACiAJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxl
cyA9ICgKKwkJCQlGRDQ1QTk1QzE3NUQ0MjBEMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1OTE3NUQ0MTcxMDBDMjFFQzggLyogUG9seWdvblNo
YXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBS
ZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1MzE3NUQzRkI4MDBD
MjFFQzggLyogU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTQxNzVEM0ZCODAw
QzIxRUM4IC8qIFNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1NTE3NUQz
RkI4MDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZE
NDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQxRTFCMUQwMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjI5QzE2RTEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJp
bGl0eUFsbEluT25lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc2Q0REMkYyMTEwM0RBNjYwMDY4
MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNDkx
NywxMyArMjQ5MzIsNiBAQAogCQkJCTk3M0RDNjNGMTQ1QTk0MDkwMDI4NDJDMiAvKiBFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQUNEQjExM0NFODc1
QzAwQkJCRTNGIC8qIEV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDhBRkRBNjBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMubW0gaW4g
U291cmNlcyAqLywKLQkJCQk2RTg3OThCQTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50
ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkVBRjM0MEYxNjEzODY5QTAwODU5NjI1IC8q
IEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4Nzk4QkMxNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2
RTg3OThCRTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uU2hhcGUuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJRkRCOEQxRTUxNkIwQ0M5NzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlGRDc0OEFCRjE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlBOUNFRjhEMTYzQjNF
QTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEwMjQ1NzUxMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVycy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNE
T3BlbkdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0REFCNUIxMTVBNjIzNTgwMDk3QzFFNCAv
KiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDNh
OTRlZjg4YjMxNzJiZWMxYTE2MjAyNDVmZTY3NWU0MzcyMTM3MTYuLjRmYjQ5ZmUwODc2Mzk3MzVi
MjAyZGRhMjZiNmRhNjY1OWY4NTI3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC02Niw3ICs2Niw3IEBACiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0j
aW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQpAQCAtMjY5OSwyNCArMjY5OSwyNCBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
U2hhcGVJbnNpZGU6CiAgICAgICAgICAgICBpZiAoIXN0eWxlLT5zaGFwZUluc2lkZSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlw
ZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6Ok91dHNpZGUpCisgICAgICAgICAgICBpZiAoc3R5
bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpPdXRzaWRlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVPdXRzaWRlU2hhcGUpOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgp
LT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6SW1hZ2UpIHsKKyAgICAgICAgICAgIGlm
IChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OkltYWdlKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgpLT5pbWFnZSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3R5bGUtPnNoYXBlSW5zaWRlKCktPmltYWdlKCktPmNzc1Zh
bHVlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNT
RVJUKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
U2hhcGUpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkg
PT0gU2hhcGVWYWx1ZTo6U2hhcGUpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yQmFzaWNT
aGFwZShzdHlsZS0+c2hhcGVJbnNpZGUoKS0+c2hhcGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRTaGFwZU91dHNpZGU6CiAgICAgICAgICAgICBpZiAoIXN0eWxlLT5zaGFwZU91
dHNpZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBl
T3V0c2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6SW1hZ2UpIHsKKyAgICAg
ICAgICAgIGlmIChzdHlsZS0+c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpJ
bWFnZSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVPdXRzaWRlKCktPmltYWdl
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+c2hhcGVPdXRzaWRlKCktPmlt
YWdlKCktPmNzc1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lv
blNoYXBlVmFsdWU6OlNoYXBlKTsKKyAgICAgICAgICAgIEFTU0VSVChzdHlsZS0+c2hhcGVPdXRz
aWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSk7CiAgICAgICAgICAgICByZXR1cm4g
dmFsdWVGb3JCYXNpY1NoYXBlKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+c2hhcGUoKSk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5oCmluZGV4IDY3MmNhNGUxOTU1MjE5NTNkOTBmYjU4NzQ2YmQ5YThhYWJlYmNkM2UuLjM3
MmMxYjNmNDY4MDgxZjU2YzdkNGVhODE0Mzc0MzczNzJiODY1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5oCkBAIC0xMjEsNyArMTIxLDcgQEAgcHVibGljOgogICAgICAg
ICAvLyBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgY291bnRlciBuYW1lcyAoYXMgb3Bwb3Nl
ZCB0byBjb3VudGVyIHZhbHVlcykKICAgICAgICAgQ1NTX0NPVU5URVJfTkFNRSA9IDExMCwKIAot
ICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIENTUyBFeGNsdXNpb25zIGRyYWZ0CisgICAg
ICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgQ1NTIFNoYXBlcyBkcmFmdAogICAgICAgICBDU1Nf
U0hBUEUgPSAxMTEsCiAKICAgICAgICAgLy8gVXNlZCBieSBib3JkZXIgaW1hZ2VzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDAwZjBiZTNh
NTdiMzkyNjhjMDk4Y2E1ZTNhZjM3YWJiYjc3ZGZkZTAuLmMwYzM3YjFiMmFmMDA4MDM1NWQ0Mjgw
NGZjNDBhN2U0ZDNmNTBkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0
eWxlQnVpbGRlci5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFw
ZVZhbHVlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CkBAIC0xOTMzLDEwICsxOTMzLDEwIEBAIHB1YmxpYzoKIH07CiAKICNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKLXRlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJG
dW5jdGlvbikoUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiksIEV4Y2x1c2lvblNoYXBl
VmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lv
blNoYXBlIHsKK3RlbXBsYXRlIDxTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5j
dGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1Jl
ZlB0cjxTaGFwZVZhbHVlPiksIFNoYXBlVmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgorY2xh
c3MgQXBwbHlQcm9wZXJ0eVNoYXBlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFs
dWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lk
IHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1
ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkgewpAQCAtMTk0NSwyMCArMTk0NSwyMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CiAgICAgICAgICAg
ICAvLyBGSVhNRSBCdWcgMTAyNTcxOiBMYXlvdXQgZm9yIHRoZSB2YWx1ZSAnb3V0c2lkZS1zaGFw
ZScgaXMgbm90IHlldCBpbXBsZW1lbnRlZAogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPdXRzaWRlU2hhcGUpCi0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIFNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAgICAgICAgICAg
ICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZh
bHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHByaW1pdGl2ZVZhbHVl
LT5nZXRTaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4g
c2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCks
IHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKICAgICAgICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAg
ICAgICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVW
YWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5
LCB2YWx1ZSkpOworICAgICAgICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBlID0gU2hhcGVW
YWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5
LCB2YWx1ZSkpOwogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
c2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgfQogCiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIg
aGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFeGNsdXNpb25TaGFwZVZhbHVlKiwg
Z2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4sIHNldHRlckZ1
bmN0aW9uLCBFeGNsdXNpb25TaGFwZVZhbHVlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFu
ZGxlcigpOworICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxTaGFwZVZhbHVlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U2hhcGVW
YWx1ZT4sIHNldHRlckZ1bmN0aW9uLCBTaGFwZVZhbHVlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3Jl
YXRlSGFuZGxlcigpOwogICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5o
ZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsK
ICAgICB9CiB9OwpAQCAtMjM0Myw4ICsyMzQzLDggQEAgRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6
RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW4sIEFwcGx5UHJvcGVy
dHlMZW5ndGg8JlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzZXRTaGFw
ZU1hcmdpbiwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVNYXJnaW4+OjpjcmVhdGVIYW5kbGVy
KCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlUGFkZGlu
ZywgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnNoYXBlUGFkZGluZywgJlJlbmRl
clN0eWxlOjpzZXRTaGFwZVBhZGRpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlUGFkZGlu
Zz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0U2hhcGVJbnNpZGUsIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZTwmUmVuZGVyU3R5
bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxTaGFwZUluc2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlLCBBcHBseVByb3BlcnR5RXhj
bHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2V0
U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU91dHNpZGU+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBl
SW5zaWRlLCBBcHBseVByb3BlcnR5U2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJl
bmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNp
ZGU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdFNoYXBlT3V0c2lkZSwgQXBwbHlQcm9wZXJ0eVNoYXBlPCZSZW5kZXJTdHlsZTo6c2hh
cGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsU2hhcGVPdXRzaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICNlbmRpZgogICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVXaGl0ZVNwYWNlLCAmUmVuZGVyU3R5bGU6OndoaXRlU3BhY2UsIEVXaGl0ZVNwYWNlLCAmUmVu
ZGVyU3R5bGU6OnNldFdoaXRlU3BhY2UsIEVXaGl0ZVNwYWNlLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxXaGl0ZVNwYWNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXaWRvd3MsIEFwcGx5UHJvcGVydHlBdXRvPHNob3J0LCAmUmVuZGVyU3R5bGU6
OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MsICZSZW5kZXJTdHlsZTo6aGFzQXV0b1dp
ZG93cywgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvV2lkb3dzPjo6Y3JlYXRlSGFuZGxlcigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5p
bWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5p
bWF0aW9uLmNwcAppbmRleCA1MjQ0MDAzY2QxYzA5Nzc5NjllYzBlZTE5ZDVkMTQ1NjUwYTFlZjA5
Li5mY2E2MjZmODBkNjZhMTJiMTI2YTRhODE2NTVmYmZmYzRmMmMyMzdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
CkBAIC0xNDQsMTAgKzE0NCwxMCBAQCBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8Q2xpcFBhdGhP
cGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgQ2xpcAogfQogCiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi1zdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hh
cGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBFeGNsdXNpb25TaGFwZVZh
bHVlKiBmcm9tLCBFeGNsdXNpb25TaGFwZVZhbHVlKiB0bywgZG91YmxlIHByb2dyZXNzKQorc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRp
b25CYXNlKiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVz
cykKIHsKICAgICAvLyBGSVhNRSBCdWcgMTAyNzIzOiBTaGFwZS1pbnNpZGUgc2hvdWxkIGJlIGFi
bGUgdG8gYW5pbWF0ZSBhIHZhbHVlIG9mICdvdXRzaWRlLXNoYXBlJyB3aGVuIHNoYXBlLW91dHNp
ZGUgaXMgc2V0IHRvIGEgQmFzaWNTaGFwZQotICAgIGlmIChmcm9tLT50eXBlKCkgIT0gRXhjbHVz
aW9uU2hhcGVWYWx1ZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBFeGNsdXNpb25TaGFwZVZhbHVl
OjpTaGFwZSkKKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlNoYXBlIHx8IHRv
LT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUpCiAgICAgICAgIHJldHVybiB0bzsKIAogICAg
IGNvbnN0IEJhc2ljU2hhcGUqIGZyb21TaGFwZSA9IGZyb20tPnNoYXBlKCk7CkBAIC0xNTYsNyAr
MTU2LDcgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGJs
ZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgRXgKICAgICBpZiAoIWZyb21TaGFwZS0+Y2Fu
QmxlbmQodG9TaGFwZSkpCiAgICAgICAgIHJldHVybiB0bzsKIAotICAgIHJldHVybiBFeGNsdXNp
b25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKHRvU2hhcGUtPmJsZW5kKGZyb21TaGFwZSwg
cHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVWYWx1ZSh0b1No
YXBlLT5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7CiB9CiAjZW5kaWYKIApAQCAtNDA1LDEw
ICs0MDUsMTAgQEAgcHVibGljOgogfTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotY2xhc3Mg
UHJvcGVydHlXcmFwcGVyRXhjbHVzaW9uU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxFeGNsdXNpb25TaGFwZVZhbHVlPiB7CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFw
ZSA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKIHB1Ymxp
YzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJFeGNsdXNpb25TaGFwZShDU1NQcm9wZXJ0eUlEIHByb3As
IEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9p
ZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4p
KQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8RXhjbHVzaW9uU2hhcGVWYWx1
ZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJv
cGVydHlJRCBwcm9wLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3Qs
IHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShQYXNzUmVmUHRyPFNoYXBlVmFsdWU+KSkKKyAg
ICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRl
ciwgc2V0dGVyKQogICAgIHsKICAgICB9CiB9OwpAQCAtMTE2NSw3ICsxMTY1LDcgQEAgdm9pZCBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6ZW5zdXJlUHJvcGVydHlNYXAoKQogICAgIGdQcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENTU1Byb3BlcnR5V2Vi
a2l0Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6c2V0Q2xp
cFBhdGgpKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckV4Y2x1c2lvblNoYXBlKENTU1Byb3BlcnR5V2Vi
a2l0U2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6
c2V0U2hhcGVJbnNpZGUpKTsKKyAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5
bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlKSk7CiAjZW5kaWYK
IAogICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlclZpc2l0
ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBNYXliZUlu
dmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGUwZWY3YTk4YmFhNjgxMDlhODg5MTk1OGFiOWM5MDE1NjNj
ODdjYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICog
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RXhjbHVzaW9uSW50ZXJ2YWwuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9yIHsKLSAgICBi
b29sIG9wZXJhdG9yKCkgKGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpMSwgY29uc3QgRXhjbHVz
aW9uSW50ZXJ2YWwmIGkyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGkxLngxIDwgaTIu
eDE7Ci0gICAgfQotfTsKLQotYm9vbCBFeGNsdXNpb25JbnRlcnZhbDo6aW50ZXJzZWN0KGNvbnN0
IEV4Y2x1c2lvbkludGVydmFsJiBpLCBFeGNsdXNpb25JbnRlcnZhbCYgcnYpIGNvbnN0Ci17Ci0g
ICAgaWYgKHgyIDwgaS54MSB8fCB4MSA+IGkueDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBydi54MSA9IHN0ZDo6bWF4KHgxLCBpLngxKTsKLSAgICBydi54MiA9IHN0ZDo6bWluKHgyLCBp
LngyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxz
KFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYpCi17Ci0gICAgc3RkOjpzb3J0KHYuYmVnaW4o
KSwgdi5lbmQoKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7Ci19Ci0KLXZvaWQgbWVyZ2VFeGNs
dXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjEsIGNvbnN0
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiBydikKLXsKLSAgICBpZiAoIXYxLnNpemUoKSkKLSAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjIu
YmVnaW4oKSwgdjIuZW5kKCkpOwotICAgIGVsc2UgaWYgKCF2Mi5zaXplKCkpCi0gICAgICAgIHJ2
LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB2KHYxLnNpemUoKSArIHYyLnNpemUoKSk7Ci0gICAg
ICAgIEV4Y2x1c2lvbkludGVydmFsKiBpbnRlcnZhbCA9IDA7Ci0KLSAgICAgICAgc3RkOjptZXJn
ZSh2MS5iZWdpbigpLCB2MS5lbmQoKSwgdjIuYmVnaW4oKSwgdjIuZW5kKCksIHYuYmVnaW4oKSwg
SW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWludGVydmFsKQotICAgICAgICAg
ICAgICAgIGludGVydmFsID0gJnZbaV07Ci0gICAgICAgICAgICBlbHNlIGlmICh2W2ldLngxID49
IGludGVydmFsLT54MSAmJiB2W2ldLngxIDw9IGludGVydmFsLT54MikgLy8gRklYTUU6IDFzdCA8
PSB0ZXN0IG5vdCBuZWVkZWQ/Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwtPngyID0gc3RkOjpt
YXgoaW50ZXJ2YWwtPngyLCB2W2ldLngyKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOwotICAgICAgICAgICAgICAgIGludGVydmFsID0g
JnZbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW50ZXJ2YWwp
Ci0gICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgaW50
ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4m
IHYxLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYgcnYpCi17Ci0gICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKLSAgICBz
aXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOwotCi0gICAgaWYgKCF2MVNpemUgfHwgIXYyU2l6ZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjbHVzaW9uSW50ZXJ2YWwgaW50ZXJ2YWw7Ci0gICAg
Ym9vbCBvdmVybGFwID0gZmFsc2U7Ci0gICAgc2l6ZV90IGkxID0gMDsKLSAgICBzaXplX3QgaTIg
PSAwOwotCi0gICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGkyIDwgdjJTaXplKSB7Ci0gICAgICAg
IEV4Y2x1c2lvbkludGVydmFsIHYxMjsKLSAgICAgICAgaWYgKHYxW2kxXS5pbnRlcnNlY3QodjJb
aTJdLCB2MTIpKSB7Ci0gICAgICAgICAgICBpZiAoIW92ZXJsYXAgfHwgIXYxMi5pbnRlcnNlY3Qo
aW50ZXJ2YWwsIGludGVydmFsKSkgewotICAgICAgICAgICAgICAgIGlmIChvdmVybGFwKQotICAg
ICAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOwotICAgICAgICAgICAgICAgIGlu
dGVydmFsID0gdjEyOwotICAgICAgICAgICAgICAgIG92ZXJsYXAgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHYxW2kxXS54MiA8IHYyW2kyXS54MikKLSAgICAgICAgICAg
ICAgICBpMSsrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGkyKys7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAob3ZlcmxhcCkKLSAgICAgICAgICAgICAgICBy
di5hcHBlbmQoaW50ZXJ2YWwpOwotICAgICAgICAgICAgb3ZlcmxhcCA9IGZhbHNlOwotICAgICAg
ICAgICAgaWYgKHYxW2kxXS54MSA8IHYyW2kyXS54MSkKLSAgICAgICAgICAgICAgICBpMSsrOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGkyKys7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAob3ZlcmxhcCkKLSAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKLX0KLQot
dm9pZCBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjIsIFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4mIHJ2KQotewotICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7
Ci0gICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKLQotICAgIGlmICghdjFTaXplKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXYyU2l6ZSkKLSAgICAgICAgcnYuYXBwZW5kUmFuZ2Uo
djEuYmVnaW4oKSwgdjEuZW5kKCkpOwotICAgIGVsc2UgewotICAgICAgICBzaXplX3QgaTEgPSAw
LCBpMiA9IDA7Ci0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsK
LQotICAgICAgICB3aGlsZSAoaTEgPCBydi5zaXplKCkgJiYgaTIgPCB2MlNpemUpIHsKLSAgICAg
ICAgICAgIEV4Y2x1c2lvbkludGVydmFsJiBpbnRlcnZhbDEgPSBydltpMV07Ci0gICAgICAgICAg
ICBjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYgaW50ZXJ2YWwyID0gdjJbaTJdOwotCi0gICAgICAg
ICAgICBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSAmJiBpbnRlcnZhbDIueDIgPj0g
aW50ZXJ2YWwxLngyKQotICAgICAgICAgICAgICAgIHJ2LnJlbW92ZShpMSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDEpCi0gICAgICAgICAgICAgICAg
aTIgKz0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGludGVydmFsMS54
MikKLSAgICAgICAgICAgICAgICBpMSArPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2
YWwyLngxID4gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA8IGludGVydmFsMS54Mikgewot
ICAgICAgICAgICAgICAgIHJ2Lmluc2VydChpMSwgRXhjbHVzaW9uSW50ZXJ2YWwoaW50ZXJ2YWwx
LngxLCBpbnRlcnZhbDIueDEpKTsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDEgPSBpbnRl
cnZhbDIueDI7Ci0gICAgICAgICAgICAgICAgaTIgKz0gMTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSkgewotICAgICAgICAgICAgICAgIGludGVy
dmFsMS54MSA9IGludGVydmFsMi54MjsKLSAgICAgICAgICAgICAgICBpMiArPSAxOwotICAgICAg
ICAgICAgfSBlbHNlICB7IC8vIChpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwxLngyKQotICAgICAg
ICAgICAgICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54MTsKLSAgICAgICAgICAgICAgICBp
MSArPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZh
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDMxZmViMTgxMTNkZThjMWU0MzQx
ZTAxMDM3MDhiNzc0Y2EzNTFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
ZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICog
ICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uSW50
ZXJ2YWxfaAotI2RlZmluZSBFeGNsdXNpb25JbnRlcnZhbF9oCi0KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEV4Y2x1c2lvbkludGVydmFs
IHsKLXB1YmxpYzoKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9hdCB4MjsKLQotICAgIEV4Y2x1c2lv
bkludGVydmFsKGZsb2F0IHgxID0gMCwgZmxvYXQgeDIgPSAwKQotICAgICAgICA6IHgxKHgxKQot
ICAgICAgICAsIHgyKHgyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGludGVyc2VjdChjb25z
dCBFeGNsdXNpb25JbnRlcnZhbCYsIEV4Y2x1c2lvbkludGVydmFsJikgY29uc3Q7Ci19OwotCi12
b2lkIHNvcnRFeGNsdXNpb25JbnRlcnZhbHMoVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpOwot
dm9pZCBtZXJnZUV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+JiwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4mKTsKLXZvaWQgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jiwg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpOwotdm9pZCBzdWJ0cmFjdEV4Y2x1c2lvbkludGVy
dmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiYsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uSW50ZXJ2YWxfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxOWY5NzhmMzBiNThlMjE0Yjg0YTlkM2QxZjhkNDA4N2FlMGIyYTI0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUx
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0g
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lv
blBvbHlnb24uaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7Ci0gICAgTm9ybWFsLAotICAg
IFZlcnRleE1pblksCi0gICAgVmVydGV4TWF4WSwKLSAgICBWZXJ0ZXhZQm90aAotfTsKLQotc3Ry
dWN0IEVkZ2VJbnRlcnNlY3Rpb24gewotICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2U7
Ci0gICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICBFZGdlSW50ZXJzZWN0aW9uVHlwZSB0eXBlOwot
fTsKLQotc3RhdGljIGlubGluZSBmbG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0
ZXgxLCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
LXsKLSAgICByZXR1cm4gKChwb2ludC54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAodmVydGV4Mi55KCkg
LSB2ZXJ0ZXgxLnkoKSkpIC0gKCh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEueCgpKSAqIChwb2ludC55
KCkgLSB2ZXJ0ZXgxLnkoKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNSZWZsZXhWZXJ0
ZXgoY29uc3QgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4
LCBjb25zdCBGbG9hdFBvaW50JiBuZXh0VmVydGV4KQotewotICAgIHJldHVybiBsZWZ0U2lkZShw
cmV2VmVydGV4LCBuZXh0VmVydGV4LCB2ZXJ0ZXgpIDwgMDsKLX0KLQotc3RhdGljIGJvb2wgY29t
cHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZVBvaW50ZXIsIGZs
b2F0IHksIEVkZ2VJbnRlcnNlY3Rpb24mIHJlc3VsdCkKLXsKLSAgICBjb25zdCBGbG9hdFBvbHln
b25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOwotCi0gICAgaWYgKGVkZ2UubWluWSgpID4geSB8
fCBlZGdlLm1heFkoKSA8IHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKLSAgICBjb25zdCBGbG9hdFBvaW50
JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7Ci0gICAgZmxvYXQgZHkgPSB2ZXJ0ZXgyLnkoKSAt
IHZlcnRleDEueSgpOwotCi0gICAgZmxvYXQgaW50ZXJzZWN0aW9uWDsKLSAgICBFZGdlSW50ZXJz
ZWN0aW9uVHlwZSBpbnRlcnNlY3Rpb25UeXBlOwotCi0gICAgaWYgKCFkeSkgewotICAgICAgICBp
bnRlcnNlY3Rpb25UeXBlID0gVmVydGV4WUJvdGg7Ci0gICAgICAgIGludGVyc2VjdGlvblggPSBl
ZGdlLm1pblgoKTsKLSAgICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5taW5ZKCkpIHsKLSAgICAgICAg
aW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1pblk7Ci0gICAgICAgIGludGVyc2VjdGlvblggPSAo
dmVydGV4MS55KCkgPCB2ZXJ0ZXgyLnkoKSkgPyB2ZXJ0ZXgxLngoKSA6IHZlcnRleDIueCgpOwot
ICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1heFkoKSkgewotICAgICAgICBpbnRlcnNlY3Rpb25U
eXBlID0gVmVydGV4TWF4WTsKLSAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA+
IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4Mi54KCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IE5vcm1hbDsKLSAgICAgICAgaW50ZXJzZWN0aW9u
WCA9ICgoeSAtIHZlcnRleDEueSgpKSAqICh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEueCgpKSAvIGR5
KSArIHZlcnRleDEueCgpOwotICAgIH0KLQotICAgIHJlc3VsdC5lZGdlID0gZWRnZVBvaW50ZXI7
Ci0gICAgcmVzdWx0LnR5cGUgPSBpbnRlcnNlY3Rpb25UeXBlOwotICAgIHJlc3VsdC5wb2ludC5z
ZXQoaW50ZXJzZWN0aW9uWCwgeSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlu
bGluZSBGbG9hdFNpemUgaW53YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBl
ZGdlKQotewotICAgIEZsb2F0U2l6ZSBlZGdlRGVsdGEgPSBlZGdlLnZlcnRleDIoKSAtIGVkZ2Uu
dmVydGV4MSgpOwotICAgIGlmICghZWRnZURlbHRhLndpZHRoKCkpCi0gICAgICAgIHJldHVybiBG
bG9hdFNpemUoKGVkZ2VEZWx0YS5oZWlnaHQoKSA+IDAgPyAtMSA6IDEpLCAwKTsKLSAgICBpZiAo
IWVkZ2VEZWx0YS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgwLCAoZWRnZURl
bHRhLndpZHRoKCkgPiAwID8gMSA6IC0xKSk7Ci0gICAgZmxvYXQgZWRnZUxlbmd0aCA9IGVkZ2VE
ZWx0YS5kaWFnb25hbExlbmd0aCgpOwotICAgIHJldHVybiBGbG9hdFNpemUoLWVkZ2VEZWx0YS5o
ZWlnaHQoKSAvIGVkZ2VMZW5ndGgsIGVkZ2VEZWx0YS53aWR0aCgpIC8gZWRnZUxlbmd0aCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIG91dHdhcmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0
UG9seWdvbkVkZ2UmIGVkZ2UpCi17Ci0gICAgcmV0dXJuIC1pbndhcmRFZGdlTm9ybWFsKGVkZ2Up
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kQXJjKFZlY3RvcjxGbG9hdFBvaW50PiYg
dmVydGljZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGFyY0NlbnRlciwgZmxvYXQgYXJjUmFkaXVzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydEFyY1ZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYgZW5kQXJj
VmVydGV4LCBib29sIHBhZGRpbmcpCi17Ci0gICAgZmxvYXQgc3RhcnRBbmdsZSA9IGF0YW4yKHN0
YXJ0QXJjVmVydGV4LnkoKSAtIGFyY0NlbnRlci55KCksIHN0YXJ0QXJjVmVydGV4LngoKSAtIGFy
Y0NlbnRlci54KCkpOwotICAgIGZsb2F0IGVuZEFuZ2xlID0gYXRhbjIoZW5kQXJjVmVydGV4Lnko
KSAtIGFyY0NlbnRlci55KCksIGVuZEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKLSAg
ICBjb25zdCBmbG9hdCB0d29QSSA9IHBpRmxvYXQgKiAyOwotICAgIGlmIChzdGFydEFuZ2xlIDwg
MCkKLSAgICAgICAgc3RhcnRBbmdsZSArPSB0d29QSTsKLSAgICBpZiAoZW5kQW5nbGUgPCAwKQot
ICAgICAgICBlbmRBbmdsZSArPSB0d29QSTsKLSAgICBmbG9hdCBhbmdsZSA9IChzdGFydEFuZ2xl
ID4gZW5kQW5nbGUpID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgOiAoc3RhcnRBbmdsZSArIHR3
b1BJIC0gZW5kQW5nbGUpOwotICAgIGNvbnN0IGZsb2F0IGFyY1NlZ21lbnRDb3VudCA9IDY7IC8v
IEFuIGV2ZW4gbnVtYmVyIHNvIHRoYXQgb25lIGFyYyB2ZXJ0ZXggd2lsbCBiZSBlYWN0bHkgYXJj
UmFkaXVzIGZyb20gYXJjQ2VudGVyLgotICAgIGZsb2F0IGFyY1NlZ21lbnRBbmdsZSA9ICAoKHBh
ZGRpbmcpID8gLWFuZ2xlIDogdHdvUEkgLSBhbmdsZSkgLyBhcmNTZWdtZW50Q291bnQ7Ci0KLSAg
ICB2ZXJ0aWNlcy5hcHBlbmQoc3RhcnRBcmNWZXJ0ZXgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBhcmNTZWdtZW50Q291bnQ7ICsraSkgewotICAgICAgICBmbG9hdCBhbmdsZSA9IHN0
YXJ0QW5nbGUgKyBhcmNTZWdtZW50QW5nbGUgKiBpOwotICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQo
YXJjQ2VudGVyICsgRmxvYXRQb2ludChjb3MoYW5nbGUpICogYXJjUmFkaXVzLCBzaW4oYW5nbGUp
ICogYXJjUmFkaXVzKSk7Ci0gICAgfQotICAgIHZlcnRpY2VzLmFwcGVuZChlbmRBcmNWZXJ0ZXgp
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZChW
ZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2ZXJ0aWNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdmVydGljZXNbaV0uc2V0KExheW91
dFVuaXQodmVydGljZXNbaV0ueCgpKS50b0Zsb2F0KCksIExheW91dFVuaXQodmVydGljZXNbaV0u
eSgpKS50b0Zsb2F0KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFBhc3NPd25QdHI8RmxvYXRQb2x5
Z29uPiBjb21wdXRlU2hhcGVQYWRkaW5nQm91bmRzKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdv
biwgZmxvYXQgcGFkZGluZywgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgT3duUHRyPFZlY3Rv
cjxGbG9hdFBvaW50PiA+IHBhZGRlZFZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9h
dFBvaW50PigpKTsKLSAgICBGbG9hdFBvaW50IGludGVyc2VjdGlvbjsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlv
dXNFZGdlKCk7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNF
ZGdlLCBpbndhcmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIHBhZGRpbmcpOwotICAgICAgICBPZmZz
ZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShwcmV2RWRnZSwgaW53YXJkRWRnZU5vcm1hbChw
cmV2RWRnZSkgKiBwYWRkaW5nKTsKLQotICAgICAgICBpZiAocHJldk9mZnNldEVkZ2UuaW50ZXJz
ZWN0aW9uKHRoaXNPZmZzZXRFZGdlLCBpbnRlcnNlY3Rpb24pKQotICAgICAgICAgICAgcGFkZGVk
VmVydGljZXMtPmFwcGVuZChpbnRlcnNlY3Rpb24pOwotICAgICAgICBlbHNlIGlmIChpc1JlZmxl
eFZlcnRleChwcmV2RWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2Uu
dmVydGV4MigpKSkKLSAgICAgICAgICAgIGFwcGVuZEFyYygqcGFkZGVkVmVydGljZXMsIHRoaXNF
ZGdlLnZlcnRleDEoKSwgcGFkZGluZywgcHJldk9mZnNldEVkZ2UudmVydGV4MigpLCB0aGlzT2Zm
c2V0RWRnZS52ZXJ0ZXgxKCksIHRydWUpOwotICAgIH0KLQotICAgIHNuYXBWZXJ0aWNlc1RvTGF5
b3V0VW5pdEdyaWQoKnBhZGRlZFZlcnRpY2VzKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZs
b2F0UG9seWdvbihwYWRkZWRWZXJ0aWNlcy5yZWxlYXNlKCksIGZpbGxSdWxlKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgUGFzc093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1dGVTaGFwZU1hcmdpbkJv
dW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1hcmdpbiwgV2luZFJ1bGUg
ZmlsbFJ1bGUpCi17Ci0gICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IG1hcmdpblZlcnRp
Y2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50PigpKTsKLSAgICBGbG9hdFBvaW50
IGludGVyc2VjdGlvbjsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51
bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRo
aXNFZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UmIHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlvdXNFZGdlKCk7Ci0gICAgICAgIE9mZnNldFBv
bHlnb25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNFZGdlLCBvdXR3YXJkRWRnZU5vcm1hbCh0aGlz
RWRnZSkgKiBtYXJnaW4pOwotICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRn
ZShwcmV2RWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogbWFyZ2luKTsKLQotICAg
ICAgICBpZiAocHJldk9mZnNldEVkZ2UuaW50ZXJzZWN0aW9uKHRoaXNPZmZzZXRFZGdlLCBpbnRl
cnNlY3Rpb24pKQotICAgICAgICAgICAgbWFyZ2luVmVydGljZXMtPmFwcGVuZChpbnRlcnNlY3Rp
b24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRBcmMoKm1hcmdpblZlcnRpY2Vz
LCB0aGlzRWRnZS52ZXJ0ZXgxKCksIG1hcmdpbiwgcHJldk9mZnNldEVkZ2UudmVydGV4MigpLCB0
aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgxKCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBzbmFwVmVydGlj
ZXNUb0xheW91dFVuaXRHcmlkKCptYXJnaW5WZXJ0aWNlcyk7Ci0gICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBGbG9hdFBvbHlnb24obWFyZ2luVmVydGljZXMucmVsZWFzZSgpLCBmaWxsUnVsZSkpOwot
fQotCi1jb25zdCBGbG9hdFBvbHlnb24mIEV4Y2x1c2lvblBvbHlnb246OnNoYXBlUGFkZGluZ0Jv
dW5kcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHNoYXBlUGFkZGluZygpID49IDApOwotICAgIGlm
ICghc2hhcGVQYWRkaW5nKCkpCi0gICAgICAgIHJldHVybiBtX3BvbHlnb247Ci0KLSAgICBpZiAo
IW1fcGFkZGluZ0JvdW5kcykKLSAgICAgICAgbV9wYWRkaW5nQm91bmRzID0gY29tcHV0ZVNoYXBl
UGFkZGluZ0JvdW5kcyhtX3BvbHlnb24sIHNoYXBlUGFkZGluZygpLCBtX3BvbHlnb24uZmlsbFJ1
bGUoKSk7Ci0KLSAgICByZXR1cm4gKm1fcGFkZGluZ0JvdW5kczsKLX0KLQotY29uc3QgRmxvYXRQ
b2x5Z29uJiBFeGNsdXNpb25Qb2x5Z29uOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKHNoYXBlTWFyZ2luKCkgPj0gMCk7Ci0gICAgaWYgKCFzaGFwZU1hcmdpbigpKQot
ICAgICAgICByZXR1cm4gbV9wb2x5Z29uOwotCi0gICAgaWYgKCFtX21hcmdpbkJvdW5kcykKLSAg
ICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMobV9wb2x5Z29u
LCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7Ci0KLSAgICByZXR1cm4gKm1f
bWFyZ2luQm91bmRzOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZ2V0VmVydGV4SW50ZXJzZWN0
aW9uVmVydGljZXMoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uLCBGbG9hdFBv
aW50JiBwcmV2VmVydGV4LCBGbG9hdFBvaW50JiB0aGlzVmVydGV4LCBGbG9hdFBvaW50JiBuZXh0
VmVydGV4KQotewotICAgIGlmIChpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhNaW5ZICYmIGlu
dGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1heFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEFTU0VSVChpbnRlcnNlY3Rpb24uZWRnZSAmJiBpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdv
bigpKTsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSAqKGludGVyc2VjdGlvbi5l
ZGdlLT5wb2x5Z29uKCkpOwotICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0g
KihpbnRlcnNlY3Rpb24uZWRnZSk7Ci0KLSAgICBpZiAoKGludGVyc2VjdGlvbi50eXBlID09IFZl
cnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPCB0aGlzRWRnZS52ZXJ0ZXgyKCku
eSgpKSkKLSAgICAgICAgfHwgKGludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1heFkgJiYgKHRo
aXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpKSkpIHsKLSAgICAg
ICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UucHJldmlvdXNFZGdlKCku
dmVydGV4SW5kZXgxKCkpOwotICAgICAgICB0aGlzVmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0
aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7Ci0gICAgICAgIG5leHRWZXJ0ZXggPSBwb2x5Z29uLnZl
cnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBw
cmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7Ci0g
ICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4
MigpKTsKLSAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UubmV4
dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBhcHBlbmRJbnRlcnZhbFgoZmxvYXQgeCwgYm9vbCBpbnNpZGUs
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKLXsKLSAgICBpZiAoIWluc2lkZSkK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4KSk7Ci0gICAgZWxzZQot
ICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUoKSAtIDFdLngyID0geDsKLQotICAgIHJldHVybiAh
aW5zaWRlOwotfQotCi1zdGF0aWMgYm9vbCBjb21wYXJlRWRnZUludGVyc2VjdGlvblgoY29uc3Qg
RWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMSwgY29uc3QgRWRnZUludGVyc2VjdGlvbiYg
aW50ZXJzZWN0aW9uMikKLXsKLSAgICBmbG9hdCB4MSA9IGludGVyc2VjdGlvbjEucG9pbnQueCgp
OwotICAgIGZsb2F0IHgyID0gaW50ZXJzZWN0aW9uMi5wb2ludC54KCk7Ci0gICAgcmV0dXJuICh4
MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5cGUgPCBpbnRlcnNlY3Rpb24yLnR5cGUgOiB4MSA8
IHgyOwotfQotCi1zdGF0aWMgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoY29uc3QgRmxvYXRQ
b2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiYgcmVzdWx0KQotewotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4g
ZWRnZXM7Ci0gICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRnZXMpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0
aW9uczsKLSAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGNvbXB1dGVY
SW50ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2VjdGlvbi50
eXBlICE9IFZlcnRleFlCb3RoKQotICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBlbmQoaW50
ZXJzZWN0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdpbigpLCBp
bnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOwot
Ci0gICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGludCB3aW5kQ291bnQgPSAwOwotICAgIGJv
b2wgaW5zaWRlID0gZmFsc2U7Ci0KLSAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNp
emUoKSkgewotICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJzZWN0aW9u
ID0gaW50ZXJzZWN0aW9uc1tpbmRleF07Ci0gICAgICAgIGlmIChpbmRleCArIDEgPCBpbnRlcnNl
Y3Rpb25zLnNpemUoKSkgewotICAgICAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgbmV4
dEludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXggKyAxXTsKLSAgICAgICAgICAgIGlm
ICgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4dEludGVyc2VjdGlvbi5wb2ludC54
KCkpICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSB8fCB0aGlzSW50ZXJz
ZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpc0lu
dGVyc2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJlIFZl
cnRleE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0ZXhNaW5ZLgotICAgICAgICAg
ICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBl
cyBhcmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRleE1heFksVmVydGV4TWluWSB3aXRo
IG9uZSBpbnRlcnNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhp
c0ludGVyc2VjdGlvbi5lZGdlOwotICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9ICF3aW5k
Q291bnQ7Ci0KLSAgICAgICAgaWYgKHBvbHlnb24uZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQp
IHsKLSAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0VkZ2UudmVydGV4MigpLnkoKSA+IHRo
aXNFZGdlLnZlcnRleDEoKS55KCkpID8gMSA6IC0xOwotICAgICAgICAgICAgZXZlbk9kZENyb3Nz
aW5nID0gZXZlbk9kZENyb3NzaW5nIHx8ICF3aW5kQ291bnQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoZXZlbk9kZENyb3NzaW5nKSB7Ci0gICAgICAgICAgICBib29sIGVkZ2VDcm9zc2luZyA9
IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWw7Ci0gICAgICAgICAgICBpZiAoIWVkZ2VD
cm9zc2luZykgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleDsKLSAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50IHRoaXNWZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBuZXh0VmVydGV4OwotCi0gICAgICAgICAgICAgICAgaWYgKGdldFZlcnRleEludGVyc2Vj
dGlvblZlcnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZWZXJ0ZXgsIHRoaXNWZXJ0ZXgsIG5l
eHRWZXJ0ZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4LnkoKSA9PSB5
KQotICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWluWSkgPyBwcmV2
VmVydGV4LnkoKSA+IHkgOiBwcmV2VmVydGV4LnkoKSA8IHk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHByZXZWZXJ0ZXgueSgpID09IHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBl
ZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IG5leHRWZXJ0ZXgueSgpID4geSA6IG5leHRWZXJ0ZXgu
eSgpIDwgeTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgZWRnZUNyb3NzaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoZWRnZUNyb3NzaW5nKQotICAgICAgICAgICAgICAgIGluc2lkZSA9
IGFwcGVuZEludGVydmFsWCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSwgaW5zaWRlLCByZXN1
bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgKytpbmRleDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29u
JiBwb2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4m
IHJlc3VsdCkKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwot
ICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHkxLCB5MiwgZWRnZXMpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSAqZWRnZSA9IGVkZ2VzW2ldOwotICAgICAgICBmbG9hdCB4MTsKLSAg
ICAgICAgZmxvYXQgeDI7Ci0KLSAgICAgICAgaWYgKGVkZ2UtPm1pblkoKSA8IHkxKSB7Ci0gICAg
ICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MSwgaW50ZXJzZWN0aW9uKTsKLSAg
ICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpIDwgZWRnZS0+dmVydGV4MigpLnko
KSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsKLQotICAgICAg
ICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKLSAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0
aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOwotICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rp
b24ucG9pbnQueCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHgyID0gKGVkZ2UtPnZl
cnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkg
OiBlZGdlLT52ZXJ0ZXgyKCkueCgpOwotCi0gICAgICAgIGlmICh4MSA+IHgyKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKHgxLCB4Mik7Ci0KLSAgICAgICAgaWYgKHgyID4geDEpCi0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgxLCB4MikpOwotICAgIH0KLQotICAg
IHNvcnRFeGNsdXNpb25JbnRlcnZhbHMocmVzdWx0KTsKLX0KLQotdm9pZCBFeGNsdXNpb25Qb2x5
Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25z
dCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZU1hcmdpbkJvdW5kcygpOwotICAgIGlmIChw
b2x5Z29uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dp
Y2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAg
ICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOwot
ICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxz
KTsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRl
cnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBtZXJnZWRJbnRlcnZhbHM7
Ci0gICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMs
IG1lcmdlZEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJ
bnRlcnZhbHM7Ci0gICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29u
LCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFs
PiBleGNsdWRlZEludGVydmFsczsKLSAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyhtZXJnZWRJ
bnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkgewotICAg
ICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGV4Y2x1ZGVkSW50ZXJ2YWxzW2ldOwot
ICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54
MikpOwotICAgIH0KLX0KLQotdm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVy
dmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHln
b24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAocG9seWdvbi5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBmbG9hdCB5
MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2Vj
dGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRl
cnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKLQotICAgIFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4gY29tbW9uSW50ZXJ2YWxzOwotICAgIGludGVyc2VjdEV4Y2x1
c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgY29tbW9uSW50ZXJ2YWxz
KTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZWRnZUludGVydmFsczsKLSAgICBj
b21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24sIHkxLCB5MiwgZWRnZUlu
dGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGluY2x1ZGVkSW50ZXJ2
YWxzOwotICAgIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywgZWRn
ZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluY2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEV4Y2x1c2lv
bkludGVydmFsIGludGVydmFsID0gaW5jbHVkZWRJbnRlcnZhbHNbaV07Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVydmFsLngyKSk7Ci0gICAgfQot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0IEZsb2F0
UG9seWdvbiYgcG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCB1bnNpZ25lZCBvZmZzZXRF
ZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKQotewotICAgIFZlY3Rvcjxjb25z
dCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7Ci0gICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5n
RWRnZXMocmVjdC55KCksIHJlY3QubWF4WSgpLCBlZGdlcykpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSBlZGdlc1tpXTsKLSAgICAgICAg
aWYgKGVkZ2UtPmVkZ2VJbmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDEgJiYgZWRnZS0+ZWRnZUlu
ZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MiAmJiBlZGdlLT5vdmVybGFwc1JlY3QocmVjdCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0KGNvbnN0IEZsb2F0UmVjdCYgcjEs
IGNvbnN0IEZsb2F0UmVjdCYgcjIpCi17Ci0gICAgaWYgKHIxLnkoKSA8IHIyLnkoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHIxLnkoKSA9PSByMi55KCkpCi0gICAgICAgIHJldHVy
biByMS54KCkgPCByMi54KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV4Y2x1c2lv
blBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5M
b2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNp
emUsIExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbFRv
cCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9
IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxX
aWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsKLQotICAgIGNvbnN0IEZsb2F0
UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwotICAgIGNvbnN0IEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHBvbHlnb24uYm91bmRpbmdCb3goKTsKLSAgICBpZiAobWluSW50
ZXJ2YWxXaWR0aCA+IGJvdW5kaW5nQm94LndpZHRoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZGluZ0JveC55KCksIG1pbkludGVydmFs
VG9wKTsKLSAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0OwotCi0gICAg
aWYgKG1heFkgPiBib3VuZGluZ0JveC5tYXhZKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7Ci0gICAgcG9seWdvbi5v
dmVybGFwcGluZ0VkZ2VzKG1pbkludGVydmFsVG9wLCBib3VuZGluZ0JveC5tYXhZKCksIGVkZ2Vz
KTsKLQotICAgIGZsb2F0IGR4ID0gbWluSW50ZXJ2YWxXaWR0aCAvIDI7Ci0gICAgZmxvYXQgZHkg
PSBtaW5JbnRlcnZhbEhlaWdodCAvIDI7Ci0gICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBv
ZmZzZXRFZGdlczsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKihlZGdlc1tp
XSk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDAgPSBlZGdlLnByZXZpb3VzRWRn
ZSgpLnZlcnRleDEoKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2Uu
dmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0
ZXgyKCk7Ci0gICAgICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZUJ1ZmZl
cjsKLQotICAgICAgICBpZiAodmVydGV4Mi55KCkgPiB2ZXJ0ZXgxLnkoKSA/IHZlcnRleDIueCgp
ID49IHZlcnRleDEueCgpIDogdmVydGV4MS54KCkgPj0gdmVydGV4Mi54KCkpIHsKLSAgICAgICAg
ICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0
U2l6ZShkeCwgLWR5KSkpOwotICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zm
c2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgZHkpKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRn
ZShlZGdlLCBGbG9hdFNpemUoZHgsIGR5KSkpOwotICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZl
ci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgLWR5KSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzUmVmbGV4VmVydGV4KHZlcnRleDAsIHZlcnRleDEs
IHZlcnRleDIpKSB7Ci0gICAgICAgICAgICBpZiAodmVydGV4Mi54KCkgPD0gdmVydGV4MS54KCkg
JiYgdmVydGV4MC54KCkgPD0gdmVydGV4MS54KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0RWRn
ZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKGR4LCAt
ZHkpLCBGbG9hdFNpemUoZHgsIGR5KSkpOwotICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi54
KCkgPj0gdmVydGV4MS54KCkgJiYgdmVydGV4MC54KCkgPj0gdmVydGV4MS54KCkpCi0gICAgICAg
ICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4
MSwgRmxvYXRTaXplKC1keCwgLWR5KSwgRmxvYXRTaXplKC1keCwgZHkpKSk7Ci0gICAgICAgICAg
ICBpZiAodmVydGV4Mi55KCkgPD0gdmVydGV4MS55KCkgJiYgdmVydGV4MC55KCkgPD0gdmVydGV4
MS55KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9s
eWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgZHkpLCBGbG9hdFNpemUoZHgsIGR5KSkp
OwotICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi55KCkgPj0gdmVydGV4MS55KCkgJiYgdmVy
dGV4MC55KCkgPj0gdmVydGV4MS55KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZl
ci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgLWR5KSwg
RmxvYXRTaXplKGR4LCAtZHkpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgb2Zmc2V0RWRnZUJ1ZmZlci5zaXplKCk7ICsraikKLSAgICAgICAgICAgIGlm
IChvZmZzZXRFZGdlQnVmZmVyW2pdLm1heFkoKSA+PSBtaW5ZKQotICAgICAgICAgICAgICAgIG9m
ZnNldEVkZ2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pdKTsKLSAgICB9Ci0KLSAgICBvZmZz
ZXRFZGdlcy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UocG9seWdvbiwgbWluSW50ZXJ2YWxUb3As
IEZsb2F0U2l6ZSgwLCBkeSkpKTsKLQotICAgIEZsb2F0UG9pbnQgb2Zmc2V0RWRnZXNJbnRlcnNl
Y3Rpb247Ci0gICAgRmxvYXRSZWN0IGZpcnN0Rml0UmVjdDsKLSAgICBib29sIGZpcnN0Rml0Rm91
bmQgPSBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvZmZzZXRFZGdlcy5z
aXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBv
ZmZzZXRFZGdlcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgaWYgKG9mZnNldEVkZ2VzW2ld
LmludGVyc2VjdGlvbihvZmZzZXRFZGdlc1tqXSwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pKSB7
Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uKG9m
ZnNldEVkZ2VzSW50ZXJzZWN0aW9uLngoKSAtIGR4LCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbi55
KCkgLSBkeSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZpcnN0Rml0UmVj
dChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplKTsKLSAg
ICAgICAgICAgICAgICBpZiAoKG9mZnNldEVkZ2VzW2ldLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdv
bkVkZ2U6OkxpbmVUb3AKLSAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0RWRnZXNbal0uYmFz
aXMoKSA9PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGluZVRvcAotICAgICAgICAgICAgICAgICAgICB8
fCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLnkoKSA+PSBtaW5JbnRlcnZhbFRvcCkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgKCFmaXJzdEZpdEZvdW5kIHx8IGFib3ZlT3JUb1RoZUxlZnQocG90
ZW50aWFsRmlyc3RGaXRSZWN0LCBmaXJzdEZpdFJlY3QpKQotICAgICAgICAgICAgICAgICAgICAm
JiBwb2x5Z29uLmNvbnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKQotICAgICAgICAgICAg
ICAgICAgICAmJiBmaXJzdEZpdFJlY3RJblBvbHlnb24ocG9seWdvbiwgcG90ZW50aWFsRmlyc3RG
aXRSZWN0LCBvZmZzZXRFZGdlc1tpXS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0uZWRnZUlu
ZGV4KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0Rm91bmQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBmaXJzdEZpdFJlY3QgPSBwb3RlbnRpYWxGaXJzdEZpdFJlY3Q7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGZpcnN0Rml0Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQoZmly
c3RGaXRSZWN0LnkoKSk7Ci0gICAgcmV0dXJuIGZpcnN0Rml0Rm91bmQ7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25Qb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdv
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODg1NTNhYjIxZDA2NDQxYmViYTMw
MTlhYzBiOWE1Mjg2YTVmZWUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
ZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICog
ICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uUG9s
eWdvbl9oCi0jZGVmaW5lIEV4Y2x1c2lvblBvbHlnb25faAotCi0jaW5jbHVkZSAiRXhjbHVzaW9u
SW50ZXJ2YWwuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotI2luY2x1ZGUgIkZsb2F0
UG9seWdvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE9mZnNldFBvbHlnb25F
ZGdlIDogcHVibGljIFZlcnRleFBhaXIgewotcHVibGljOgotICAgIGVudW0gQmFzaXMgewotICAg
ICAgICBFZGdlLAotICAgICAgICBWZXJ0ZXgsCi0gICAgICAgIExpbmVUb3AKLSAgICB9OwotCi0g
ICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSwgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIDogbV92ZXJ0ZXgxKGVkZ2UudmVydGV4MSgpICsg
b2Zmc2V0KQotICAgICAgICAsIG1fdmVydGV4MihlZGdlLnZlcnRleDIoKSArIG9mZnNldCkKLSAg
ICAgICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRleCgpKQotICAgICAgICAsIG1fYmFzaXMo
RWRnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQ
b2ludCYgcmVmbGV4VmVydGV4LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldDEsIGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0MikKLSAgICAgICAgOiBtX3ZlcnRleDEocmVmbGV4VmVydGV4ICsgb2Zmc2V0
MSkKLSAgICAgICAgLCBtX3ZlcnRleDIocmVmbGV4VmVydGV4ICsgb2Zmc2V0MikKLSAgICAgICAg
LCBtX2VkZ2VJbmRleCgtMSkKLSAgICAgICAgLCBtX2Jhc2lzKFZlcnRleCkKLSAgICB7Ci0gICAg
fQotCi0gICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBm
bG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotICAg
ICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3goKS54KCksIG1p
bkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV92ZXJ0ZXgyKEZsb2F0
UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLm1heFgoKSwgbWluTG9naWNhbEludGVydmFsVG9w
KSArIG9mZnNldCkKLSAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKLSAgICAgICAgLCBtX2Jhc2lz
KExpbmVUb3ApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYg
dmVydGV4MSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGV4MTsgfQotICAgIHZpcnR1
YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
dmVydGV4MjsgfQotICAgIGludCBlZGdlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRl
eDsgfQotICAgIEJhc2lzIGJhc2lzKCkgY29uc3QgeyByZXR1cm4gbV9iYXNpczsgfQotCi1wcml2
YXRlOgotICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgxOwotICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgy
OwotICAgIGludCBtX2VkZ2VJbmRleDsKLSAgICBCYXNpcyBtX2Jhc2lzOwotfTsKLQotY2xhc3Mg
RXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7Ci1wdWJsaWM6Ci0gICAgRXhjbHVzaW9uUG9s
eWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBm
aWxsUnVsZSkKLSAgICAgICAgOiBFeGNsdXNpb25TaGFwZSgpCi0gICAgICAgICwgbV9wb2x5Z29u
KHZlcnRpY2VzLCBmaWxsUnVsZSkKLSAgICAgICAgLCBtX21hcmdpbkJvdW5kcyhudWxscHRyKQot
ICAgICAgICAsIG1fcGFkZGluZ0JvdW5kcyhudWxscHRyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdpbkJvdW5k
cygpLmJvdW5kaW5nQm94KCkpOyB9Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGlu
Z0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0
PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BvbHlnb24u
aXNFbXB0eSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhM
YXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExp
c3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVy
dmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5
b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9WRVJS
SURFOwotCi1wcml2YXRlOgotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVNYXJnaW5Cb3Vu
ZHMoKSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlUGFkZGluZ0JvdW5kcygp
IGNvbnN0OwotCi0gICAgRmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKLSAgICBtdXRhYmxlIE93blB0
cjxGbG9hdFBvbHlnb24+IG1fbWFyZ2luQm91bmRzOwotICAgIG11dGFibGUgT3duUHRyPEZsb2F0
UG9seWdvbj4gbV9wYWRkaW5nQm91bmRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRXhjbHVzaW9uUG9seWdvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNmI1MjAyNmU4YTFlMTZjZjRlM2Y5YjZjOWQyYWIxZDI1ZjBlZmJkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uUmVjdGFuZ2xl
LmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgZWxsaXBzZVhJbnRlcmNlcHQoZmxvYXQgeSwgZmxvYXQg
cngsIGZsb2F0IHJ5KQotewotICAgIEFTU0VSVChyeSA+IDApOwotICAgIHJldHVybiByeCAqIHNx
cnQoMSAtICh5ICogeSkgLyAocnkgKiByeSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGVs
bGlwc2VZSW50ZXJjZXB0KGZsb2F0IHgsIGZsb2F0IHJ4LCBmbG9hdCByeSkKLXsKLSAgICBBU1NF
UlQocnggPiAwKTsKLSAgICByZXR1cm4gcnkgKiBzcXJ0KDEgLSAoeCAqIHgpIC8gKHJ4ICogcngp
KTsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjpwYWRkaW5nQm91bmRz
KGZsb2F0IHBhZGRpbmcpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHBhZGRpbmcgPj0gMCk7Ci0gICAg
aWYgKCFwYWRkaW5nIHx8IGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAg
ZmxvYXQgYm91bmRzWCA9IHgoKSArIHN0ZDo6bWluKHdpZHRoKCkgLyAyLCBwYWRkaW5nKTsKLSAg
ICBmbG9hdCBib3VuZHNZID0geSgpICsgc3RkOjptaW4oaGVpZ2h0KCkgLyAyLCBwYWRkaW5nKTsK
LSAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgLSBwYWRkaW5n
ICogMik7Ci0gICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gc3RkOjptYXgoMC4wZiwgaGVpZ2h0KCkg
LSBwYWRkaW5nICogMik7Ci0gICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHN0ZDo6bWF4KDAuMGYs
IHJ4KCkgLSBwYWRkaW5nKTsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gc3RkOjptYXgoMC4w
ZiwgcnkoKSAtIHBhZGRpbmcpOwotICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0KEZsb2F0UmVj
dChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwgRmxvYXRTaXpl
KGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBG
bG9hdFJvdW5kZWRSZWN0OjptYXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdAotewotICAg
IEFTU0VSVChtYXJnaW4gPj0gMCk7Ci0gICAgaWYgKCFtYXJnaW4pCi0gICAgICAgIHJldHVybiAq
dGhpczsKLQotICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkgLSBtYXJnaW47Ci0gICAgZmxvYXQgYm91
bmRzWSA9IHkoKSAtIG1hcmdpbjsKLSAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHdpZHRoKCkgKyBt
YXJnaW4gKiAyOwotICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9IGhlaWdodCgpICsgbWFyZ2luICog
MjsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gcngoKSArIG1hcmdpbjsKLSAgICBmbG9hdCBi
b3VuZHNSYWRpdXNZID0gcnkoKSArIG1hcmdpbjsKLSAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVj
dChGbG9hdFJlY3QoYm91bmRzWCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCks
IEZsb2F0U2l6ZShib3VuZHNSYWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Ci19Ci0KLUZsb2F0UG9p
bnQgRmxvYXRSb3VuZGVkUmVjdDo6Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lkdGhB
dEludGVyY2VwdCkgY29uc3QKLXsKLSAgICBmbG9hdCB4aSA9ICh3aWR0aCgpIC0gd2lkdGhBdElu
dGVyY2VwdCkgLyAyOwotICAgIGZsb2F0IHlpID0gcnkoKSAtIGVsbGlwc2VZSW50ZXJjZXB0KHJ4
KCkgLSB4aSwgcngoKSwgcnkoKSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoeGksIHlpKTsKLX0K
LQotRmxvYXRSb3VuZGVkUmVjdCBFeGNsdXNpb25SZWN0YW5nbGU6OnNoYXBlUGFkZGluZ0JvdW5k
cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMpIHsK
LSAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzID0gdHJ1ZTsKLSAgICAgICAg
bV9wYWRkaW5nQm91bmRzID0gbV9ib3VuZHMucGFkZGluZ0JvdW5kcyhzaGFwZVBhZGRpbmcoKSk7
Ci0gICAgfQotICAgIHJldHVybiBtX3BhZGRpbmdCb3VuZHM7Ci19Ci0KLUZsb2F0Um91bmRlZFJl
Y3QgRXhjbHVzaW9uUmVjdGFuZ2xlOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcykgewotICAgICAgICBtX2hhdmVJbml0
aWFsaXplZE1hcmdpbkJvdW5kcyA9IHRydWU7Ci0gICAgICAgIG1fbWFyZ2luQm91bmRzID0gbV9i
b3VuZHMubWFyZ2luQm91bmRzKHNoYXBlTWFyZ2luKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9t
YXJnaW5Cb3VuZHM7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUmVjdGFuZ2xlOjpnZXRFeGNsdWRlZElu
dGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBib3VuZHMgPSBzaGFwZU1hcmdpbkJvdW5kcygpOwotICAgIGlmIChib3VuZHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxv
YXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKLQotICAgIGlmICh5MiA8IGJvdW5k
cy55KCkgfHwgeTEgPj0gYm91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxv
YXQgeDEgPSBib3VuZHMueCgpOwotICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKLQotICAg
IGlmIChib3VuZHMucnkoKSA+IDApIHsKLSAgICAgICAgaWYgKHkyIDwgYm91bmRzLnkoKSArIGJv
dW5kcy5yeSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9IHkyIC0gYm91bmRzLnkoKSAtIGJv
dW5kcy5yeSgpOwotICAgICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwg
Ym91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSAr
IGJvdW5kcy5yeCgpIC0geGk7Ci0gICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3Vu
ZHMucngoKSArIHhpOwotICAgICAgICB9IGVsc2UgaWYgKHkxID4gYm91bmRzLm1heFkoKSAtIGJv
dW5kcy5yeSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9ICB5MSAtIChib3VuZHMubWF4WSgp
IC0gYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2Vw
dCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIHgxID0gYm91bmRz
LngoKSArIGJvdW5kcy5yeCgpIC0geGk7Ci0gICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkg
LSBib3VuZHMucngoKSArIHhpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0LmFwcGVu
ZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKLX0KLQotdm9pZCBFeGNsdXNpb25SZWN0YW5nbGU6Omdl
dEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwotICAgIGlmIChib3Vu
ZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9IGxvZ2ljYWxU
b3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKLQotICAgIGlm
ICh5MSA8IGJvdW5kcy55KCkgfHwgeTIgPiBib3VuZHMubWF4WSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmbG9hdCB4MSA9IGJvdW5kcy54KCk7Ci0gICAgZmxvYXQgeDIgPSBib3VuZHMubWF4
WCgpOwotCi0gICAgaWYgKGJvdW5kcy5yeSgpID4gMCkgewotICAgICAgICBib29sIHkxSW50ZXJj
ZXB0c0Nvcm5lciA9IHkxIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpOwotICAgICAgICBib29s
IHkySW50ZXJjZXB0c0Nvcm5lciA9IHkyID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpOwot
ICAgICAgICBmbG9hdCB4aSA9IDA7Ci0KLSAgICAgICAgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lciAm
JiB5MkludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmICAoeTEgPCBib3VuZHMuaGVp
Z2h0KCkgKyAyICogYm91bmRzLnkoKSAtIHkyKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgeWkg
PSB5MSAtIGJvdW5kcy55KCkgLSBib3VuZHMucnkoKTsKLSAgICAgICAgICAgICAgICB4aSA9IGVs
bGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4
WSgpIC0gYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNl
cHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9
IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICAgICAgeGkgPSBlbGxpcHNl
WEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgfSBlbHNl
IGlmICh5MkludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0g
KGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB4aSA9IGVsbGlwc2VY
SW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lciB8fCB5MkludGVyY2VwdHNDb3JuZXIpIHsKLSAg
ICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7Ci0gICAgICAgICAg
ICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKLX0KLQotYm9vbCBF
eGNsdXNpb25SZWN0YW5nbGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0
VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJ
bnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBmbG9hdCBtaW5J
bnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsKLSAgICBmbG9hdCBtaW5JbnRlcnZh
bEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7Ci0gICAgZmxvYXQgbWlu
SW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsKLQotICAgIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwotICAg
IGlmIChib3VuZHMuaXNFbXB0eSgpIHx8IG1pbkludGVydmFsV2lkdGggPiBib3VuZHMud2lkdGgo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJv
dW5kcy55KCksIG1pbkludGVydmFsVG9wKTsKLSAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbklu
dGVydmFsSGVpZ2h0OwotCi0gICAgaWYgKG1heFkgPiBib3VuZHMubWF4WSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgPSBtaW5Z
IDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpOwotICAgIGJvb2wgaW50ZXJ2YWxPdmVybGFwc01h
eENvcm5lciA9IG1heFkgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCk7Ci0KLSAgICBpZiAo
IWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgIWludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIp
IHsKLSAgICAgICAgcmVzdWx0ID0gbWluWTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0KCkgLyAyOwot
ICAgIGJvb2wgbWluQ29ybmVyRGVmaW5lc1ggPSBmYWJzKGNlbnRlclkgLSBtaW5ZKSA+IGZhYnMo
Y2VudGVyWSAtIG1heFkpOwotICAgIGJvb2wgaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyA9IG1p
bkludGVydmFsV2lkdGggKyAyICogYm91bmRzLnJ4KCkgPD0gYm91bmRzLndpZHRoKCk7Ci0gICAg
RmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHQgPSBib3VuZHMuY29ybmVySW50ZXJjZXB0Rm9yV2lk
dGgobWluSW50ZXJ2YWxXaWR0aCk7Ci0KLSAgICBpZiAoaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5l
ciAmJiAoIWludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgfHwgbWluQ29ybmVyRGVmaW5lc1gpKSB7
Ci0gICAgICAgIGlmIChpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8IGJvdW5kcy55KCkgKyBj
b3JuZXJJbnRlcmNlcHQueSgpIDwgbWluWSkgewotICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtaW5JbnRl
cnZhbEhlaWdodCA8IGJvdW5kcy5oZWlnaHQoKSAtICgyICogY29ybmVySW50ZXJjZXB0LnkoKSkp
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQoYm91bmRzLnkoKSArIGNv
cm5lckludGVyY2VwdC55KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciAmJiAoIWludGVydmFs
T3ZlcmxhcHNNaW5Db3JuZXIgfHwgIW1pbkNvcm5lckRlZmluZXNYKSkgewotICAgICAgICBpZiAo
aW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyB8fCBtaW5ZIDw9ICBib3VuZHMubWF4WSgpIC0gY29y
bmVySW50ZXJjZXB0LnkoKSAtIG1pbkludGVydmFsSGVpZ2h0KSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBtaW5ZOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzA5ZmRhYzE2M2MxMmVlNzNkMmJlODkzZWYzMTg4YmQzMjc3YzJhMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0g
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25SZWN0YW5nbGVfaAotI2RlZmluZSBF
eGNsdXNpb25SZWN0YW5nbGVfaAotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxv
YXRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSb3VuZGVkUmVjdCA6
IHB1YmxpYyBGbG9hdFJlY3QgewotcHVibGljOgotICAgIEZsb2F0Um91bmRlZFJlY3QoKSB7IH0K
LSAgICBGbG9hdFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBjb25zdCBGbG9h
dFNpemUmIHJhZGlpKQotICAgICAgICA6IEZsb2F0UmVjdChib3VuZHMpCi0gICAgICAgICwgbV9y
YWRpaShyYWRpaSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgcngoKSBjb25zdCB7IHJldHVy
biBtX3JhZGlpLndpZHRoKCk7IH0KLSAgICBmbG9hdCByeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFk
aWkuaGVpZ2h0KCk7IH0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1hcmdpbkJvdW5kcyhmbG9hdCBt
YXJnaW4pIGNvbnN0OwotICAgIEZsb2F0Um91bmRlZFJlY3QgcGFkZGluZ0JvdW5kcyhmbG9hdCBw
YWRkaW5nKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGNvcm5lckludGVyY2VwdEZvcldpZHRoKGZs
b2F0IHdpZHRoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbV9yYWRpaTsKLX07
Ci0KLWNsYXNzIEV4Y2x1c2lvblJlY3RhbmdsZSA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7Ci1w
dWJsaWM6Ci0gICAgRXhjbHVzaW9uUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBj
b25zdCBGbG9hdFNpemUmIHJhZGlpKQotICAgICAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAg
ICAgLCBtX2JvdW5kcyhib3VuZHMsIHJhZGlpKQotICAgICAgICAsIG1faGF2ZUluaXRpYWxpemVk
TWFyZ2luQm91bmRzKGZhbHNlKQotICAgICAgICAsIG1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0Jv
dW5kcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBl
TWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKSk7IH0KLSAgICB2aXJ0dWFsIExh
eW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91bmRzKCkpOyB9
Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2Jv
dW5kcy5pc0VtcHR5KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMo
TGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRM
aXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2
YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVk
SW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25z
dCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3Qg
T1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZU1hcmdpbkJv
dW5kcygpIGNvbnN0OwotICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVQYWRkaW5nQm91bmRzKCkg
Y29uc3Q7Ci0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fYm91bmRzOwotICAgIG11dGFibGUgRmxv
YXRSb3VuZGVkUmVjdCBtX21hcmdpbkJvdW5kczsKLSAgICBtdXRhYmxlIEZsb2F0Um91bmRlZFJl
Y3QgbV9wYWRkaW5nQm91bmRzOwotICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZE1h
cmdpbkJvdW5kcyA6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVkUGFkZGlu
Z0JvdW5kcyA6IDE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
eGNsdXNpb25SZWN0YW5nbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZTY0MGRiNWQ3NjE3NDRh
NGEwMWI2ODA1Yjg1Yzc4Y2JiMDY3ZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgot
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0KLSNpbmNsdWRlICJCYXNpY1NoYXBl
RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uUG9seWdvbi5oIgotI2luY2x1ZGUgIkV4
Y2x1c2lvblJlY3RhbmdsZS5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkxl
bmd0aEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIldpbmRSdWxlLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUGFzc093blB0cjxFeGNs
dXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgYm91
bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotewotICAgIEFTU0VSVChib3VuZHMud2lkdGgo
KSA+PSAwICYmIGJvdW5kcy5oZWlnaHQoKSA+PSAwICYmIHJhZGlpLndpZHRoKCkgPj0gMCAmJiBy
YWRpaS5oZWlnaHQoKSA+PSAwKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblJl
Y3RhbmdsZShib3VuZHMsIHJhZGlpKSk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lv
blNoYXBlPiBjcmVhdGVFeGNsdXNpb25DaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBm
bG9hdCByYWRpdXMpCi17Ci0gICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEV4Y2x1c2lvblJlY3RhbmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1
cywgY2VudGVyLnkoKSAtIHJhZGl1cywgcmFkaXVzKjIsIHJhZGl1cyoyKSwgRmxvYXRTaXplKHJh
ZGl1cywgcmFkaXVzKSkpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4g
Y3JlYXRlRXhjbHVzaW9uRWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgcmFkaWkpCi17Ci0gICAgQVNTRVJUKHJhZGlpLndpZHRoKCkgPj0gMCAmJiByYWRp
aS5oZWlnaHQoKSA+PSAwKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblJlY3Rh
bmdsZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGlpLndpZHRoKCksIGNlbnRlci55KCkgLSBy
YWRpaS5oZWlnaHQoKSwgcmFkaWkud2lkdGgoKSoyLCByYWRpaS5oZWlnaHQoKSoyKSwgcmFkaWkp
KTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lv
blBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1
bGUgZmlsbFJ1bGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25Qb2x5Z29u
KHZlcnRpY2VzLCBmaWxsUnVsZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBwaHlz
aWNhbFJlY3RUb0xvZ2ljYWwoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsb2dpY2FsQm94
SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gcmVjdDsKLSAgICBpZiAo
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KHJlY3QueSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0gcmVjdC5tYXhYKCksIHJlY3Qu
aGVpZ2h0KCksIHJlY3Qud2lkdGgoKSk7Ci0gICAgcmV0dXJuIHJlY3QudHJhbnNwb3NlZFJlY3Qo
KTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFBvaW50IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQsIFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBwb2ludDsKLSAgICBpZiAoaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludChwb2lu
dC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSBwb2ludC54KCkpOwotICAgIHJldHVybiBwb2ludC50
cmFuc3Bvc2VkUG9pbnQoKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFNpemUgcGh5c2ljYWxT
aXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKLSAg
ICAgICAgcmV0dXJuIHNpemU7Ci0gICAgcmV0dXJuIHNpemUudHJhbnNwb3NlZFNpemUoKTsKLX0K
LQotUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1
c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hhcGUsIGNvbnN0IExheW91dFNpemUm
IGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwg
TGVuZ3RoIHBhZGRpbmcpCi17Ci0gICAgQVNTRVJUKGJhc2ljU2hhcGUpOwotCi0gICAgYm9vbCBo
b3Jpem9udGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSk7Ci0gICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2Fs
Qm94U2l6ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVpZ2h0KCk7Ci0gICAgZmxvYXQgYm94
SGVpZ2h0ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUuaGVpZ2h0KCkg
OiBsb2dpY2FsQm94U2l6ZS53aWR0aCgpOwotICAgIE93blB0cjxFeGNsdXNpb25TaGFwZT4gZXhj
bHVzaW9uU2hhcGU7Ci0KLSAgICBzd2l0Y2ggKGJhc2ljU2hhcGUtPnR5cGUoKSkgewotCi0gICAg
Y2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUmVjdGFuZ2xlVHlwZTogewotICAgICAgICBjb25z
dCBCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNp
Y1NoYXBlUmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZHMo
Ci0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+eCgpLCBib3hXaWR0
aCksCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+eSgpLCBib3hI
ZWlnaHQpLAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPndpZHRo
KCksIGJveFdpZHRoKSwKLSAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xl
LT5oZWlnaHQoKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIExlbmd0aCByYWRpdXNYTGVuZ3RoID0g
cmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7Ci0gICAgICAgIExlbmd0aCByYWRpdXNZTGVuZ3Ro
ID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7Ci0gICAgICAgIEZsb2F0U2l6ZSBjb3JuZXJS
YWRpaSgKLSAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9h
dFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwKLSAgICAgICAgICAgIHJh
ZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1
c1lMZW5ndGgsIGJveEhlaWdodCkpOwotICAgICAgICBGbG9hdFJlY3QgbG9naWNhbEJvdW5kcyA9
IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3
cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25S
ZWN0YW5nbGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvcm5lclJhZGlp
LCB3cml0aW5nTW9kZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJhc2lj
U2hhcGU6OkJhc2ljU2hhcGVDaXJjbGVUeXBlOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljU2hhcGVD
aXJjbGUqIGNpcmNsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVDaXJjbGUqPihiYXNp
Y1NoYXBlKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2ly
Y2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7Ci0gICAgICAgIGZs
b2F0IHJhZGl1cyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5yYWRpdXMoKSwgc3RkOjpt
aW4oYm94SGVpZ2h0LCBib3hXaWR0aCkpOwotICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50
ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSks
IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVz
aW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25DaXJjbGUobG9naWNhbENlbnRlciwgcmFkaXVzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBl
RWxsaXBzZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSo+KGJhc2ljU2hhcGUpOwotICAg
ICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50ZXJY
KCksIGJveFdpZHRoKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0VmFsdWVGb3JMZW5n
dGgoZWxsaXBzZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOwotICAgICAgICBmbG9hdCByYWRpdXNY
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdpZHRoKTsKLSAg
ICAgICAgZmxvYXQgcmFkaXVzWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVz
WSgpLCBib3hIZWlnaHQpOwotICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50ZXIgPSBwaHlz
aWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIGxvZ2ljYWxC
b3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBsb2dpY2Fs
UmFkaWkgPSBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kp
LCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNp
b25FbGxpcHNlKGxvZ2ljYWxDZW50ZXIsIGxvZ2ljYWxSYWRpaSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVBvbHlnb25UeXBlOiB7Ci0g
ICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKLSAgICAgICAgY29uc3QgVmVjdG9y
PExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOwotICAgICAgICBzaXplX3QgdmFs
dWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVlc1NpemUgJSAy
KSk7Ci0gICAgICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcyA9IGFkb3B0
UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4odmFsdWVzU2l6ZSAvIDIpKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlc1NpemU7IGkgKz0gMikgewotICAgICAgICAgICAg
RmxvYXRQb2ludCB2ZXJ0ZXgoCi0gICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2
YWx1ZXMuYXQoaSksIGJveFdpZHRoKSwKLSAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVu
Z3RoKHZhbHVlcy5hdChpICsgMSksIGJveEhlaWdodCkpOwotICAgICAgICAgICAgKCp2ZXJ0aWNl
cylbaSAvIDJdID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbCh2ZXJ0ZXgsIGxvZ2ljYWxCb3hTaXpl
LmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBleGNsdXNpb25T
aGFwZSA9IGNyZWF0ZUV4Y2x1c2lvblBvbHlnb24odmVydGljZXMucmVsZWFzZSgpLCBwb2x5Z29u
LT53aW5kUnVsZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1No
YXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOiB7Ci0gICAgICAgIGNvbnN0IEJhc2lj
U2hhcGVJbnNldFJlY3RhbmdsZSogcmVjdGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNT
aGFwZUluc2V0UmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIGZsb2F0IGxlZnQgPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+bGVmdCgpLCBib3hXaWR0aCk7Ci0gICAgICAg
IGZsb2F0IHRvcCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT50b3AoKSwgYm94SGVp
Z2h0KTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kcygKLSAgICAgICAgICAgIGxlZnQsCi0gICAg
ICAgICAgICB0b3AsCi0gICAgICAgICAgICBib3hXaWR0aCAtIGxlZnQgLSBmbG9hdFZhbHVlRm9y
TGVuZ3RoKHJlY3RhbmdsZS0+cmlnaHQoKSwgYm94V2lkdGgpLAotICAgICAgICAgICAgYm94SGVp
Z2h0IC0gdG9wIC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmJvdHRvbSgpLCBib3hI
ZWlnaHQpKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1hMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5l
clJhZGl1c1goKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1lMZW5ndGggPSByZWN0YW5nbGUtPmNv
cm5lclJhZGl1c1koKTsKLSAgICAgICAgRmxvYXRTaXplIGNvcm5lclJhZGlpKAotICAgICAgICAg
ICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgo
cmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAotICAgICAgICAgICAgcmFkaXVzWUxlbmd0aC5pc1Vu
ZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0aCwgYm94SGVp
Z2h0KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsQm91bmRzID0gcGh5c2ljYWxSZWN0VG9M
b2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLQot
ICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvblJlY3RhbmdsZShsb2dpY2Fs
Qm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVyUmFkaWksIHdyaXRpbmdNb2RlKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGV4Y2x1c2lvblNoYXBlLT5tX3dyaXRpbmdNb2Rl
ID0gd3JpdGluZ01vZGU7Ci0gICAgZXhjbHVzaW9uU2hhcGUtPm1fbWFyZ2luID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChtYXJnaW4sIDApOwotICAgIGV4Y2x1c2lvblNoYXBlLT5tX3BhZGRpbmcgPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKHBhZGRpbmcsIDApOwotCi0gICAgcmV0dXJuIGV4Y2x1c2lvblNo
YXBlLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTNkNTFmMDQxNjgyMzIxODIxNTJjMzI4MDNmYTczZmE0ODlkNDUxZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICog
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
Ci0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hhcGVfaAotCi0j
aW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgTGluZVNlZ21l
bnQgewotICAgIExpbmVTZWdtZW50KGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmln
aHQpCi0gICAgICAgIDogbG9naWNhbExlZnQobG9naWNhbExlZnQpCi0gICAgICAgICwgbG9naWNh
bFJpZ2h0KGxvZ2ljYWxSaWdodCkKLSAgICB7Ci0gICAgfQotCi0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodDsKLX07Ci0KLXR5cGVkZWYgVmVj
dG9yPExpbmVTZWdtZW50PiBTZWdtZW50TGlzdDsKLQotCi0vLyBBIHJlcHJlc2VudGF0aW9uIG9m
IGEgQmFzaWNTaGFwZSB0aGF0IGVuYWJsZXMgbGF5b3V0IGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0
byBicmVhayBhIGxpbmUgdXAgaW50byBzZWdtZW50cwotLy8gdGhhdCB3aWxsIGZpdCB3aXRoaW4g
b3IgYXJvdW5kIGEgc2hhcGUuIFRoZSBsaW5lIGlzIGRlZmluZWQgYnkgYSBwYWlyIG9mIGxvZ2lj
YWwgWSBjb29yZGluYXRlcyBhbmQgdGhlCi0vLyBjb21wdXRlZCBzZWdtZW50cyBhcmUgcmV0dXJu
ZWQgYXMgcGFpcnMgb2YgbG9naWNhbCBYIGNvb3JkaW5hdGVzLiBUaGUgQmFzaWNTaGFwZSBpdHNl
bGYgaXMgZGVmaW5lZCBpbgotLy8gcGh5c2ljYWwgY29vcmRpbmF0ZXMuCi0KLWNsYXNzIEV4Y2x1
c2lvblNoYXBlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFw
ZT4gY3JlYXRlRXhjbHVzaW9uU2hhcGUoY29uc3QgQmFzaWNTaGFwZSosIGNvbnN0IExheW91dFNp
emUmIGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwgTGVuZ3RoIHBh
ZGRpbmcpOwotCi0gICAgdmlydHVhbCB+RXhjbHVzaW9uU2hhcGUoKSB7IH0KLQotICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxv
Z2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6
ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdCA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBmbG9h
dCBzaGFwZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9Ci0gICAgZmxvYXQgc2hh
cGVQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9Ci0KLXByaXZhdGU6Ci0gICAg
V3JpdGluZ01vZGUgbV93cml0aW5nTW9kZTsKLSAgICBmbG9hdCBtX21hcmdpbjsKLSAgICBmbG9h
dCBtX3BhZGRpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
eGNsdXNpb25TaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhj
bHVzaW9uU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjE0ZjgyMmI3ODU0
MWVkZTNlM2M0OGI4MzRkODJjMzI4YWNlMWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hh
cGVJbmZvLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIkV4Y2x1c2lv
blNoYXBlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNp
b25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAo
RXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwg
U2VnbWVudExpc3QmKSBjb25zdD4KLWNvbnN0IEV4Y2x1c2lvblNoYXBlKiBFeGNsdXNpb25TaGFw
ZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVydmFsR2V0dGVyPjo6Y29tcHV0ZWRT
aGFwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEV4Y2x1c2lvblNoYXBlKiBleGNsdXNpb25TaGFwZSA9
IG1fc2hhcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBleGNsdXNpb25TaGFwZTsKLQotICAgIEV4
Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSAobV9yZW5kZXJlci0+c3R5bGUoKS0+KnNo
YXBlR2V0dGVyKSgpOwotICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gKHNoYXBlVmFsdWUgJiYgc2hh
cGVWYWx1ZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKSA/IHNoYXBlVmFs
dWUtPnNoYXBlKCkgOiAwOwotCi0gICAgQVNTRVJUKHNoYXBlKTsKLQotICAgIG1fc2hhcGUgPSBF
eGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUoc2hhcGUsIExheW91dFNpemUobV9z
aGFwZUxvZ2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWlnaHQpLCBtX3JlbmRlcmVyLT5zdHls
ZSgpLT53cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZU1hcmdpbigpLCBt
X3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7Ci0gICAgQVNTRVJUKG1fc2hhcGUp
OwotICAgIHJldHVybiBtX3NoYXBlLmdldCgpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJU
eXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBj
b25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwg
TGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWJvb2wgRXhjbHVzaW9uU2hhcGVJbmZv
PFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVTZWdtZW50
c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCi17Ci0g
ICAgQVNTRVJUKGxpbmVIZWlnaHQgPj0gMCk7Ci0gICAgbV9zaGFwZUxpbmVUb3AgPSBsaW5lVG9w
IC0gbG9naWNhbFRvcE9mZnNldCgpOwotICAgIG1fbGluZUhlaWdodCA9IGxpbmVIZWlnaHQ7Ci0g
ICAgbV9zZWdtZW50cy5jbGVhcigpOwotCi0gICAgaWYgKGxpbmVPdmVybGFwc1NoYXBlQm91bmRz
KCkpCi0gICAgICAgIChjb21wdXRlZFNoYXBlKCktPippbnRlcnZhbEdldHRlcikobV9zaGFwZUxp
bmVUb3AsIHN0ZDo6bWluKG1fbGluZUhlaWdodCwgc2hhcGVMb2dpY2FsQm90dG9tKCkgLSBsaW5l
VG9wKSwgbV9zZWdtZW50cyk7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0g
dGhpcy0+bG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
c2VnbWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsTGVm
dCArPSBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICAgICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsUmln
aHQgKz0gbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fc2VnbWVudHMu
c2l6ZSgpOwotfQotCi10ZW1wbGF0ZSBjbGFzcyBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxv
Y2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpn
ZXRJbmNsdWRlZEludGVydmFscz47Ci10ZW1wbGF0ZSBjbGFzcyBFeGNsdXNpb25TaGFwZUluZm88
UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpn
ZXRFeGNsdWRlZEludGVydmFscz47Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NWE3MDc5MmEzZjkxMjZmZDc1Y2ZiNzY4MjlmYjlhYWM2MDE4ZmZiOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoK
LSogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0q
Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSogICAgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotKiBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0qIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SCi0qIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRgotKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qLwotCi0j
aWZuZGVmIEV4Y2x1c2lvblNoYXBlSW5mb19oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlSW5mb19o
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgi
Ci0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgotI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgSW5mb1R5cGU+Ci1j
bGFzcyBNYXBwZWRJbmZvIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgSW5mb1R5cGUqIGVuc3VyZUlu
Zm8oY29uc3QgS2V5VHlwZSoga2V5KQotICAgIHsKLSAgICAgICAgSW5mb01hcCYgaW5mb01hcCA9
IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7Ci0gICAgICAgIGlmIChJ
bmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCi0gICAgICAgICAgICByZXR1cm4gaW5m
bzsKLSAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGluZm9NYXAu
YWRkKGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCByZW1vdmVJ
bmZvKGNvbnN0IEtleVR5cGUqIGtleSkgeyBpbmZvTWFwKCkucmVtb3ZlKGtleSk7IH0KLSAgICBz
dGF0aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IHJldHVybiBpbmZvTWFw
KCkuZ2V0KGtleSk7IH0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEtleVR5
cGUqLCBPd25QdHI8SW5mb1R5cGU+ID4gSW5mb01hcDsKLSAgICBzdGF0aWMgSW5mb01hcCYgaW5m
b01hcCgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9NYXAsIHN0YXRp
Y0luZm9NYXAsICgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY0luZm9NYXA7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRl
clN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1c2lvblNoYXBlOjoqaW50
ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+
Ci1jbGFzcyBFeGNsdXNpb25TaGFwZUluZm8gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIHZpcnR1YWwgfkV4Y2x1c2lvblNoYXBlSW5mbygpIHsgfQotCi0gICAg
dm9pZCBzZXRTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hT
aXppbmcoKSA9PSBDT05URU5UX0JPWCkgewotICAgICAgICAgICAgbG9naWNhbFdpZHRoIC09IG1f
cmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgIGxv
Z2ljYWxIZWlnaHQgLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NoYXBlTG9naWNhbFdpZHRoID09IGxvZ2lj
YWxXaWR0aCAmJiBtX3NoYXBlTG9naWNhbEhlaWdodCA9PSBsb2dpY2FsSGVpZ2h0KQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBkaXJ0eVNoYXBlU2l6ZSgpOwotICAgICAgICBtX3NoYXBl
TG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoOwotICAgICAgICBtX3NoYXBlTG9naWNhbEhlaWdo
dCA9IGxvZ2ljYWxIZWlnaHQ7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdt
ZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpOwot
ICAgIHZvaWQgY2xlYXJTZWdtZW50cygpIHsgbV9zZWdtZW50cy5jbGVhcigpOyB9Ci0KLSAgICBM
YXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVM
b2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KLSAgICBMYXlv
dXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVM
b2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KLSAgICBM
YXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBl
TG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9naWNhbExlZnRPZmZzZXQoKTsgfQotICAgIExh
eW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBl
TG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsgbG9naWNhbExlZnRPZmZzZXQoKTsgfQotICAg
IExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNo
YXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgoKTsgfQotICAgIExheW91dFVuaXQgc2hhcGVM
b2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGlu
Z0JveCgpLmhlaWdodCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lVG9wKCkgY29u
c3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KLSAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVU
b3AgKyBtX2xpbmVIZWlnaHQgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KLQotICAgIExheW91dFVu
aXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKSBjb25zdCB7IHJldHVybiAobV9yZW5kZXJl
ci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpID8gKG1fc2hhcGVMb2dpY2Fs
SGVpZ2h0ICsgbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSkgOiBt
X3NoYXBlTG9naWNhbEhlaWdodDsgfQotCi0gICAgYm9vbCBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMaW5lVG9wKCkgPCBzaGFwZUxvZ2ljYWxCb3R0b20o
KSAmJiBzaGFwZUxvZ2ljYWxUb3AoKSA8PSBsb2dpY2FsTGluZUJvdHRvbSgpOyB9Ci0gICAgYm9v
bCBsaW5lV2l0aGluU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBsaW5lT3ZlcmxhcHNTaGFw
ZUJvdW5kcygpICYmIChsb2dpY2FsTGluZUJvdHRvbSgpIDw9IHNoYXBlTG9naWNhbEJvdHRvbSgp
KTsgfQotCi0gICAgdm9pZCBkaXJ0eVNoYXBlU2l6ZSgpIHsgbV9zaGFwZS5jbGVhcigpOyB9Ci0g
ICAgYm9vbCBzaGFwZVNpemVEaXJ0eSgpIHsgcmV0dXJuICFtX3NoYXBlLmdldCgpOyB9Ci0gICAg
Y29uc3QgUmVuZGVyVHlwZSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBFeGNsdXNpb25TaGFwZUluZm8oY29uc3QgUmVuZGVyVHlwZSogcmVu
ZGVyZXIpOiBtX3JlbmRlcmVyKHJlbmRlcmVyKSB7IH0KLQotICAgIGNvbnN0IEV4Y2x1c2lvblNo
YXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0KLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLT5zdHlsZSgpLT5i
b3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdC
ZWZvcmUoKSA6IExheW91dFVuaXQoKTsgfTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09
IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLT5pc1JlbmRlclJlZ2lvbigpKSA/IG1fcmVuZGVy
ZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpIDogTGF5b3V0VW5pdCgpOyB9Ci0KLSAgICBMYXlv
dXRVbml0IG1fc2hhcGVMaW5lVG9wOwotICAgIExheW91dFVuaXQgbV9saW5lSGVpZ2h0OwotICAg
IFNlZ21lbnRMaXN0IG1fc2VnbWVudHM7Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBPd25QdHI8
RXhjbHVzaW9uU2hhcGU+IG1fc2hhcGU7Ci0KLSAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2Fs
V2lkdGg7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbEhlaWdodDsKLSAgICBjb25zdCBS
ZW5kZXJUeXBlKiBtX3JlbmRlcmVyOwotfTsKLX0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGE3NDRmY2JhOTk1NGQ5ZGEwYTk5NTVkY2E4
N2FiZGVkM2U5MzExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwot
ICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby5oIgotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJJbmxpbmVJ
dGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotTGluZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVy
YXRvciYgc3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQpCi0gICAgOiBzdGFydChzdGFy
dC5yb290KCksIHN0YXJ0Lm9iamVjdCgpLCBzdGFydC5vZmZzZXQoKSkKLSAgICAsIGVuZChlbmQu
cm9vdCgpLCBlbmQub2JqZWN0KCksIGVuZC5vZmZzZXQoKSkKLSAgICB7Ci0gICAgfQotCi1ib29s
IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlcikKLXsKLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZVZhbHVlID0gcmVu
ZGVyZXItPnN0eWxlKCktPnJlc29sdmVkU2hhcGVJbnNpZGUoKTsKLSAgICBpZiAoIXNoYXBlVmFs
dWUgfHwgc2hhcGVWYWx1ZS0+dHlwZSgpICE9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBCYXNpY1NoYXBlKiBzaGFwZSA9IHNoYXBlVmFs
dWUtPnNoYXBlKCk7Ci0gICAgcmV0dXJuIHNoYXBlICYmIHNoYXBlLT50eXBlKCkgIT0gQmFzaWNT
aGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTsKLX0KLQotYm9vbCBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21lbnRXaWR0
aCkKLXsKLSAgICBjb25zdCBFeGNsdXNpb25TaGFwZSogc2hhcGUgPSBjb21wdXRlZFNoYXBlKCk7
Ci0gICAgaWYgKCFzaGFwZSB8fCBtX2xpbmVIZWlnaHQgPD0gMCB8fCBsb2dpY2FsTGluZVRvcCgp
ID4gc2hhcGVMb2dpY2FsQm90dG9tKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExh
eW91dFVuaXQgbmV3TGluZVRvcDsKLSAgICBpZiAoc2hhcGUtPmZpcnN0SW5jbHVkZWRJbnRlcnZh
bExvZ2ljYWxUb3AobV9zaGFwZUxpbmVUb3AsIExheW91dFNpemUobWluU2VnbWVudFdpZHRoLCBt
X2xpbmVIZWlnaHQpLCBuZXdMaW5lVG9wKSkgewotICAgICAgICBpZiAobmV3TGluZVRvcCA+IG1f
c2hhcGVMaW5lVG9wKSB7Ci0gICAgICAgICAgICBtX3NoYXBlTGluZVRvcCA9IG5ld0xpbmVUb3A7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDM4NDAzMmZmOTlmNmZkYjdkY2MyNGI4NjZjOTQxYjg2MzAyNTgwMmEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YK
LSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm9faAotI2RlZmluZSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm9faAotCi0jaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluZm8uaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbmxpbmVJdGVyYXRvcjsKLWNsYXNzIFJlbmRlckJs
b2NrOwotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi1zdHJ1Y3QgTGluZVNlZ21lbnRJdGVyYXRvciB7
Ci0gICAgUmVuZGVyT2JqZWN0KiByb290OwotICAgIFJlbmRlck9iamVjdCogb2JqZWN0OwotICAg
IHVuc2lnbmVkIG9mZnNldDsKLSAgICBMaW5lU2VnbWVudEl0ZXJhdG9yKFJlbmRlck9iamVjdCog
cm9vdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCkKLSAgICAgICAgOiBy
b290KHJvb3QpCi0gICAgICAgICwgb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBvZmZzZXQob2Zm
c2V0KQotICAgIHsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgTGluZVNlZ21lbnRSYW5nZSB7Ci0gICAg
TGluZVNlZ21lbnRJdGVyYXRvciBzdGFydDsKLSAgICBMaW5lU2VnbWVudEl0ZXJhdG9yIGVuZDsK
LSAgICBMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydCwgY29uc3Qg
SW5saW5lSXRlcmF0b3ImIGVuZCk7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxMaW5lU2VnbWVudFJh
bmdlPiBTZWdtZW50UmFuZ2VMaXN0OwotCi1jbGFzcyBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8g
OiBwdWJsaWMgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJl
c29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8+IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKHJlbmRlcmVyKSk7IH0KLQotICAgIHN0
YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpOwotCi0g
ICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3NlZ21l
bnRSYW5nZXMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5k
ZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmRXhjbHVzaW9uU2hh
cGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9w
LCBsaW5lSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBib29sIGhhc1NlZ21lbnRzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYmIG1fc2VnbWVu
dHMuc2l6ZSgpOwotICAgIH0KLSAgICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1NlZ21lbnRzKCkpOwotICAgICAgICByZXR1cm4g
bV9zZWdtZW50czsKLSAgICB9Ci0gICAgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdlcygp
IHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQotICAgIGNvbnN0IFNlZ21lbnRSYW5nZUxpc3Qm
IHNlZ21lbnRSYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7IH0KLSAgICBj
b25zdCBMaW5lU2VnbWVudCogY3VycmVudFNlZ21lbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKCFoYXNTZWdtZW50cygpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEFTU0VS
VChtX3NlZ21lbnRSYW5nZXMuc2l6ZSgpIDwgbV9zZWdtZW50cy5zaXplKCkpOwotICAgICAgICBy
ZXR1cm4gJm1fc2VnbWVudHNbbV9zZWdtZW50UmFuZ2VzLnNpemUoKV07Ci0gICAgfQotICAgIGJv
b2wgYWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVudFdpZHRoKTsKLQotICAgIHZv
aWQgc2V0TmVlZHNMYXlvdXQoYm9vbCB2YWx1ZSkgeyBtX25lZWRzTGF5b3V0ID0gdmFsdWU7IH0K
LSAgICBib29sIG5lZWRzTGF5b3V0KCkgeyByZXR1cm4gbV9uZWVkc0xheW91dDsgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRp
bmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCktPnNoYXBlUGFk
ZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKLSAgICA6IEV4Y2x1c2lv
blNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRl
LCAmRXhjbHVzaW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiAocmVuZGVyZXIpCi0gICAg
LCBtX25lZWRzTGF5b3V0KGZhbHNlKQotICAgIHsgfQotCi0gICAgU2VnbWVudFJhbmdlTGlzdCBt
X3NlZ21lbnRSYW5nZXM7Ci0gICAgYm9vbCBtX25lZWRzTGF5b3V0OjE7Ci19OwotCi19Ci0jZW5k
aWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDlj
Y2U1YTU2ZjFjYTlkYzA0YzQ5ODMwZjJjODVjZDdkZGUyYTVlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5oIgotCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWJvb2wgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRl
ckJveCogYm94KQotewotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHZhbHVlID0gYm94LT5zdHls
ZSgpLT5zaGFwZU91dHNpZGUoKTsKLSAgICByZXR1cm4gYm94LT5pc0Zsb2F0aW5nV2l0aFNoYXBl
T3V0c2lkZSgpICYmIHZhbHVlLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUg
JiYgdmFsdWUtPnNoYXBlKCk7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6
Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUhlaWdodCkKLXsKLSAgICBpZiAoc2hhcGVTaXplRGlydHkoKSB8fCBtX2xpbmVUb3AgIT0gbGlu
ZVRvcCB8fCBtX2xpbmVIZWlnaHQgIT0gbGluZUhlaWdodCkgewotICAgICAgICBpZiAoRXhjbHVz
aW9uU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZFeGNs
dXNpb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5l
KGxpbmVUb3AsIGxpbmVIZWlnaHQpKSB7Ci0gICAgICAgICAgICBtX2xlZnRTZWdtZW50U2hhcGVC
b3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1swXS5sb2dpY2FsTGVmdCAtIHNoYXBlTG9naWNh
bExlZnQoKTsKLSAgICAgICAgICAgIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRh
ID0gbV9zZWdtZW50c1ttX3NlZ21lbnRzLnNpemUoKS0xXS5sb2dpY2FsUmlnaHQgLSBzaGFwZUxv
Z2ljYWxSaWdodCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sZWZ0U2VnbWVu
dFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7Ci0gICAgICAgICAgICBtX3JpZ2h0U2VnbWVudFNo
YXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgbV9saW5lVG9wID0g
bGluZVRvcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7Ci19Ci0KLX0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4N2E1YzQ4Yjdi
MWZmY2UyMTU2ZjgxNzg3NDZmM2YzMzIwNzg1ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0g
KiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICog
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
b19oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9faAotCi0jaWYgRU5BQkxFKENT
U19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluZm8uaCIKLSNpbmNsdWRlICJM
YXlvdXRTaXplLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyQm94Owot
Ci1jbGFzcyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvIDogcHVibGljIEV4Y2x1c2lvblNoYXBl
SW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hh
cGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPiwgcHVibGljIE1hcHBlZEluZm88UmVuZGVyQm94LCBF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvPiB7Ci1wdWJsaWM6Ci0gICAgTGF5b3V0U2l6ZSBzaGFw
ZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKHNoYXBlTG9naWNhbExl
ZnQoKSwgc2hhcGVMb2dpY2FsVG9wKCkpOyB9Ci0KLSAgICBMYXlvdXRVbml0IGxlZnRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0U2VnbWVudFNoYXBl
Qm91bmRpbmdCb3hEZWx0YTsgfQotICAgIExheW91dFVuaXQgcmlnaHRTZWdtZW50U2hhcGVCb3Vu
ZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5n
Qm94RGVsdGE7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklERTsKLQotICAg
IHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8+IGNyZWF0ZUluZm8o
Y29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8ocmVuZGVyZXIpKTsgfQotICAgIHN0YXRpYyBib29sIGlzRW5hYmxl
ZEZvcihjb25zdCBSZW5kZXJCb3gqKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgTGF5b3V0
UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyhjb25zdCBSZW5kZXJC
b3gqIHJlbmRlcmVyKSA6IEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHls
ZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPihy
ZW5kZXJlcikgeyB9Ci0KLSAgICBMYXlvdXRVbml0IG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5n
Qm94RGVsdGE7Ci0gICAgTGF5b3V0VW5pdCBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hE
ZWx0YTsKLSAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKLX07Ci0KLX0KLSNlbmRpZgotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAppbmRleCAwZjZkOTNjYWI5
NTMyZDQzNzMxYzBkNWFiMjQzMzE1ZGYzNjI1ZjMyLi5kOWViZDY0N2E3ZDk1ODU3ZDI4YTlhZTk5
NmYzZWViMzRjODdmOTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5j
cHAKQEAgLTQwLDcgKzQwLDcgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRl
KiBwcmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRTaXoKICAgICAsIG1fbGlu
ZUdyaWQoMCkKICAgICAsIG1fbmV4dChwcmV2KQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAg
ICwgbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8oMCkKKyAgICAsIG1fc2hhcGVJbnNpZGVJbmZv
KDApCiAjZW5kaWYKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQpA
QCAtMTEzLDkgKzExMyw5IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSog
cHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6CiAjaWYgRU5BQkxFKENT
U19TSEFQRVMpCiAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKICAgICAgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlckJsb2NrID0gdG9SZW5kZXJCbG9jayhyZW5kZXJlcik7
Ci0gICAgICAgIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gcmVuZGVyQmxvY2stPmV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgICAgICBpZiAoIW1fZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvICYmIG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8gJiYgcmVuZGVyQmxv
Y2stPmFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKLSAgICAgICAgICAg
IG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbV9uZXh0LT5tX2V4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbzsKKyAgICAgICAgbV9zaGFwZUluc2lkZUluZm8gPSByZW5kZXJCbG9jay0+c2hhcGVJ
bnNpZGVJbmZvKCk7CisgICAgICAgIGlmICghbV9zaGFwZUluc2lkZUluZm8gJiYgbV9uZXh0LT5t
X3NoYXBlSW5zaWRlSW5mbyAmJiByZW5kZXJCbG9jay0+YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hh
cmluZygpKQorICAgICAgICAgICAgbV9zaGFwZUluc2lkZUluZm8gPSBtX25leHQtPm1fc2hhcGVJ
bnNpZGVJbmZvOwogICAgIH0KICNlbmRpZgogCkBAIC0xNDksNyArMTQ5LDcgQEAgTGF5b3V0U3Rh
dGU6OkxheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKICAgICAsIG1fbGluZUdyaWQoMCkK
ICAgICAsIG1fbmV4dCgwKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICwgbV9leGNsdXNp
b25TaGFwZUluc2lkZUluZm8oMCkKKyAgICAsIG1fc2hhcGVJbnNpZGVJbmZvKDApCiAjZW5kaWYK
ICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCmluZGV4IDc1YzM1M2Q1ZGRhODA4ZjE5YmM4ZmJhZWM0
Njg3M2I1ZWY1NjNhZGEuLmQ3NzQ5YzUyYzYwZDc1NjIwMWE5ODEzOTJlODNiNWI1YzE3MmEwOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCkBAIC0zOSw3ICszOSw3IEBA
IGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlckZsb3dU
aHJlYWQ7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1jbGFzcyBFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm87CitjbGFzcyBTaGFwZUluc2lkZUluZm87CiAjZW5kaWYKIAogY2xhc3MgTGF5b3V0U3Rh
dGUgewpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9saW5lR3JpZCgwKQog
ICAgICAgICAsIG1fbmV4dCgwKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICAsIG1f
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKDApCisgICAgICAgICwgbV9zaGFwZUluc2lkZUluZm8o
MCkKICNlbmRpZgogICAgICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICNpZm5kZWYgTkRF
QlVHCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzQmxvY2tEaXJlY3Rp
b25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUdyaWQgfHwg
KG1faXNQYWdpbmF0ZWQgJiYgbV9wYWdlTG9naWNhbEhlaWdodCk7IH0KIAogI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm87IH0K
KyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhcGVJbnNpZGVJbmZvOyB9CiAjZW5kaWYKIHByaXZhdGU6CiAgICAgLy8gVGhlIG5vcm1hbCBv
cGVyYXRvciBuZXcgaXMgZGlzYWxsb3dlZC4KQEAgLTEyNSw4ICsxMjUsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhlIGN1cnJlbnQgbGluZSBncmlkIHRoYXQgd2UncmUgc25hcHBpbmcgdG8gYW5kIHRo
ZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBncmlkLgogICAgIFJlbmRlckJsb2NrKiBtX2xp
bmVHcmlkOwogICAgIExheW91dFN0YXRlKiBtX25leHQ7Ci0jaWYgRU5BQkxFKENTU19FWENMVVNJ
T05TKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogbV9leGNsdXNpb25TaGFwZUluc2lk
ZUluZm87CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgU2hhcGVJbnNpZGVJbmZvKiBtX3No
YXBlSW5zaWRlSW5mbzsKICNlbmRpZgogCiAgICAgLy8gRklYTUU6IERpc3Rpbmd1aXNoIGJldHdl
ZW4gdGhlIGxheW91dCBjbGlwIHJlY3QgYW5kIHRoZSBwYWludCBjbGlwIHJlY3Qgd2hpY2ggbWF5
IGJlIGxhcmdlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4
IGIwZDE1OWYyZTc0YTA5YjA3OWQ2NzI3ZWQ5ZWMxM2MwZjMwOTQ0MzcuLmZhODAzZTlmNzdjYWFj
OGYwMTAyNWExNGU2NWFiMDM5MzU1MTJkMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcApAQCAtNjcsOCArNjcsOCBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIgotI2luY2x1ZGUgIkV4Y2x1
c2lvblNoYXBlT3V0c2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUluZm8uaCIKKyNp
bmNsdWRlICJTaGFwZU91dHNpZGVJbmZvLmgiCiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvU3RhY2tT
dGF0cy5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KQEAgLTM2Myw5ICszNjMs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9
IHN0eWxlKCk7CiAgICAgCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgLy8gRklYTUU6IEJ1
ZyA4OTk5MzogU3R5bGUgY2hhbmdlcyBzaG91bGQgYWZmZWN0IHRoZSBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm9zIGZvciBvdGhlciByZW5kZXIgYmxvY2tzIHRoYXQKLSAgICAvLyBzaGFyZSB0aGUg
c2FtZSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8KLSAgICB1cGRhdGVFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKG5ld1N0eWxlLT5yZXNvbHZlZFNoYXBlSW5zaWRlKCks
IG9sZFN0eWxlID8gb2xkU3R5bGUtPnJlc29sdmVkU2hhcGVJbnNpZGUoKSA6IDApOworICAgIHVw
ZGF0ZVNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UobmV3U3R5bGUtPnJlc29sdmVkU2hh
cGVJbnNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpIDog
MCk7CiAjZW5kaWYKIAogICAgIGlmICghaXNBbm9ueW1vdXNCbG9jaygpKSB7CkBAIC0xNDQwLDE3
ICsxNDM4LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCiB9CiAKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVJbnNp
ZGUsIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNoYXBlSW5zaWRlKQordm9pZCBSZW5k
ZXJCbG9jazo6dXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBTaGFw
ZVZhbHVlKiBzaGFwZUluc2lkZSwgY29uc3QgU2hhcGVWYWx1ZSogb2xkU2hhcGVJbnNpZGUpCiB7
CiAgICAgLy8gRklYTUU6IEEgZnV0dXJlIG9wdGltaXphdGlvbiB3b3VsZCBkbyBhIGRlZXAgY29t
cGFyaXNvbiBmb3IgZXF1YWxpdHkuCiAgICAgaWYgKHNoYXBlSW5zaWRlID09IG9sZFNoYXBlSW5z
aWRlKQogICAgICAgICByZXR1cm47CiAKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRl
SW5mbzsKICAgICBpZiAoc2hhcGVJbnNpZGUpIHsKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBlbnN1cmVFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5kaXJ0eVNoYXBl
U2l6ZSgpOworICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBlbnN1cmVTaGFwZUluc2lkZUluZm8o
KTsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHNldEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhudWxscHRyKTsKKyAgICAg
ICAgc2V0U2hhcGVJbnNpZGVJbmZvKG51bGxwdHIpOwogICAgICAgICBtYXJrU2hhcGVJbnNpZGVE
ZXNjZW5kYW50c0ZvckxheW91dCgpOwogICAgIH0KIH0KQEAgLTE0NzIsMTYgKzE0NzEsMTYgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bWFya1NoYXBlSW5zaWRlRGVzY2VuZGFudHNGb3JMYXlvdXQoKQog
fQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxh
eW91dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCitzdGF0aWMgaW5saW5lIGJvb2wgc2hhcGVJ
bmZvUmVxdWlyZXNSZWxheW91dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiB7CiAjaWYgIUVO
QUJMRShDU1NfU0hBUEVTKQogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKiBpbmZvID0gYmxvY2stPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
OworICAgIFNoYXBlSW5zaWRlSW5mbyogaW5mbyA9IGJsb2NrLT5zaGFwZUluc2lkZUluZm8oKTsK
ICAgICBpZiAoaW5mbykKICAgICAgICAgaW5mby0+c2V0TmVlZHNMYXlvdXQoaW5mby0+c2hhcGVT
aXplRGlydHkoKSk7CiAgICAgZWxzZQotICAgICAgICBpbmZvID0gYmxvY2stPmxheW91dEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICBpbmZvID0gYmxvY2stPmxheW91dFNoYXBl
SW5zaWRlSW5mbygpOwogICAgIHJldHVybiBpbmZvICYmIGluZm8tPm5lZWRzTGF5b3V0KCk7CiAj
ZW5kaWYKIH0KQEAgLTE0ODksMTEgKzE0ODgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGV4Y2x1
c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKIGJvb2wg
UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQo
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LSAgICBpZiAoIWZsb3dUaHJlYWQgJiYgIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpKQorICAg
IGlmICghZmxvd1RocmVhZCAmJiAhc2hhcGVJbnNpZGVJbmZvKCkpCiAjZWxzZQogICAgIGlmICgh
Zmxvd1RocmVhZCkKICNlbmRpZgotICAgICAgICByZXR1cm4gZXhjbHVzaW9uSW5mb1JlcXVpcmVz
UmVsYXlvdXQodGhpcyk7CisgICAgICAgIHJldHVybiBzaGFwZUluZm9SZXF1aXJlc1JlbGF5b3V0
KHRoaXMpOwogCiAgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CiAg
ICAgTGF5b3V0VW5pdCBvbGRUb3AgPSBsb2dpY2FsVG9wKCk7CkBAIC0xNTA0LDcgKzE1MDMsNyBA
QCBib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0JlZm9yZUNoaWxk
TGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqCiAgICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOwogCiAj
aWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgY29tcHV0ZUV4Y2x1c2lvblNoYXBlU2l6ZSgpOwor
ICAgIGNvbXB1dGVTaGFwZVNpemUoKTsKICNlbmRpZgogCiAgICAgLy8gU2V0IG91ciBzdGFydCBh
bmQgZW5kIHJlZ2lvbnMuIE5vIHJlZ2lvbnMgYWJvdmUgb3IgYmVsb3cgdXMgd2lsbCBiZSBjb25z
aWRlcmVkIGJ5IG91ciBjaGlsZHJlbi4gVGhleSBhcmUKQEAgLTE1MTQsMTYgKzE1MTMsMTYgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExh
eW91dChSZW5kZXJGbG93VGhyZWFkKgogICAgIHNldExvZ2ljYWxIZWlnaHQob2xkSGVpZ2h0KTsK
ICAgICBzZXRMb2dpY2FsVG9wKG9sZFRvcCk7CiAgICAgCi0gICAgcmV0dXJuIGV4Y2x1c2lvbklu
Zm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOworICAgIHJldHVybiBzaGFwZUluZm9SZXF1aXJlc1Jl
bGF5b3V0KHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi12b2lkIFJlbmRlckJs
b2NrOjpjb21wdXRlRXhjbHVzaW9uU2hhcGVTaXplKCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1
dGVTaGFwZVNpemUoKQogewotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAg
aWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hh
cGVJbnNpZGVJbmZvID0gdGhpcy0+c2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5z
aWRlSW5mbykgewogICAgICAgICBib29sIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2YWJs
ZSA9IHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0SXNSZXNvbHZhYmxlRnJvbUJsb2NrKHRoaXMsIGZh
bHNlKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZXRTaGFwZVNpemUobG9n
aWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2YWJsZSA/IGxvZ2ljYWxI
ZWlnaHQoKSA6IExheW91dFVuaXQoKSk7CisgICAgICAgIHNoYXBlSW5zaWRlSW5mby0+c2V0U2hh
cGVTaXplKGxvZ2ljYWxXaWR0aCgpLCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29sdmFibGUg
PyBsb2dpY2FsSGVpZ2h0KCkgOiBMYXlvdXRVbml0KCkpOwogICAgIH0KIH0KICNlbmRpZgpAQCAt
MTUzMiw3ICsxNTMxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1
c2lvbnNBZnRlckNoaWxkTGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqIGYKIHsKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKICAgICAvLyBBIHByZXZpb3VzIHNpYmxpbmcgaGFzIGNoYW5nZWQgZGltZW5z
aW9uLCBzbyB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZSBzaGFwZSB3aXRoIHRoZSBjb250ZW50Ci0g
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRl
SW5mbyA9IGxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAgIGlmIChoZWlnaHRDaGFuZ2VkICYm
IHNoYXBlSW5zaWRlSW5mbykKICAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6
ZSgpOwogI2VuZGlmCkBAIC00MDExLDEwICs0MDEwLDEwIEBAIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykK
ICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBvLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCk7Cisg
ICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gby0+c2hhcGVPdXRzaWRlSW5mbygp
OwogICAgIGlmIChzaGFwZU91dHNpZGUpIHsKICAgICAgICAgc2hhcGVPdXRzaWRlLT5zZXRTaGFw
ZVNpemUoby0+bG9naWNhbFdpZHRoKCksIG8tPmxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIC8v
IFRoZSBDU1MgRXhjbHVzaW9ucyBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCB0aGUgbWFyZ2lucyBh
cmUgaWdub3JlZAorICAgICAgICAvLyBUaGUgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0aW9uIHNheXMg
dGhhdCB0aGUgbWFyZ2lucyBhcmUgaWdub3JlZAogICAgICAgICAvLyB3aGVuIGEgZmxvYXQgaGFz
IGEgc2hhcGUgb3V0c2lkZS4KICAgICAgICAgc2V0TG9naWNhbFdpZHRoRm9yRmxvYXQobmV3T2Jq
LCBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbFdpZHRoKCkpOwogICAgIH0gZWxzZQpAQCAtNDA5
Miw3ICs0MDkxLDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9j
YXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogZmwKICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxSaWdodE9mZnNldDsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBvZmZzZXQuCiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCiAgICAgLy8gRklYTUUgQnVnIDEwMjk0ODogVGhpcyBvbmx5IHdv
cmtzIGZvciBzaGFwZSBvdXRzaWRlIGRpcmVjdGx5IHNldCBvbiB0aGlzIGJsb2NrLgotICAgIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB0aGlz
LT5zaGFwZUluc2lkZUluZm8oKTsKICAgICAvLyBGSVhNRSBCdWcgMTAyODQ2OiBUYWtlIGludG8g
YWNjb3VudCB0aGUgaGVpZ2h0IG9mIHRoZSBjb250ZW50LiBUaGUgb2Zmc2V0IHNob3VsZCBiZQog
ICAgIC8vIGVxdWFsIHRvIHRoZSBtYXhpbXVtIHNlZ21lbnQgbGVuZ3RoLgogICAgIGlmIChzaGFw
ZUluc2lkZUluZm8gJiYgc2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpICYmIHNoYXBlSW5z
aWRlSW5mby0+c2VnbWVudHMoKS5zaXplKCkgPT0gMSkgewpAQCAtNDI0Nyw4ICs0MjQ2LDggQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogCiAgICAgICAgIHNldExvZ2lj
YWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgZmxvYXRMb2dpY2FsTG9jYXRpb24ueSgpKTsK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgaWYgKGNoaWxkQm94LT5leGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvKCkpCi0gICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQo
ZmxvYXRpbmdPYmplY3QsIGNoaWxkQm94LT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCktPnNo
YXBlTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgaWYgKGNoaWxkQm94LT5zaGFwZU91dHNpZGVJ
bmZvKCkpCisgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmpl
Y3QsIGNoaWxkQm94LT5zaGFwZU91dHNpZGVJbmZvKCktPnNoYXBlTG9naWNhbEhlaWdodCgpKTsK
ICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxv
YXQoZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJn
aW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkQm94
KSk7CkBAIC00NDM0LDcgKzQ0MzMsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbgogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0
ID0gYWRhcHRlci5sYXN0RmxvYXQoKTsKICAgICAgICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVP
dXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgIGlmIChF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0RmxvYXQtPnJlbmRl
cmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKSkgeworICAgICAgICAgICAgaWYgKFNo
YXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hh
cGVPdXRzaWRlSW5mbygpKSB7CiAgICAgICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT5jb21wdXRl
U2VnbWVudHNGb3JMaW5lKGxvZ2ljYWxUb3AgLSBsb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0
KSArIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHQpOwogICAg
ICAgICAgICAgICAgIGxlZnQgKz0gc2hhcGVPdXRzaWRlLT5yaWdodFNlZ21lbnRTaGFwZUJvdW5k
aW5nQm94RGVsdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ0OTIsNyArNDQ5MSw3IEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBhZGFwdGVyLmxhc3RGbG9hdCgpOwogICAgICAg
ICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0ICYmIGxhc3RG
bG9hdCkgewotICAgICAgICAgICAgaWYgKEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIHNoYXBl
T3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
bygpKSB7CisgICAgICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0g
bGFzdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKICAgICAgICAgICAg
ICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobG9naWNhbFRvcCAtIGxv
Z2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgc2hhcGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxU
b3AoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgcmlnaHRGbG9hdE9mZnNldCAr
PSBzaGFwZU91dHNpZGUtPmxlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCk7CiAgICAg
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGQzZGNh
M2Y3NTg0MmMwMWM1OGNhY2YxNjFlOTcwNzk5ZmE4Y2FhZGYuLjBhN2Q1OThhYmI0MTAxMjYzOWI4
NGE2ZGE2ODg0Nzg0MzYwOGI1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCkBAIC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
aCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNp
ZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ0NiwyOCArNDQ2LDI4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBlbnN1cmVFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8oKQorICAgIFNoYXBlSW5zaWRlSW5mbyogZW5zdXJlU2hhcGVJ
bnNpZGVJbmZvKCkKICAgICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0
YS0+bV9zaGFwZUluc2lkZUluZm8pCi0gICAgICAgICAgICBzZXRFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8oRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjpjcmVhdGVJbmZvKHRoaXMpKTsKKyAgICAg
ICAgICAgIHNldFNoYXBlSW5zaWRlSW5mbyhTaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8odGhp
cykpOwogICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8uZ2V0KCk7
CiAgICAgfQogCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKSBjb25zdAorICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0YS0+bV9z
aGFwZUluc2lkZUluZm8pCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpID8gbV9yYXJlRGF0YS0+
bV9zaGFwZUluc2lkZUluZm8uZ2V0KCkgOiAwOworICAgICAgICByZXR1cm4gU2hhcGVJbnNpZGVJ
bmZvOjppc0VuYWJsZWRGb3IodGhpcykgPyBtX3JhcmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mby5n
ZXQoKSA6IDA7CiAgICAgfQotICAgIHZvaWQgc2V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKFBh
c3NPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvPiB2YWx1ZSkKKyAgICB2b2lkIHNldFNo
YXBlSW5zaWRlSW5mbyhQYXNzT3duUHRyPFNoYXBlSW5zaWRlSW5mbz4gdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgICAgICBtX3JhcmVEYXRhID0gYWRvcHRQ
dHIobmV3IFJlbmRlckJsb2NrUmFyZURhdGEodGhpcykpOwogICAgICAgICBtX3JhcmVEYXRhLT5t
X3NoYXBlSW5zaWRlSW5mbyA9IHZhbHVlOwogICAgIH0KICAgICB2b2lkIG1hcmtTaGFwZUluc2lk
ZURlc2NlbmRhbnRzRm9yTGF5b3V0KCk7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBs
YXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25zdDsKLSAgICBib29sIGFsbG93c0V4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSBjb25zdCB7IHJldHVybiAhaXNJbmxpbmUo
KSAmJiAhaXNGbG9hdGluZygpOyB9CisgICAgU2hhcGVJbnNpZGVJbmZvKiBsYXlvdXRTaGFwZUlu
c2lkZUluZm8oKSBjb25zdDsKKyAgICBib29sIGFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJpbmco
KSBjb25zdCB7IHJldHVybiAhaXNJbmxpbmUoKSAmJiAhaXNGbG9hdGluZygpOyB9CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgpAQCAtNTg1LDggKzU4NSw4IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICB2b2lkIGNvbXB1dGVFeGNsdXNpb25TaGFwZVNp
emUoKTsKLSAgICB2b2lkIHVwZGF0ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVD
aGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSosIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFs
dWUqIG9sZEV4Y2x1c2lvblNoYXBlKTsKKyAgICB2b2lkIGNvbXB1dGVTaGFwZVNpemUoKTsKKyAg
ICB2b2lkIHVwZGF0ZVNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgU2hhcGVW
YWx1ZSosIGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBlKTsKICNlbmRpZgogICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJl
bigpOyB9CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxD
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KQEAgLTc4OSw3ICs3ODksNyBA
QCBwcml2YXRlOgogICAgIExheW91dFVuaXQgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4oY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdAogICAgIHsKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRz
aWRlID0gY2hpbGQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAg
ICAgICAgU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRlcmVyKCkt
PnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgaWYgKHNoYXBlT3V0c2lkZSkKICAgICAgICAg
ICAgIHJldHVybiBjaGlsZC0+eCgpOwogI2VuZGlmCkBAIC04MDMsNyArODAzLDcgQEAgcHJpdmF0
ZToKICAgICBMYXlvdXRVbml0IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QKICAgICB7CiAjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCi0gICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9IGNo
aWxkLT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCk7CisgICAgICAgIFNo
YXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5zaGFwZU91
dHNpZGVJbmZvKCk7CiAgICAgICAgIGlmIChzaGFwZU91dHNpZGUpCiAgICAgICAgICAgICByZXR1
cm4gY2hpbGQtPnkoKTsKICNlbmRpZgpAQCAtMTA4NCw4ICsxMDg0LDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiwgYm9vbCBoYXNJbmxp
bmVDaGlsZCk7CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0
U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgY2xlYW5M
aW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIHVuc2lnbmVk
IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAg
ICB2b2lkIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yRXhjbHVzaW9ucyhFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8qLCBMYXlvdXRVbml0JiwgTGluZUxheW91dFN0YXRlJiwgYm9vbCYpOwotICAgIGJv
b2wgYWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCwgTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlk
aVJlc29sdmVyJiwgRmxvYXRpbmdPYmplY3QqLCBJbmxpbmVJdGVyYXRvciYsIFdvcmRNZWFzdXJl
bWVudHMmKTsKKyAgICB2b2lkIHVwZGF0ZUxpbmVCb3VuZGFyaWVzRm9yU2hhcGVzKFNoYXBlSW5z
aWRlSW5mbyosIExheW91dFVuaXQmLCBMaW5lTGF5b3V0U3RhdGUmLCBib29sJik7CisgICAgYm9v
bCBhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChTaGFwZUluc2lk
ZUluZm8qLCBMYXlvdXRVbml0LCBMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXIm
LCBGbG9hdGluZ09iamVjdCosIElubGluZUl0ZXJhdG9yJiwgV29yZE1lYXN1cmVtZW50cyYpOwog
I2VuZGlmCiAgICAgY29uc3QgSW5saW5lSXRlcmF0b3ImIHJlc3RhcnRMYXlvdXRSdW5zQW5kRmxv
YXRzSW5SYW5nZShMYXlvdXRVbml0IG9sZExvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbmV3TG9n
aWNhbEhlaWdodCwgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBJ
bmxpbmVCaWRpUmVzb2x2ZXImLCAgY29uc3QgSW5saW5lSXRlcmF0b3ImKTsKICAgICB2b2lkIGxp
bmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmKTsKQEAgLTEyOTIsNyArMTI5Miw3
IEBAIHB1YmxpYzoKIAogICAgICAgICBSb290SW5saW5lQm94KiBtX2xpbmVCcmVha1RvQXZvaWRX
aWRvdzsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgT3duUHRyPEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CisgICAgICAgIE93blB0cjxTaGFwZUlu
c2lkZUluZm8+IG1fc2hhcGVJbnNpZGVJbmZvOwogI2VuZGlmCiAgICAgICAgIGJvb2wgbV9zaG91
bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdyA6IDE7CiAgICAgICAgIGJvb2wgbV9kaXNjYXJkTWFy
Z2luQmVmb3JlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAKaW5kZXggZmQ5YzdjOTQ2NWNkNjYxOWQyZDFmOWRkNzFmMDc2NDdi
NGMxMTM2Yi4uNzA0NTk4ZDIwN2ZmNGNkNTIxOGQzYjQ0YTVkMDA5OTQxYzg2MWNlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
QEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShTVkcpCkBAIC03NywxNiArNzcsMTYgQEAgc3RhdGljIExheW91dFVuaXQgbG9naWNhbEhl
aWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RMaW4KIH0K
IAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBSZW5k
ZXJCbG9jazo6bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKK1NoYXBlSW5z
aWRlSW5mbyogUmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiB7Ci0g
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB2aWV3KCktPmxh
eW91dFN0YXRlKCktPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5zaGFwZUluc2lk
ZUluZm8oKTsKIAotICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYmIGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKSAmJiBhbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpIHsK
KyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbyAmJiBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkg
JiYgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKSB7CiAgICAgICAgIC8vIHJlZ2lvbkF0
QmxvY2tPZmZzZXQgcmV0dXJucyByZWdpb25zIGxpa2UgYW4gYXJyYXkgZmlyc3Q9ezAsTi0xfSwg
c2Vjb25kPXtOLE0tMX0sIC4uLgogICAgICAgICBMYXlvdXRVbml0IG9mZnNldCA9IGxvZ2ljYWxI
ZWlnaHQoKSArIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKHRoaXMsIGZhbHNlKSAtIExheW91dFVuaXQo
MSk7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChv
ZmZzZXQpOwogICAgICAgICBpZiAocmVnaW9uKQotICAgICAgICAgICAgc2hhcGVJbnNpZGVJbmZv
ID0gcmVnaW9uLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgICAgIHNoYXBl
SW5zaWRlSW5mbyA9IHJlZ2lvbi0+c2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHNoYXBlSW5zaWRlSW5mbzsKQEAgLTExNCw5ICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBBU1NFUlQoYmxvY2spOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IG1fYmxv
Y2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgICAgICBpZiAoZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKQotICAgICAgICAgICAgbV9zZWdtZW50ID0gZXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOworICAgICAgICBTaGFwZUluc2lkZUluZm8q
IHNoYXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOworICAg
ICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKQorICAgICAgICAgICAgbV9zZWdtZW50ID0gc2hhcGVJ
bnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOwogI2VuZGlmCiAgICAgICAgIHVwZGF0ZUF2YWls
YWJsZVdpZHRoKCk7CiAgICAgfQpAQCAtMTk2LDIxICsxOTYsMjEgQEAgaW5saW5lIHZvaWQgTGlu
ZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoUmVuZGVyQmxv
Y2s6OkZsb2EKICAgICAvLyB3aGVuIHdlIGFkZCBhIHN1YnNlcXVlbnQgZmxvYXQgb24gdGhlIHNh
bWUgbGluZSwgd2UgbmVlZCB0byB1bmRvIHRoZSBzaGFwZSBkZWx0YSBpbiBvcmRlciB0byBwb3Np
dGlvbgogICAgIC8vIGJhc2VkIG9uIHRoZSBib3VuZGluZyBib3guIEluIG9yZGVyIHRvIGRvIHRo
aXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0
IHRvIGZpbmQKICAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUg
c2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZv
KiBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CisgICAgU2hhcGVPdXRzaWRlSW5mbyogbGFzdFNo
YXBlT3V0c2lkZUluZm8gPSAwOwogICAgIGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CiAgICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yICgtLWl0
OyBpdCAhPSBiZWdpbjsgLS1pdCkgewogICAgICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3QqIGxhc3RGbG9hdCA9ICppdDsKICAgICAgICAgaWYgKGxhc3RGbG9hdCAhPSBuZXdGbG9hdCAm
JiBsYXN0RmxvYXQtPnR5cGUoKSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBs
YXN0U2hhcGVPdXRzaWRlSW5mbyA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbygpOworICAgICAgICAgICAgbGFzdFNoYXBlT3V0c2lkZUluZm8gPSBsYXN0
RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgICAgIGlmIChs
YXN0U2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgICAgICBsYXN0U2hhcGVPdXRzaWRlSW5m
by0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkgLSBtX2Js
b2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSArIGxhc3RTaGFwZU91dHNpZGVJbmZv
LT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0Zp
cnN0TGluZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJl
bmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAgICBTaGFwZU91dHNpZGVJ
bmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lk
ZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgc2hhcGVPdXRzaWRl
SW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkgLSBt
X2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpICsgc2hhcGVPdXRzaWRlSW5mby0+
c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKG1fYmxvY2ssIG1faXNGaXJz
dExpbmUpKTsKICNlbmRpZgpAQCAtMTAzNSwxMCArMTAzNSwxMCBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBs
aW5lQm94LAogICAgIHVwZGF0ZUxvZ2ljYWxJbmxpbmVQb3NpdGlvbnModGhpcywgbGluZUxvZ2lj
YWxMZWZ0LCBsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGlzRmlyc3RM
aW5lLCBzaG91bGRJbmRlbnRUZXh0LCAwKTsKICAgICBib29sIG5lZWRzV29yZFNwYWNpbmc7CiAj
aWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNs
dXNpb25TaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsK
LSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJ
bmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAm
JiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAgICAgICAgQmlkaVJ1biogc2Vn
bWVudFN0YXJ0ID0gZmlyc3RSdW47Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50
cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsKKyAgICAgICAgY29uc3Qg
U2VnbWVudExpc3QmIHNlZ21lbnRzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOwogICAg
ICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1heDxmbG9hdD4ocm91bmRUb0ludChzZWdtZW50c1sw
XS5sb2dpY2FsTGVmdCksIGxpbmVMb2dpY2FsTGVmdCk7CiAgICAgICAgIGZsb2F0IGxvZ2ljYWxS
aWdodCA9IG1pbjxmbG9hdD4oZmxvb3JUb0ludChzZWdtZW50c1swXS5sb2dpY2FsUmlnaHQpLCBs
aW5lTG9naWNhbFJpZ2h0KTsKICAgICAgICAgZmxvYXQgc3RhcnRMb2dpY2FsTGVmdCA9IGxvZ2lj
YWxMZWZ0OwpAQCAtMTM1OSwxMyArMTM1OSwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3Ry
dWN0QmlkaVJ1bnNGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgSW5saW5lQmlkaQog
ICAgIFVOVVNFRF9QQVJBTShibG9jayk7CiAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50
KHRvcFJlc29sdmVyLCBiaWRpUnVucywgZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5KTsKICNlbHNlCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNs
dXNpb25TaGFwZUluc2lkZUluZm8gPSBibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCk7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgIWV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hh
cGVJbnNpZGVJbmZvID0gYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOworICAgIGlmICgh
c2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAg
ICAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KHRvcFJlc29sdmVyLCBiaWRpUnVucywg
ZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5n
ZXMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5nZXMoKTsKKyAgICBjb25z
dCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdt
ZW50UmFuZ2VzKCk7CiAgICAgQVNTRVJUKHNlZ21lbnRSYW5nZXMuc2l6ZSgpKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudFJhbmdlcy5zaXplKCk7IGkrKykgewpAQCAtMTYz
MSwyNiArMTYzMSwyNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGZpcnN0UG9zaXRpdmVXaWR0aChj
b25zdCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogICAgIHJldHVybiAwOwog
fQogCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0TG9naWNhbExpbmVUb3AoRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIElubGluZUl0ZXJh
dG9yIHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdv
cmRNZWFzdXJlbWVudHMpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0TG9naWNhbExp
bmVUb3AoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8sIElubGluZUl0ZXJhdG9yIHN0
YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFz
dXJlbWVudHMpCiB7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgZW5kICE9
IHN0YXJ0KQorICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8IGVuZCAhPSBzdGFydCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBmbG9hdCBtaW5XaWR0aCA9IGZpcnN0UG9zaXRpdmVXaWR0aCh3
b3JkTWVhc3VyZW1lbnRzKTsKICAgICBBU1NFUlQobWluV2lkdGggfHwgd29yZE1lYXN1cmVtZW50
cy5pc0VtcHR5KCkpOwotICAgIGlmIChtaW5XaWR0aCA+IDAgJiYgZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLT5hZGp1c3RMb2dpY2FsTGluZVRvcChtaW5XaWR0aCkpCi0gICAgICAgIHJldHVybiBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxvZ2ljYWxMaW5lVG9wKCk7CisgICAgaWYgKG1pbldp
ZHRoID4gMCAmJiBzaGFwZUluc2lkZUluZm8tPmFkanVzdExvZ2ljYWxMaW5lVG9wKG1pbldpZHRo
KSkKKyAgICAgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVUb3AoKTsKIAot
ICAgIHJldHVybiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbEJvdHRvbSgp
OworICAgIHJldHVybiBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbEJvdHRvbSgpOwogfQog
Ci12b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIExheW91dFVu
aXQmIGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgYm9v
bCYgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0
ZUxpbmVCb3VuZGFyaWVzRm9yU2hhcGVzKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZv
LCBMYXlvdXRVbml0JiBhYnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGJvb2wmIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUpCiB7CiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0ID0gdGhpcy0+bG9naWNhbEhlaWdodCgpOwogICAgIFJlbmRlclJl
Z2lvbiogY3VycmVudFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNhbEhlaWdodCk7
CiAgICAgaWYgKGN1cnJlbnRSZWdpb24pCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmICghZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKQorICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBsYXlvdXRTaGFwZUlu
c2lkZUluZm8oKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgTGF5b3V0VW5pdCBsaW5lVG9wID0gbG9naWNhbEhlaWdodCArIGFic29sdXRlTG9naWNh
bFRvcDsKQEAgLTE2NTgsMTggKzE2NTgsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlTGlu
ZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXgKIAog
ICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpIHsKICAgICAgICAgUmVuZGVyUmVnaW9u
KiBuZXh0UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChsb2dpY2FsSGVpZ2h0ICsgbGluZUhl
aWdodCAtIExheW91dFVuaXQoMSkpOwotICAgICAgICBsaW5lVG9wICs9IGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworICAgICAgICBs
aW5lVG9wICs9IHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9y
ZSgpOwogICAgICAgICAvLyBDb250ZW50IGluIGEgZmxvdyB0aHJlYWQgaXMgcmVsYXRpdmUgdG8g
dGhlIGJlZ2lubmluZyBvZiB0aGUgdGhyZWFkLCBidXQgdGhlIHNoYXBlIGNhbGN1bGF0aW9uIHNo
b3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByZWdpb24uCiAgICAgICAgIGlmIChjdXJy
ZW50UmVnaW9uID09IG5leHRSZWdpb24pCiAgICAgICAgICAgICBsaW5lVG9wIC09IGN1cnJlbnRS
ZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpOwogICAgIH0KIAogICAgIC8v
IEZJWE1FOiBCdWcgOTUzNjE6IEl0IGlzIHBvc3NpYmxlIGZvciBhIGxpbmUgdG8gZ3JvdyBiZXlv
bmQgbGluZUhlaWdodCwgaW4gd2hpY2ggY2FzZSB0aGVzZSBzZWdtZW50cyBtYXkgYmUgaW5jb3Jy
ZWN0LgotICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGlu
ZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKKyAgICBzaGFwZUluc2lkZUluZm8tPmNvbXB1dGVTZWdt
ZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CiAKICAgICAvLyBUaGUgb3ZlcmZsb3cg
c2hvdWxkIGJlIHB1c2hlZCBiZWxvdyB0aGUgY29udGVudCBib3gKLSAgICBMYXlvdXRVbml0IHNo
YXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zaGFw
ZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpOwotICAgIGlmICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSAmJiAhbGluZU92ZXJmbG93c0Zyb21TaGFwZUlu
c2lkZSAmJiBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCkgeworICAgIExheW91dFVuaXQgc2hh
cGVDb250YWluaW5nQmxvY2tIZWlnaHQgPSBzaGFwZUluc2lkZUluZm8tPnNoYXBlQ29udGFpbmlu
Z0Jsb2NrSGVpZ2h0KCk7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8tPmxpbmVXaXRoaW5TaGFw
ZUJvdW5kcygpICYmICFsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlICYmIHNoYXBlQ29udGFp
bmluZ0Jsb2NrSGVpZ2h0KSB7CiAgICAgICAgIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUg
PSB0cnVlOwogICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQgPSBzaGFwZUNvbnRh
aW5pbmdCbG9ja0hlaWdodDsKIApAQCAtMTY4MSw5ICsxNjgxLDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyogZXgKICAgICAgICAgICAgIG5ld0xvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0ICsg
c2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgLSBsaW5lVG9wIC0gY3VycmVudFJlZ2lvbi0+Ym9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogCiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIG5leHRS
ZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG5ld0xvZ2ljYWxIZWlnaHQpOwotICAgICAgICAg
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBuZXh0U2hhcGVJbmZvID0gMDsKKyAgICAgICAg
ICAgIFNoYXBlSW5zaWRlSW5mbyogbmV4dFNoYXBlSW5mbyA9IDA7CiAgICAgICAgICAgICBpZiAo
bmV4dFJlZ2lvbikKLSAgICAgICAgICAgICAgICBuZXh0U2hhcGVJbmZvID0gbmV4dFJlZ2lvbi0+
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgICAgICAgICAgbmV4dFNoYXBlSW5m
byA9IG5leHRSZWdpb24tPnNoYXBlSW5zaWRlSW5mbygpOwogCiAgICAgICAgICAgICAvLyBUaGUg
b3ZlcmZsb3cgZmxvd3MgaW50byBhbm90aGVyIHJlZ2lvbiB3aXRoIHNoYXBlLWluc2lkZQogICAg
ICAgICAgICAgaWYgKGN1cnJlbnRSZWdpb24gIT0gbmV4dFJlZ2lvbiAmJiBuZXh0U2hhcGVJbmZv
KSB7CkBAIC0xNjkyLDcgKzE2OTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91
bmRhcmllc0ZvckV4Y2x1c2lvbnMoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleAogICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbmV4dFNoYXBlSW5mby0+c2hhcGVMb2dpY2Fs
VG9wKCkgLSBuZXh0UmVnaW9uLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgICAg
ICAgICAgbmV4dFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShvZmZzZXQsIGxpbmVI
ZWlnaHQpOwogCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbmV4
dFNoYXBlSW5mbzsKKyAgICAgICAgICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBuZXh0U2hhcGVJ
bmZvOwogICAgICAgICAgICAgICAgIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUgPSBmYWxz
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcwMCw5ICsxNzAwLDkgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JFeGNsdXNpb25zKEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyogZXgKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmFkanVzdExv
Z2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBMYXlvdXRVbml0IGFic29sdXRlTG9naWNh
bFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIElubGlu
ZUl0ZXJhdG9yJiBlbmQsIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCitib29s
IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRl
ZChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywgTGF5b3V0VW5pdCBhYnNvbHV0ZUxv
Z2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2ZXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBJ
bmxpbmVJdGVyYXRvciYgZW5kLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQog
ewotICAgIExheW91dFVuaXQgYWRqdXN0ZWRMb2dpY2FsTGluZVRvcCA9IGFkanVzdExvZ2ljYWxM
aW5lVG9wKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgcmVzb2x2ZXIucG9zaXRpb24oKSwgZW5k
LCB3b3JkTWVhc3VyZW1lbnRzKTsKKyAgICBMYXlvdXRVbml0IGFkanVzdGVkTG9naWNhbExpbmVU
b3AgPSBhZGp1c3RMb2dpY2FsTGluZVRvcChzaGFwZUluc2lkZUluZm8sIHJlc29sdmVyLnBvc2l0
aW9uKCksIGVuZCwgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgaWYgKCFhZGp1c3RlZExvZ2ljYWxM
aW5lVG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3MjksMTkgKzE3MjksMTkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIExh
eW91dFVuaXQgYWJzb2x1dGVMb2dpY2FsVG9wOwotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykgewotICAgICAgICBBU1NF
UlQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKTsKLSAgICAgICAgaWYgKGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSkgeworICAg
IFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZv
KCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbykgeworICAgICAgICBBU1NFUlQoc2hhcGVJbnNp
ZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygp
KTsKKyAgICAgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5zaGFwZUluc2lkZUluZm8o
KSkgewogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMDI4NDogSWYgc3Vic2VxdWVudCBMYXlv
dXRTdGF0ZXMgYXJlIHB1c2hlZCwgd2Ugd2lsbCBoYXZlIHRvIGFkZAogICAgICAgICAgICAgLy8g
dGhlaXIgb2Zmc2V0cyBmcm9tIHRoZSBvcmlnaW5hbCBzaGFwZS1pbnNpZGUgY29udGFpbmVyLgog
ICAgICAgICAgICAgYWJzb2x1dGVMb2dpY2FsVG9wID0gbG9naWNhbFRvcCgpOwogICAgICAgICB9
CiAgICAgICAgIC8vIEJlZ2luIGxheW91dCBhdCB0aGUgbG9naWNhbCB0b3Agb2Ygb3VyIHNoYXBl
IGluc2lkZS4KLSAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQoKSArIGFic29sdXRlTG9naWNhbFRv
cCA8IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkpIHsKLSAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by0+c2hhcGVMb2dpY2FsVG9wKCkgLSBhYnNvbHV0ZUxvZ2ljYWxUb3A7CisgICAgICAgIGlmIChs
b2dpY2FsSGVpZ2h0KCkgKyBhYnNvbHV0ZUxvZ2ljYWxUb3AgPCBzaGFwZUluc2lkZUluZm8tPnNo
YXBlTG9naWNhbFRvcCgpKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQg
PSBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpIC0gYWJzb2x1dGVMb2dpY2FsVG9w
OwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkKLSAgICAgICAgICAg
ICAgICBsb2dpY2FsSGVpZ2h0IC09IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQg
LT0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAg
ICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTc2OSw3ICsxNzY5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0Fu
ZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAoY29udGFpbnNG
bG9hdHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpIDogMDsKIAogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotICAgICAgICB1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lv
bnMoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGxheW91dFN0
YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKTsKKyAgICAgICAgdXBkYXRlTGluZUJv
dW5kYXJpZXNGb3JTaGFwZXMoc2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGxh
eW91dFN0YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKTsKICNlbmRpZgogICAgICAg
ICBXb3JkTWVhc3VyZW1lbnRzIHdvcmRNZWFzdXJlbWVudHM7CiAgICAgICAgIGVuZCA9IGxpbmVC
cmVha2VyLm5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGxheW91dFN0YXRlLmxpbmVJbmZvKCksIHJl
bmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CkBAIC0xNzg1LDcgKzE3ODUsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBJbmxpbgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LSAgICAgICAgaWYgKGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVk
KGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dpY2FsVG9wLCBsYXlvdXRTdGF0
ZSwgcmVzb2x2ZXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGVuZCwgd29yZE1lYXN1cmVt
ZW50cykpCisgICAgICAgIGlmIChhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJ
Zk5lZWRlZChzaGFwZUluc2lkZUluZm8sIGFic29sdXRlTG9naWNhbFRvcCwgbGF5b3V0U3RhdGUs
IHJlc29sdmVyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBlbmQsIHdvcmRNZWFzdXJlbWVu
dHMpKQogICAgICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICAgICAgQVNTRVJUKGVuZCAh
PSByZXNvbHZlci5wb3NpdGlvbigpKTsKQEAgLTI3MzgsMjkgKzI3MzgsMjkgQEAgSW5saW5lSXRl
cmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2wKICNpZiAhRU5BQkxFKENTU19TSEFQRVMpCiAgICAgcmV0dXJuIG5leHRT
ZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0
RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJl
bWVudHMpOwogI2Vsc2UKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
OworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0
U2hhcGVJbnNpZGVJbmZvKCk7CiAKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyB8
fCAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5saW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQor
ICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8tPmxpbmVPdmVybGFw
c1NoYXBlQm91bmRzKCkpCiAgICAgICAgIHJldHVybiBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVy
LCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNv
bnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKIAogICAgIC8vIElu
IGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlIHdlIGhhdmUgdG8gdXNlIGxpbmVPdmVybGFwc1No
YXBlQm91bmRzKCkgdG8gZGV0ZXJtaW5lIHRoZSBsaW5lIHNlZ21lbnRzIHNpbmNlIHNoYXBlLW91
dHNpZGUncyBjb2RlcGF0aHMgdXNlcyB0aGUgc2FtZSBjb2RlIHRvIGRldGVybWluZSBpdHMgc2Vn
bWVudHMuIFRoZSBsaW5lIGNvbnRhaW5pbmcgaXMgbm90IGEgcmVxdWlyZW1lbnQgZm9yIHNoYXBl
LW91dHNpZGUsCiAgICAgLy8gc28gaW4gdGhpcyBjYXNlIHdlIGNhbiBlbmQgdXAgd2l0aCBzb21l
IGV4dHJhIHNlZ21lbnRzIGZvciB0aGUgb3ZlcmZsb3dpbmcgY29udGVudCwgYnV0IHdlIGRvbid0
IHdhbnQgdG8gYXBwbHkgdGhlIHNlZ21lbnRzIGZvciB0aGUgb3ZlcmZsb3dpbmcgY29udGVudCwg
c28gd2UgbmVlZCB0byByZXNldCBpdC4KLSAgICBpZiAoIW1fYmxvY2stPmZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKSAmJiAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5saW5lV2l0aGluU2hh
cGVCb3VuZHMoKSkgewotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNsZWFyU2Vn
bWVudHMoKTsKKyAgICBpZiAoIW1fYmxvY2stPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSAm
JiAhc2hhcGVJbnNpZGVJbmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSkgeworICAgICAgICBz
aGFwZUluc2lkZUluZm8tPmNsZWFyU2VnbWVudHMoKTsKICAgICAgICAgcmV0dXJuIG5leHRTZWdt
ZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJlbWVu
dHMpOwogICAgIH0KIAogICAgIElubGluZUl0ZXJhdG9yIGVuZCA9IHJlc29sdmVyLnBvc2l0aW9u
KCk7CiAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOwogCi0gICAgaWYgKCFleGNsdXNp
b25TaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKKyAgICBpZiAoIXNoYXBlSW5zaWRl
SW5mby0+aGFzU2VnbWVudHMoKSkgewogICAgICAgICBlbmQgPSBuZXh0U2VnbWVudEJyZWFrKHJl
c29sdmVyLCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKICAgICAg
ICAgcmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKG9sZEVuZCk7CiAg
ICAgICAgIHJldHVybiBvbGRFbmQ7CiAgICAgfQogCi0gICAgY29uc3QgU2VnbWVudExpc3QmIHNl
Z21lbnRzID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOwotICAgIFNlZ21l
bnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNl
Z21lbnRSYW5nZXMoKTsKKyAgICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMgPSBzaGFwZUlu
c2lkZUluZm8tPnNlZ21lbnRzKCk7CisgICAgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdl
cyA9IHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNlZ21lbnRzLnNpemUoKSAmJiAhZW5kLmF0RW5kKCk7IGkrKykgewogICAg
ICAgICBJbmxpbmVJdGVyYXRvciBzZWdtZW50U3RhcnQgPSByZXNvbHZlci5wb3NpdGlvbigpOwpA
QCAtMzM5OCw3ICszMzk4LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVh
a2VyOjpuZXh0U2VnbWVudEJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmUKIAogIGVuZDoKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIHNoYXBl
SW5mbyA9IG1fYmxvY2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNo
YXBlSW5zaWRlSW5mbyogc2hhcGVJbmZvID0gbV9ibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZv
KCk7CiAgICAgYm9vbCBzZWdtZW50QWxsb3dzT3ZlcmZsb3cgPSAhc2hhcGVJbmZvIHx8ICFzaGFw
ZUluZm8tPmhhc1NlZ21lbnRzKCk7CiAjZWxzZQogICAgIGJvb2wgc2VnbWVudEFsbG93c092ZXJm
bG93ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMTE0
ZGY1YjBiMjYyNzkyZjFiOTNkNzY5NDkxOWFiNTZhMmYyNTExZS4uMjdjNDZlZjAxNDBjMjc0NTNm
YzZjNjY2NjE2ODBhNGFlMjViYjE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFJlbmRlckJveDo6d2lsbEJlRGVzdHJveWVk
KCkKICAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnRJZk5lZWRl
ZCh0aGlzKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CisgICAgU2hhcGVPdXRzaWRlSW5mbzo6cmVtb3Zl
SW5mbyh0aGlzKTsKICNlbmRpZgogCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OndpbGxCZURl
c3Ryb3llZCgpOwpAQCAtMzE1LDIyICszMTUsMjIgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUK
ICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICB1cGRhdGVFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShzdHlsZSgpLT5zaGFwZU91dHNpZGUoKSwgb2xk
U3R5bGUgPyBvbGRTdHlsZS0+c2hhcGVPdXRzaWRlKCkgOiAwKTsKKyAgICB1cGRhdGVTaGFwZU91
dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShzdHlsZSgpLT5zaGFwZU91dHNpZGUoKSwgb2xkU3R5
bGUgPyBvbGRTdHlsZS0+c2hhcGVPdXRzaWRlKCkgOiAwKTsKICNlbmRpZgogfQogCiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCi12b2lkIFJlbmRlckJveDo6dXBkYXRlRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVP
dXRzaWRlLCBjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUpCit2b2lk
IFJlbmRlckJveDo6dXBkYXRlU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3Qg
U2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNp
ZGUpCiB7CiAgICAgLy8gRklYTUU6IEEgZnV0dXJlIG9wdGltaXphdGlvbiB3b3VsZCBkbyBhIGRl
ZXAgY29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuIChidWcgMTAwODExKQogICAgIGlmIChzaGFwZU91
dHNpZGUgPT0gb2xkU2hhcGVPdXRzaWRlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hh
cGVPdXRzaWRlKSB7Ci0gICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIGV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8gPSBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjplbnN1cmVJbmZv
KHRoaXMpOwotICAgICAgICBleGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6
ZSgpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gU2hhcGVP
dXRzaWRlSW5mbzo6ZW5zdXJlSW5mbyh0aGlzKTsKKyAgICAgICAgc2hhcGVPdXRzaWRlSW5mby0+
ZGlydHlTaGFwZVNpemUoKTsKICAgICB9IGVsc2UKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKKyAgICAgICAgU2hhcGVPdXRzaWRlSW5mbzo6cmVt
b3ZlSW5mbyh0aGlzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKaW5kZXggOWFiZjZiNDgwYWY3ZTM4ZjZhODdiZDQ0NWMwYTczOTBjNDA0MDdmOC4uYTdmYzFl
Y2VjZmQzYzgwNjFjYTFiNmRmMGMwM2Q3NGM5OGI2NjkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlck92ZXJmbG93
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNp
bmNsdWRlICJFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVPdXRz
aWRlSW5mby5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3Nyw5ICs1Nzcs
OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTYW1lRGlyZWN0aW9uQXMoY29uc3QgUmVuZGVyQm94
KiBvYmplY3QpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigpID09IG9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCk7IH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKSBjb25z
dAorICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8oKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIGlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYgRXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpID8gRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mbzo6aW5mbyh0aGlzKSA6IDA7CisgICAgICAgIHJldHVybiBpc0Zsb2F0aW5nV2l0aFNo
YXBlT3V0c2lkZSgpICYmIFNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcih0aGlzKSA/IFNo
YXBlT3V0c2lkZUluZm86OmluZm8odGhpcykgOiAwOwogICAgIH0KICNlbmRpZgogCkBAIC02MjQs
NyArNjI0LDcgQEAgcHJvdGVjdGVkOgogIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKLSAgICB2b2lkIHVwZGF0ZUV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hh
bmdlKGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwgY29uc3QgRXhjbHVz
aW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXBlT3V0
c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwg
Y29uc3QgU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKTsKICNlbmRpZgogCiAgICAgYm9vbCBm
aXhlZEVsZW1lbnRMYXlzT3V0UmVsYXRpdmVUb0ZyYW1lKEZyYW1lKiwgRnJhbWVWaWV3KikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAppbmRleCA2MWJiMWM2MzcwYzA5YzhlZDZlYTU1ZmQxZTJhNDY0MjI1ZjcyMzk1Li5hYmFk
NWI3MmEzOTQyN2EzMDQ4ZTUxYmY0OWFmY2ZhNTNmMDQxZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTYyNyw3ICs2Mjcs
NyBAQCBMYXlvdXRTaXplIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE9mZnNldCgpIGNvbnN0
CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBpZiAoaXNCb3goKSAmJiBpc0Zsb2F0aW5n
KCkpCi0gICAgICAgIGlmIChFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUg
PSB0b1JlbmRlckJveCh0aGlzKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKQorICAgICAg
ICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gdG9SZW5kZXJCb3godGhpcykt
PnNoYXBlT3V0c2lkZUluZm8oKSkKICAgICAgICAgICAgIG9mZnNldCAtPSBzaGFwZU91dHNpZGUt
PnNoYXBlTG9naWNhbE9mZnNldCgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCmluZGV4IDg4YTA4Yjg4YTM1NmRkNzk3NDBlNmFkYWQ3OTM1MzVlZTIxZWQ5NjUu
LmFlNTQzNGZjNTk3ZThhNGJmZDY5MDRjMzQxM2IwNmJiYzU2ZDZkZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMjQ5LDggKzI0OSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IG1fbGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVk
KCkgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKSB8fCByZW5kZXJlci0+Zmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpCiAgICAgICAgICAgICB8fCBtX2xheW91dFN0YXRlLT5saW5lR3JpZCgpIHx8
IChyZW5kZXJlci0+c3R5bGUoKS0+bGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVHcmlkKCkgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkpCiAjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCi0gICAgICAgICAgICB8fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRl
ckJsb2NrKHJlbmRlcmVyKS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkpCi0gICAgICAgICAg
ICB8fCAobV9sYXlvdXRTdGF0ZS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgJiYgcmVuZGVy
ZXItPmlzUmVuZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmFsbG93c0V4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKKyAgICAgICAgICAgIHx8IChyZW5kZXJl
ci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5zaGFwZUluc2lk
ZUluZm8oKSkKKyAgICAgICAgICAgIHx8IChtX2xheW91dFN0YXRlLT5zaGFwZUluc2lkZUluZm8o
KSAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICF0b1JlbmRlckJsb2NrKHJlbmRlcmVy
KS0+YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQogI2VuZGlmCiAgICAgICAgICAgICAp
IHsKICAgICAgICAgICAgIHB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKHJlbmRl
cmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdv
blNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMjEyNGZkNTYwNzMzNTYzYjRhMGM4NzhhMzg2ZmQ0NDBjYTUyODMx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5
Z29uU2hhcGUuY3BwCkBAIC0wLDAgKzEsNTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsK
KyAgICBOb3JtYWwsCisgICAgVmVydGV4TWluWSwKKyAgICBWZXJ0ZXhNYXhZLAorICAgIFZlcnRl
eFlCb3RoCit9OworCitzdHJ1Y3QgRWRnZUludGVyc2VjdGlvbiB7CisgICAgY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSogZWRnZTsKKyAgICBGbG9hdFBvaW50IHBvaW50OworICAgIEVkZ2VJbnRlcnNl
Y3Rpb25UeXBlIHR5cGU7Cit9OworCitzdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0
IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiAoKHBvaW50LngoKSAtIHZlcnRleDEueCgp
KSAqICh2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkgLSAoKHZlcnRleDIueCgpIC0gdmVydGV4
MS54KCkpICogKHBvaW50LnkoKSAtIHZlcnRleDEueSgpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1JlZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCit7CisgICAg
cmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAwOworfQor
CitzdGF0aWMgYm9vbCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdl
KiBlZGdlUG9pbnRlciwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQoreworICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CisKKyAgICBpZiAo
ZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOworICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKKyAgICBmbG9hdCBk
eSA9IHZlcnRleDIueSgpIC0gdmVydGV4MS55KCk7CisKKyAgICBmbG9hdCBpbnRlcnNlY3Rpb25Y
OworICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7CisKKyAgICBpZiAo
IWR5KSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKKyAgICAgICAg
aW50ZXJzZWN0aW9uWCA9IGVkZ2UubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1p
blkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKKyAgICAgICAg
aW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgp
IDogdmVydGV4Mi54KCk7CisgICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7CisgICAg
ICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNYXhZOworICAgICAgICBpbnRlcnNlY3Rpb25Y
ID0gKHZlcnRleDEueSgpID4gdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOworICAg
ICAgICBpbnRlcnNlY3Rpb25YID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0g
dmVydGV4MS54KCkpIC8gZHkpICsgdmVydGV4MS54KCk7CisgICAgfQorCisgICAgcmVzdWx0LmVk
Z2UgPSBlZGdlUG9pbnRlcjsKKyAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7Cisg
ICAgcmVzdWx0LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBpbndhcmRFZGdlTm9ybWFsKGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UmIGVkZ2UpCit7CisgICAgRmxvYXRTaXplIGVkZ2VEZWx0YSA9IGVkZ2Uu
dmVydGV4MigpIC0gZWRnZS52ZXJ0ZXgxKCk7CisgICAgaWYgKCFlZGdlRGVsdGEud2lkdGgoKSkK
KyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgoZWRnZURlbHRhLmhlaWdodCgpID4gMCA/IC0xIDog
MSksIDApOworICAgIGlmICghZWRnZURlbHRhLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gRmxv
YXRTaXplKDAsIChlZGdlRGVsdGEud2lkdGgoKSA+IDAgPyAxIDogLTEpKTsKKyAgICBmbG9hdCBl
ZGdlTGVuZ3RoID0gZWRnZURlbHRhLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgcmV0dXJuIEZsb2F0
U2l6ZSgtZWRnZURlbHRhLmhlaWdodCgpIC8gZWRnZUxlbmd0aCwgZWRnZURlbHRhLndpZHRoKCkg
LyBlZGdlTGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFNpemUgb3V0d2FyZEVkZ2VO
b3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKK3sKKyAgICByZXR1cm4gLWlud2Fy
ZEVkZ2VOb3JtYWwoZWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBcmMoVmVj
dG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNlcywgY29uc3QgRmxvYXRQb2ludCYgYXJjQ2VudGVyLCBm
bG9hdCBhcmNSYWRpdXMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0QXJjVmVydGV4LCBjb25zdCBG
bG9hdFBvaW50JiBlbmRBcmNWZXJ0ZXgsIGJvb2wgcGFkZGluZykKK3sKKyAgICBmbG9hdCBzdGFy
dEFuZ2xlID0gYXRhbjIoc3RhcnRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgc3RhcnRB
cmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7CisgICAgZmxvYXQgZW5kQW5nbGUgPSBhdGFu
MihlbmRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgZW5kQXJjVmVydGV4LngoKSAtIGFy
Y0NlbnRlci54KCkpOworICAgIGNvbnN0IGZsb2F0IHR3b1BJID0gcGlGbG9hdCAqIDI7CisgICAg
aWYgKHN0YXJ0QW5nbGUgPCAwKQorICAgICAgICBzdGFydEFuZ2xlICs9IHR3b1BJOworICAgIGlm
IChlbmRBbmdsZSA8IDApCisgICAgICAgIGVuZEFuZ2xlICs9IHR3b1BJOworICAgIGZsb2F0IGFu
Z2xlID0gKHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSA6
IChzdGFydEFuZ2xlICsgdHdvUEkgLSBlbmRBbmdsZSk7CisgICAgY29uc3QgZmxvYXQgYXJjU2Vn
bWVudENvdW50ID0gNjsgLy8gQW4gZXZlbiBudW1iZXIgc28gdGhhdCBvbmUgYXJjIHZlcnRleCB3
aWxsIGJlIGVhY3RseSBhcmNSYWRpdXMgZnJvbSBhcmNDZW50ZXIuCisgICAgZmxvYXQgYXJjU2Vn
bWVudEFuZ2xlID0gICgocGFkZGluZykgPyAtYW5nbGUgOiB0d29QSSAtIGFuZ2xlKSAvIGFyY1Nl
Z21lbnRDb3VudDsKKworICAgIHZlcnRpY2VzLmFwcGVuZChzdGFydEFyY1ZlcnRleCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyY1NlZ21lbnRDb3VudDsgKytpKSB7CisgICAgICAg
IGZsb2F0IGFuZ2xlID0gc3RhcnRBbmdsZSArIGFyY1NlZ21lbnRBbmdsZSAqIGk7CisgICAgICAg
IHZlcnRpY2VzLmFwcGVuZChhcmNDZW50ZXIgKyBGbG9hdFBvaW50KGNvcyhhbmdsZSkgKiBhcmNS
YWRpdXMsIHNpbihhbmdsZSkgKiBhcmNSYWRpdXMpKTsKKyAgICB9CisgICAgdmVydGljZXMuYXBw
ZW5kKGVuZEFyY1ZlcnRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmFwVmVydGljZXNU
b0xheW91dFVuaXRHcmlkKFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnRpY2VzLnNpemUoKTsgKytpKQorICAgICAgICB2ZXJ0
aWNlc1tpXS5zZXQoTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS54KCkpLnRvRmxvYXQoKSwgTGF5b3V0
VW5pdCh2ZXJ0aWNlc1tpXS55KCkpLnRvRmxvYXQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUGFz
c093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMoY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBwYWRkaW5nLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sK
KyAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gcGFkZGVkVmVydGljZXMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkpOworICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9u
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygp
OyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5
Z29uLmVkZ2VBdChpKTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2Ug
PSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsKKyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhp
c09mZnNldEVkZ2UodGhpc0VkZ2UsIGlud2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogcGFkZGlu
Zyk7CisgICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBp
bndhcmRFZGdlTm9ybWFsKHByZXZFZGdlKSAqIHBhZGRpbmcpOworCisgICAgICAgIGlmIChwcmV2
T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCisg
ICAgICAgICAgICBwYWRkZWRWZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgICAg
IGVsc2UgaWYgKGlzUmVmbGV4VmVydGV4KHByZXZFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2UudmVy
dGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgyKCkpKQorICAgICAgICAgICAgYXBwZW5kQXJjKCpwYWRk
ZWRWZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgpLCBwYWRkaW5nLCBwcmV2T2Zmc2V0RWRnZS52
ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgdHJ1ZSk7CisgICAgfQorCisgICAg
c25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgqcGFkZGVkVmVydGljZXMpOworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKHBhZGRlZFZlcnRpY2VzLnJlbGVhc2UoKSwgZmls
bFJ1bGUpKTsKK30KKworc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29t
cHV0ZVNoYXBlTWFyZ2luQm91bmRzKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQg
bWFyZ2luLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9p
bnQ+ID4gbWFyZ2luVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkp
OworICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9uOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxv
YXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKKyAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsK
KyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIG91dHdh
cmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIG1hcmdpbik7CisgICAgICAgIE9mZnNldFBvbHlnb25F
ZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBvdXR3YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkg
KiBtYXJnaW4pOworCisgICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhp
c09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCisgICAgICAgICAgICBtYXJnaW5WZXJ0aWNlcy0+
YXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZEFy
YygqbWFyZ2luVmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgbWFyZ2luLCBwcmV2T2Zmc2V0
RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZlcnRleDEoKSwgZmFsc2UpOworICAgIH0K
KworICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKm1hcmdpblZlcnRpY2VzKTsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbihtYXJnaW5WZXJ0aWNlcy5yZWxlYXNl
KCksIGZpbGxSdWxlKSk7Cit9CisKK2NvbnN0IEZsb2F0UG9seWdvbiYgUG9seWdvblNoYXBlOjpz
aGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAoreworICAgIEFTU0VSVChzaGFwZVBhZGRpbmcoKSA+
PSAwKTsKKyAgICBpZiAoIXNoYXBlUGFkZGluZygpKQorICAgICAgICByZXR1cm4gbV9wb2x5Z29u
OworCisgICAgaWYgKCFtX3BhZGRpbmdCb3VuZHMpCisgICAgICAgIG1fcGFkZGluZ0JvdW5kcyA9
IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMobV9wb2x5Z29uLCBzaGFwZVBhZGRpbmcoKSwgbV9w
b2x5Z29uLmZpbGxSdWxlKCkpOworCisgICAgcmV0dXJuICptX3BhZGRpbmdCb3VuZHM7Cit9CisK
K2NvbnN0IEZsb2F0UG9seWdvbiYgUG9seWdvblNoYXBlOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHNoYXBlTWFyZ2luKCkgPj0gMCk7CisgICAgaWYgKCFzaGFwZU1h
cmdpbigpKQorICAgICAgICByZXR1cm4gbV9wb2x5Z29uOworCisgICAgaWYgKCFtX21hcmdpbkJv
dW5kcykKKyAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMo
bV9wb2x5Z29uLCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7CisKKyAgICBy
ZXR1cm4gKm1fbWFyZ2luQm91bmRzOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZ2V0VmVydGV4
SW50ZXJzZWN0aW9uVmVydGljZXMoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9u
LCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBGbG9hdFBvaW50JiB0aGlzVmVydGV4LCBGbG9hdFBv
aW50JiBuZXh0VmVydGV4KQoreworICAgIGlmIChpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhN
aW5ZICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1heFkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEFTU0VSVChpbnRlcnNlY3Rpb24uZWRnZSAmJiBpbnRlcnNlY3Rpb24uZWRn
ZS0+cG9seWdvbigpKTsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSAqKGludGVy
c2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRo
aXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7CisKKyAgICBpZiAoKGludGVyc2VjdGlvbi50
eXBlID09IFZlcnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPCB0aGlzRWRnZS52
ZXJ0ZXgyKCkueSgpKSkKKyAgICAgICAgfHwgKGludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1h
eFkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpKSkp
IHsKKyAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UucHJldmlv
dXNFZGdlKCkudmVydGV4SW5kZXgxKCkpOworICAgICAgICB0aGlzVmVydGV4ID0gcG9seWdvbi52
ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAgIG5leHRWZXJ0ZXggPSBw
b2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MigpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRl
eDEoKSk7CisgICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZl
cnRleEluZGV4MigpKTsKKyAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhp
c0VkZ2UubmV4dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcHBlbmRJbnRlcnZhbFgoZmxvYXQgeCwgYm9v
bCBpbnNpZGUsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcmVzdWx0KQoreworICAgIGlmICghaW5z
aWRlKQorICAgICAgICByZXN1bHQuYXBwZW5kKFNoYXBlSW50ZXJ2YWwoeCkpOworICAgIGVsc2UK
KyAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54MiA9IHg7CisKKyAgICByZXR1cm4g
IWluc2lkZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKGNvbnN0
IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24m
IGludGVyc2VjdGlvbjIpCit7CisgICAgZmxvYXQgeDEgPSBpbnRlcnNlY3Rpb24xLnBvaW50Lngo
KTsKKyAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIucG9pbnQueCgpOworICAgIHJldHVybiAo
eDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwgaW50ZXJzZWN0aW9uMi50eXBlIDogeDEg
PCB4MjsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGNvbnN0IEZsb2F0
UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxTaGFwZUludGVy
dmFsPiYgcmVzdWx0KQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRn
ZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRnZXMpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9u
czsKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGNvbXB1dGVYSW50
ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2VjdGlvbi50eXBl
ICE9IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBlbmQoaW50ZXJz
ZWN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdpbigpLCBpbnRl
cnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOworCisg
ICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGludCB3aW5kQ291bnQgPSAwOworICAgIGJvb2wg
aW5zaWRlID0gZmFsc2U7CisKKyAgICB3aGlsZSAoaW5kZXggPCBpbnRlcnNlY3Rpb25zLnNpemUo
KSkgeworICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiB0aGlzSW50ZXJzZWN0aW9uID0g
aW50ZXJzZWN0aW9uc1tpbmRleF07CisgICAgICAgIGlmIChpbmRleCArIDEgPCBpbnRlcnNlY3Rp
b25zLnNpemUoKSkgeworICAgICAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgbmV4dElu
dGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXggKyAxXTsKKyAgICAgICAgICAgIGlmICgo
dGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCkgPT0gbmV4dEludGVyc2VjdGlvbi5wb2ludC54KCkp
ICYmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSB8fCB0aGlzSW50ZXJzZWN0
aW9uLnR5cGUgPT0gVmVydGV4TWF4WSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpc0ludGVy
c2VjdGlvbi50eXBlID09IG5leHRJbnRlcnNlY3Rpb24udHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBTa2lwIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJlIFZlcnRl
eE1heFksVmVydGV4TWF4WSBhbmQgVmVydGV4TWluWSxWZXJ0ZXhNaW5ZLgorICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFJlcGxhY2UgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBh
cmUgVmVydGV4TWluWSxWZXJ0ZXhNYXhZIG9yIFZlcnRleE1heFksVmVydGV4TWluWSB3aXRoIG9u
ZSBpbnRlcnNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0lu
dGVyc2VjdGlvbi5lZGdlOworICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9ICF3aW5kQ291
bnQ7CisKKyAgICAgICAgaWYgKHBvbHlnb24uZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsK
KyAgICAgICAgICAgIHdpbmRDb3VudCArPSAodGhpc0VkZ2UudmVydGV4MigpLnkoKSA+IHRoaXNF
ZGdlLnZlcnRleDEoKS55KCkpID8gMSA6IC0xOworICAgICAgICAgICAgZXZlbk9kZENyb3NzaW5n
ID0gZXZlbk9kZENyb3NzaW5nIHx8ICF3aW5kQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZXZlbk9kZENyb3NzaW5nKSB7CisgICAgICAgICAgICBib29sIGVkZ2VDcm9zc2luZyA9IHRo
aXNJbnRlcnNlY3Rpb24udHlwZSA9PSBOb3JtYWw7CisgICAgICAgICAgICBpZiAoIWVkZ2VDcm9z
c2luZykgeworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleDsKKyAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50IHRoaXNWZXJ0ZXg7CisgICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCBuZXh0VmVydGV4OworCisgICAgICAgICAgICAgICAgaWYgKGdldFZlcnRleEludGVyc2VjdGlv
blZlcnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZWZXJ0ZXgsIHRoaXNWZXJ0ZXgsIG5leHRW
ZXJ0ZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4LnkoKSA9PSB5KQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWluWSkgPyBwcmV2VmVy
dGV4LnkoKSA+IHkgOiBwcmV2VmVydGV4LnkoKSA8IHk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHByZXZWZXJ0ZXgueSgpID09IHkpCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdl
Q3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IG5leHRWZXJ0ZXgueSgpID4geSA6IG5leHRWZXJ0ZXgueSgp
IDwgeTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWRnZUNyb3NzaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZWRnZUNyb3NzaW5nKQorICAgICAgICAgICAgICAgIGluc2lkZSA9IGFw
cGVuZEludGVydmFsWCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSwgaW5zaWRlLCByZXN1bHQp
OworICAgICAgICB9CisKKyAgICAgICAgKytpbmRleDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcmVzdWx0
KQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYg
KCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBlZGdlcykpCisgICAgICAgIHJldHVy
bjsKKworICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGbG9hdFBv
bHlnb25FZGdlICplZGdlID0gZWRnZXNbaV07CisgICAgICAgIGZsb2F0IHgxOworICAgICAgICBm
bG9hdCB4MjsKKworICAgICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEpIHsKKyAgICAgICAgICAg
IGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAg
ICAgeDEgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHgxID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPCBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVk
Z2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisgICAgICAgIGlmIChl
ZGdlLT5tYXhZKCkgPiB5MikgeworICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRn
ZSwgeTIsIGludGVyc2VjdGlvbik7CisgICAgICAgICAgICB4MiA9IGludGVyc2VjdGlvbi5wb2lu
dC54KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeDIgPSAoZWRnZS0+dmVydGV4MSgp
LnkoKSA+IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2Ut
PnZlcnRleDIoKS54KCk7CisKKyAgICAgICAgaWYgKHgxID4geDIpCisgICAgICAgICAgICBzdGQ6
OnN3YXAoeDEsIHgyKTsKKworICAgICAgICBpZiAoeDIgPiB4MSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoU2hhcGVJbnRlcnZhbCh4MSwgeDIpKTsKKyAgICB9CisKKyAgICBzb3J0U2hhcGVJ
bnRlcnZhbHMocmVzdWx0KTsKK30KKwordm9pZCBQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50
ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBT
ZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9s
eWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7CisgICAgaWYgKHBvbHlnb24uaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQg
eTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKKworICAgIFZlY3RvcjxTaGFwZUludGVy
dmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21wdXRlWEludGVyc2VjdGlv
bnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNl
Y3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxT
aGFwZUludGVydmFsPiBtZXJnZWRJbnRlcnZhbHM7CisgICAgbWVyZ2VTaGFwZUludGVydmFscyh5
MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKKworICAgIFZlY3Rv
cjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVPdmVybGFwcGluZ0Vk
Z2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKKworICAgIFZl
Y3RvcjxTaGFwZUludGVydmFsPiBleGNsdWRlZEludGVydmFsczsKKyAgICBtZXJnZVNoYXBlSW50
ZXJ2YWxzKG1lcmdlZEludGVydmFscywgZWRnZUludGVydmFscywgZXhjbHVkZWRJbnRlcnZhbHMp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWwgPSBleGNsdWRlZEludGVy
dmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwg
aW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK3ZvaWQgUG9seWdvblNoYXBlOjpnZXRJbmNsdWRl
ZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFBvbHlnb24m
IHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAocG9seWdvbi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBm
bG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgVmVjdG9yPFNoYXBl
SW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOworCisgICAgVmVj
dG9yPFNoYXBlSW50ZXJ2YWw+IGNvbW1vbkludGVydmFsczsKKyAgICBpbnRlcnNlY3RTaGFwZUlu
dGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgY29tbW9uSW50ZXJ2YWxzKTsKKwor
ICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVPdmVy
bGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsK
KworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBpbmNsdWRlZEludGVydmFsczsKKyAgICBzdWJ0
cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5jbHVk
ZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluY2x1ZGVkSW50
ZXJ2YWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWwgPSBp
bmNsdWRlZEludGVydmFsc1tpXTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChp
bnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEsIHVuc2lnbmVkIG9m
ZnNldEVkZ2VJbmRleDIpCit7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBl
ZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhyZWN0LnkoKSwgcmVjdC5t
YXhZKCksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5
Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOworICAgICAgICBpZiAoZWRnZS0+ZWRnZUluZGV4KCkg
IT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5k
ZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChyZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFi
b3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwgY29uc3QgRmxvYXRSZWN0JiByMikK
K3sKKyAgICBpZiAocjEueSgpIDwgcjIueSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAocjEueSgpID09IHIyLnkoKSkKKyAgICAgICAgcmV0dXJuIHIxLngoKSA8IHIyLngoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUG9seWdvblNoYXBlOjpmaXJzdEluY2x1ZGVkSW50
ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBM
YXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNv
bnN0Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7
CisgICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhl
aWdodCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplLndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZVBh
ZGRpbmdCb3VuZHMoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBwb2x5Z29u
LmJvdW5kaW5nQm94KCk7CisgICAgaWYgKG1pbkludGVydmFsV2lkdGggPiBib3VuZGluZ0JveC53
aWR0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBtaW5ZID0gc3RkOjpt
YXgoYm91bmRpbmdCb3gueSgpLCBtaW5JbnRlcnZhbFRvcCk7CisgICAgZmxvYXQgbWF4WSA9IG1p
blkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKworICAgIGlmIChtYXhZID4gYm91bmRpbmdCb3gubWF4
WSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5
Z29uRWRnZSo+IGVkZ2VzOworICAgIHBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhtaW5JbnRlcnZh
bFRvcCwgYm91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7CisKKyAgICBmbG9hdCBkeCA9IG1pbklu
dGVydmFsV2lkdGggLyAyOworICAgIGZsb2F0IGR5ID0gbWluSW50ZXJ2YWxIZWlnaHQgLyAyOwor
ICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZXM7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxv
YXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOworICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXgxKCk7CisgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKKyAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOworICAgICAgICBWZWN0b3I8T2Zm
c2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VCdWZmZXI7CisKKyAgICAgICAgaWYgKHZlcnRleDIu
eSgpID4gdmVydGV4MS55KCkgPyB2ZXJ0ZXgyLngoKSA+PSB2ZXJ0ZXgxLngoKSA6IHZlcnRleDEu
eCgpID49IHZlcnRleDIueCgpKSB7CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVu
ZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgsIC1keSkpKTsKKyAgICAgICAg
ICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0
U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb2Zmc2V0RWRn
ZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKGR4LCBkeSkp
KTsKKyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIC1keSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c1JlZmxleFZlcnRleCh2ZXJ0ZXgwLCB2ZXJ0ZXgxLCB2ZXJ0ZXgyKSkgeworICAgICAgICAgICAg
aWYgKHZlcnRleDIueCgpIDw9IHZlcnRleDEueCgpICYmIHZlcnRleDAueCgpIDw9IHZlcnRleDEu
eCgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZShkeCwgLWR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueCgpID49IHZlcnRleDEueCgpICYmIHZlcnRl
eDAueCgpID49IHZlcnRleDEueCgpKQorICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIu
YXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZs
b2F0U2l6ZSgtZHgsIGR5KSkpOworICAgICAgICAgICAgaWYgKHZlcnRleDIueSgpIDw9IHZlcnRl
eDEueSgpICYmIHZlcnRleDAueSgpIDw9IHZlcnRleDEueSgpKQorICAgICAgICAgICAgICAgIG9m
ZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6
ZSgtZHgsIGR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZl
cnRleDIueSgpID49IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpID49IHZlcnRleDEueSgpKQor
ICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0U2l6ZShkeCwgLWR5KSkpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG9mZnNldEVkZ2VCdWZm
ZXIuc2l6ZSgpOyArK2opCisgICAgICAgICAgICBpZiAob2Zmc2V0RWRnZUJ1ZmZlcltqXS5tYXhZ
KCkgPj0gbWluWSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdlcy5hcHBlbmQob2Zmc2V0RWRn
ZUJ1ZmZlcltqXSk7CisgICAgfQorCisgICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHBvbHlnb24sIG1pbkludGVydmFsVG9wLCBGbG9hdFNpemUoMCwgZHkpKSk7CisKKyAg
ICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uOworICAgIEZsb2F0UmVjdCBmaXJz
dEZpdFJlY3Q7CisgICAgYm9vbCBmaXJzdEZpdEZvdW5kID0gZmFsc2U7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlc1tpXS5pbnRlcnNlY3Rpb24ob2Zmc2V0RWRnZXNb
al0sIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKSkgeworICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbihvZmZzZXRFZGdlc0ludGVyc2VjdGlvbi54KCkg
LSBkeCwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueSgpIC0gZHkpOworICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QocG90ZW50aWFsRmlyc3RGaXRMb2NhdGlv
biwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKChvZmZzZXRF
ZGdlc1tpXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCisgICAgICAgICAg
ICAgICAgICAgIHx8IG9mZnNldEVkZ2VzW2pdLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6
OkxpbmVUb3AKKyAgICAgICAgICAgICAgICAgICAgfHwgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlv
bi55KCkgPj0gbWluSW50ZXJ2YWxUb3ApCisgICAgICAgICAgICAgICAgICAgICYmICghZmlyc3RG
aXRGb3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgZmlyc3RG
aXRSZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgcG9seWdvbi5jb250YWlucyhvZmZzZXRF
ZGdlc0ludGVyc2VjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRSZWN0SW5Q
b2x5Z29uKHBvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRnZXNbaV0uZWRn
ZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkgeworICAgICAgICAgICAgICAg
ICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRS
ZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmaXJzdEZpdEZvdW5kKQorICAgICAg
ICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGZpcnN0Rml0UmVjdC55KCkpOworICAgIHJldHVy
biBmaXJzdEZpdEZvdW5kOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Mjhh
YzNhZGQwNjU2ZDY3M2IxMjdkNjg4OGJmMGU4NjAyYjYxODBjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaApAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICog
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgUG9seWdvblNoYXBlX2gKKyNkZWZpbmUgUG9seWdvblNo
YXBlX2gKKworI2luY2x1ZGUgIkZsb2F0UG9seWdvbi5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisj
aW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IE9mZnNldFBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBhaXIgeworcHVibGljOgorICAgIGVu
dW0gQmFzaXMgeworICAgICAgICBFZGdlLAorICAgICAgICBWZXJ0ZXgsCisgICAgICAgIExpbmVU
b3AKKyAgICB9OworCisgICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSYgZWRnZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAgICAgIDogbV92ZXJ0ZXgxKGVk
Z2UudmVydGV4MSgpICsgb2Zmc2V0KQorICAgICAgICAsIG1fdmVydGV4MihlZGdlLnZlcnRleDIo
KSArIG9mZnNldCkKKyAgICAgICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRleCgpKQorICAg
ICAgICAsIG1fYmFzaXMoRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgT2Zmc2V0UG9seWdvbkVk
Z2UoY29uc3QgRmxvYXRQb2ludCYgcmVmbGV4VmVydGV4LCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dDEsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MikKKyAgICAgICAgOiBtX3ZlcnRleDEocmVmbGV4
VmVydGV4ICsgb2Zmc2V0MSkKKyAgICAgICAgLCBtX3ZlcnRleDIocmVmbGV4VmVydGV4ICsgb2Zm
c2V0MikKKyAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKKyAgICAgICAgLCBtX2Jhc2lzKFZlcnRl
eCkKKyAgICB7CisgICAgfQorCisgICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5
Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0KQorICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHlnb24uYm91bmRp
bmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCisgICAgICAgICwg
bV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLm1heFgoKSwgbWluTG9n
aWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAgICAgLCBtX2VkZ2VJbmRleCgtMSkKKyAg
ICAgICAgLCBtX2Jhc2lzKExpbmVUb3ApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGV4
MTsgfQorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdmVydGV4MjsgfQorICAgIGludCBlZGdlSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2VkZ2VJbmRleDsgfQorICAgIEJhc2lzIGJhc2lzKCkgY29uc3QgeyByZXR1cm4gbV9i
YXNpczsgfQorCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgxOworICAgIEZsb2F0
UG9pbnQgbV92ZXJ0ZXgyOworICAgIGludCBtX2VkZ2VJbmRleDsKKyAgICBCYXNpcyBtX2Jhc2lz
OworfTsKKworY2xhc3MgUG9seWdvblNoYXBlIDogcHVibGljIFNoYXBlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQb2x5Z29uU2hhcGUpOworcHVibGljOgorICAgIFBvbHlnb25TaGFwZShQ
YXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVs
ZSkKKyAgICAgICAgOiBTaGFwZSgpCisgICAgICAgICwgbV9wb2x5Z29uKHZlcnRpY2VzLCBmaWxs
UnVsZSkKKyAgICAgICAgLCBtX21hcmdpbkJvdW5kcyhudWxscHRyKQorICAgICAgICAsIG1fcGFk
ZGluZ0JvdW5kcyhudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIExheW91dFJl
Y3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpLmJvdW5kaW5nQm94
KCkpOyB9CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGlu
Z0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNo
YXBlUGFkZGluZ0JvdW5kcygpLmJvdW5kaW5nQm94KCkpOyB9CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BvbHlnb24uaXNFbXB0eSgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChM
YXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9n
aWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRl
OgorICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdDsKKyAg
ICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0OworCisgICAg
RmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKKyAgICBtdXRhYmxlIE93blB0cjxGbG9hdFBvbHlnb24+
IG1fbWFyZ2luQm91bmRzOworICAgIG11dGFibGUgT3duUHRyPEZsb2F0UG9seWdvbj4gbV9wYWRk
aW5nQm91bmRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUG9s
eWdvblNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
UmVjdGFuZ2xlU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0
YW5nbGVTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUyN2ZjZmE3MmFmM2M5MzAwNTVlNTkzYjlmNTRj
NzQ3YTQxNzBhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlY3RhbmdsZVNoYXBlLmgiCisKKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUg
ZmxvYXQgZWxsaXBzZVhJbnRlcmNlcHQoZmxvYXQgeSwgZmxvYXQgcngsIGZsb2F0IHJ5KQorewor
ICAgIEFTU0VSVChyeSA+IDApOworICAgIHJldHVybiByeCAqIHNxcnQoMSAtICh5ICogeSkgLyAo
cnkgKiByeSkpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VZSW50ZXJjZXB0KGZs
b2F0IHgsIGZsb2F0IHJ4LCBmbG9hdCByeSkKK3sKKyAgICBBU1NFUlQocnggPiAwKTsKKyAgICBy
ZXR1cm4gcnkgKiBzcXJ0KDEgLSAoeCAqIHgpIC8gKHJ4ICogcngpKTsKK30KKworRmxvYXRSb3Vu
ZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0OjpwYWRkaW5nQm91bmRzKGZsb2F0IHBhZGRpbmcpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHBhZGRpbmcgPj0gMCk7CisgICAgaWYgKCFwYWRkaW5nIHx8IGlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgZmxvYXQgYm91bmRzWCA9IHgo
KSArIHN0ZDo6bWluKHdpZHRoKCkgLyAyLCBwYWRkaW5nKTsKKyAgICBmbG9hdCBib3VuZHNZID0g
eSgpICsgc3RkOjptaW4oaGVpZ2h0KCkgLyAyLCBwYWRkaW5nKTsKKyAgICBmbG9hdCBib3VuZHNX
aWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgLSBwYWRkaW5nICogMik7CisgICAgZmxvYXQg
Ym91bmRzSGVpZ2h0ID0gc3RkOjptYXgoMC4wZiwgaGVpZ2h0KCkgLSBwYWRkaW5nICogMik7Cisg
ICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHN0ZDo6bWF4KDAuMGYsIHJ4KCkgLSBwYWRkaW5nKTsK
KyAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gc3RkOjptYXgoMC4wZiwgcnkoKSAtIHBhZGRpbmcp
OworICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZ
LCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwgRmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJv
dW5kc1JhZGl1c1kpKTsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBGbG9hdFJvdW5kZWRSZWN0Ojpt
YXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdAoreworICAgIEFTU0VSVChtYXJnaW4gPj0g
MCk7CisgICAgaWYgKCFtYXJnaW4pCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGZsb2F0
IGJvdW5kc1ggPSB4KCkgLSBtYXJnaW47CisgICAgZmxvYXQgYm91bmRzWSA9IHkoKSAtIG1hcmdp
bjsKKyAgICBmbG9hdCBib3VuZHNXaWR0aCA9IHdpZHRoKCkgKyBtYXJnaW4gKiAyOworICAgIGZs
b2F0IGJvdW5kc0hlaWdodCA9IGhlaWdodCgpICsgbWFyZ2luICogMjsKKyAgICBmbG9hdCBib3Vu
ZHNSYWRpdXNYID0gcngoKSArIG1hcmdpbjsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNZID0gcnko
KSArIG1hcmdpbjsKKyAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJlY3QoYm91bmRz
WCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6ZShib3VuZHNS
YWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Cit9CisKK0Zsb2F0UG9pbnQgRmxvYXRSb3VuZGVkUmVj
dDo6Y29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lkdGhBdEludGVyY2VwdCkgY29uc3QK
K3sKKyAgICBmbG9hdCB4aSA9ICh3aWR0aCgpIC0gd2lkdGhBdEludGVyY2VwdCkgLyAyOworICAg
IGZsb2F0IHlpID0gcnkoKSAtIGVsbGlwc2VZSW50ZXJjZXB0KHJ4KCkgLSB4aSwgcngoKSwgcnko
KSk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoeGksIHlpKTsKK30KKworRmxvYXRSb3VuZGVkUmVj
dCBSZWN0YW5nbGVTaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcykgeworICAgICAgICBtX2hhdmVJbml0aWFs
aXplZFBhZGRpbmdCb3VuZHMgPSB0cnVlOworICAgICAgICBtX3BhZGRpbmdCb3VuZHMgPSBtX2Jv
dW5kcy5wYWRkaW5nQm91bmRzKHNoYXBlUGFkZGluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIG1f
cGFkZGluZ0JvdW5kczsKK30KKworRmxvYXRSb3VuZGVkUmVjdCBSZWN0YW5nbGVTaGFwZTo6c2hh
cGVNYXJnaW5Cb3VuZHMoKSBjb25zdAoreworICAgIGlmICghbV9oYXZlSW5pdGlhbGl6ZWRNYXJn
aW5Cb3VuZHMpIHsKKyAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMgPSB0cnVl
OworICAgICAgICBtX21hcmdpbkJvdW5kcyA9IG1fYm91bmRzLm1hcmdpbkJvdW5kcyhzaGFwZU1h
cmdpbigpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbWFyZ2luQm91bmRzOworfQorCit2b2lkIFJl
Y3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sK
KyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZU1hcmdpbkJvdW5kcygp
OworICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9h
dCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodDsKKworICAgIGlmICh5MiA8IGJvdW5kcy55KCkgfHwgeTEgPj0gYm91bmRzLm1heFkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeDEgPSBib3VuZHMueCgpOworICAgIGZsb2F0
IHgyID0gYm91bmRzLm1heFgoKTsKKworICAgIGlmIChib3VuZHMucnkoKSA+IDApIHsKKyAgICAg
ICAgaWYgKHkyIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpKSB7CisgICAgICAgICAgICBmbG9h
dCB5aSA9IHkyIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOworICAgICAgICAgICAgZmxvYXQg
eGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAg
ICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7CisgICAgICAgICAg
ICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOworICAgICAgICB9IGVsc2Ug
aWYgKHkxID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKSB7CisgICAgICAgICAgICBmbG9h
dCB5aSA9ICB5MSAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOworICAgICAgICAgICAg
ZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgp
KTsKKyAgICAgICAgICAgIHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7CisgICAg
ICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKK30KKwor
dm9pZCBSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNv
bnN0Cit7CisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5n
Qm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBs
b2dpY2FsSGVpZ2h0OworCisgICAgaWYgKHkxIDwgYm91bmRzLnkoKSB8fCB5MiA+IGJvdW5kcy5t
YXhZKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHgxID0gYm91bmRzLngoKTsKKyAg
ICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7CisKKyAgICBpZiAoYm91bmRzLnJ5KCkgPiAwKSB7
CisgICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29ybmVyID0geTEgPCBib3VuZHMueSgpICsgYm91
bmRzLnJ5KCk7CisgICAgICAgIGJvb2wgeTJJbnRlcmNlcHRzQ29ybmVyID0geTIgPiBib3VuZHMu
bWF4WSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgIGZsb2F0IHhpID0gMDsKKworICAgICAgICBp
ZiAoeTFJbnRlcmNlcHRzQ29ybmVyICYmIHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAg
ICAgaWYgICh5MSA8IGJvdW5kcy5oZWlnaHQoKSArIDIgKiBib3VuZHMueSgpIC0geTIpIHsKKyAg
ICAgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwor
ICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBi
b3VuZHMucnkoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsb2F0
IHlpID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSk7CisgICAgICAgICAgICAg
ICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHNDb3JuZXIpIHsK
KyAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7Cisg
ICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRz
LnJ5KCkpOworICAgICAgICB9IGVsc2UgaWYgKHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAg
ICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKKyAg
ICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMu
cnkoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyIHx8IHky
SW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRz
LnJ4KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgp
ICsgeGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50
KHgxLCB4MikpOworfQorCitib29sIFJlY3RhbmdsZVNoYXBlOjpmaXJzdEluY2x1ZGVkSW50ZXJ2
YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlv
dXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7Cisg
ICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhlaWdo
dCgpOworICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXpl
LndpZHRoKCk7CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZVBh
ZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSB8fCBtaW5JbnRlcnZhbFdp
ZHRoID4gYm91bmRzLndpZHRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0
IG1pblkgPSBzdGQ6Om1heChib3VuZHMueSgpLCBtaW5JbnRlcnZhbFRvcCk7CisgICAgZmxvYXQg
bWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKKworICAgIGlmIChtYXhZID4gYm91bmRz
Lm1heFkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpbnRlcnZhbE92ZXJs
YXBzTWluQ29ybmVyID0gbWluWSA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKTsKKyAgICBib29s
IGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgPSBtYXhZID4gYm91bmRzLm1heFkoKSAtIGJvdW5k
cy5yeSgpOworCisgICAgaWYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyICYmICFpbnRlcnZh
bE92ZXJsYXBzTWF4Q29ybmVyKSB7CisgICAgICAgIHJlc3VsdCA9IG1pblk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91
bmRzLmhlaWdodCgpIC8gMjsKKyAgICBib29sIG1pbkNvcm5lckRlZmluZXNYID0gZmFicyhjZW50
ZXJZIC0gbWluWSkgPiBmYWJzKGNlbnRlclkgLSBtYXhZKTsKKyAgICBib29sIGludGVydmFsRml0
c1dpdGhpbkNvcm5lcnMgPSBtaW5JbnRlcnZhbFdpZHRoICsgMiAqIGJvdW5kcy5yeCgpIDw9IGJv
dW5kcy53aWR0aCgpOworICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0ID0gYm91bmRzLmNv
cm5lckludGVyY2VwdEZvcldpZHRoKG1pbkludGVydmFsV2lkdGgpOworCisgICAgaWYgKGludGVy
dmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyIHx8IG1p
bkNvcm5lckRlZmluZXNYKSkgeworICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVy
cyB8fCBib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSA8IG1pblkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IG1pblk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobWluSW50ZXJ2YWxIZWlnaHQgPCBib3VuZHMuaGVpZ2h0KCkgLSAoMiAqIGNv
cm5lckludGVyY2VwdC55KCkpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBjZWlsZWRMYXlvdXRV
bml0KGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGludGVydmFsT3ZlcmxhcHNNYXhD
b3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyIHx8ICFtaW5Db3JuZXJEZWZpbmVz
WCkpIHsKKyAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgbWluWSA8PSAg
Ym91bmRzLm1heFkoKSAtIGNvcm5lckludGVyY2VwdC55KCkgLSBtaW5JbnRlcnZhbEhlaWdodCkg
eworICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jl
Y3RhbmdsZVNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3Rhbmds
ZVNoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTllY2YwNTA0YmI5OTNjOTExMDM5MDYzNDkzNDVlZTQyOTQ0
NmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
UmVjdGFuZ2xlU2hhcGUuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWN0YW5n
bGVTaGFwZV9oCisjZGVmaW5lIFJlY3RhbmdsZVNoYXBlX2gKKworI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNp
bmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0Um91bmRl
ZFJlY3QgOiBwdWJsaWMgRmxvYXRSZWN0IHsKK3B1YmxpYzoKKyAgICBGbG9hdFJvdW5kZWRSZWN0
KCkgeyB9CisgICAgRmxvYXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29u
c3QgRmxvYXRTaXplJiByYWRpaSkKKyAgICAgICAgOiBGbG9hdFJlY3QoYm91bmRzKQorICAgICAg
ICAsIG1fcmFkaWkocmFkaWkpCisgICAgeworICAgIH0KKworICAgIGZsb2F0IHJ4KCkgY29uc3Qg
eyByZXR1cm4gbV9yYWRpaS53aWR0aCgpOyB9CisgICAgZmxvYXQgcnkoKSBjb25zdCB7IHJldHVy
biBtX3JhZGlpLmhlaWdodCgpOyB9CisgICAgRmxvYXRSb3VuZGVkUmVjdCBtYXJnaW5Cb3VuZHMo
ZmxvYXQgbWFyZ2luKSBjb25zdDsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHBhZGRpbmdCb3VuZHMo
ZmxvYXQgcGFkZGluZykgY29uc3Q7CisgICAgRmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHRGb3JX
aWR0aChmbG9hdCB3aWR0aCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRmxvYXRTaXplIG1fcmFk
aWk7Cit9OworCitjbGFzcyBSZWN0YW5nbGVTaGFwZSA6IHB1YmxpYyBTaGFwZSB7CitwdWJsaWM6
CisgICAgUmVjdGFuZ2xlU2hhcGUoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0
U2l6ZSYgcmFkaWkpCisgICAgICAgIDogU2hhcGUoKQorICAgICAgICAsIG1fYm91bmRzKGJvdW5k
cywgcmFkaWkpCisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMoZmFsc2Up
CisgICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKGZhbHNlKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRp
bmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0Pihz
aGFwZU1hcmdpbkJvdW5kcygpKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRp
bmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxU
b3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3Ao
TGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxv
Z2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3Q7CisgICAg
RmxvYXRSb3VuZGVkUmVjdCBzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdDsKKworICAgIEZsb2F0
Um91bmRlZFJlY3QgbV9ib3VuZHM7CisgICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRSZWN0IG1fbWFy
Z2luQm91bmRzOworICAgIG11dGFibGUgRmxvYXRSb3VuZGVkUmVjdCBtX3BhZGRpbmdCb3VuZHM7
CisgICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzIDogMTsKKyAg
ICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzIDogMTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlY3RhbmdsZVNoYXBlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc5MjBj
YzllNDg4MTM2ODkxNzQ4NWNiMDMzNzhlOWY0MDAwMmYzYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0wLDAgKzEsMTk0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklH
SFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisKKyNpbmNs
dWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5j
bHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCisjaW5j
bHVkZSAiUmVjdGFuZ2xlU2hhcGUuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NPd25Q
dHI8U2hhcGU+IGNyZWF0ZVJlY3RhbmdsZVNoYXBlKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBj
b25zdCBGbG9hdFNpemUmIHJhZGlpKQoreworICAgIEFTU0VSVChib3VuZHMud2lkdGgoKSA+PSAw
ICYmIGJvdW5kcy5oZWlnaHQoKSA+PSAwICYmIHJhZGlpLndpZHRoKCkgPj0gMCAmJiByYWRpaS5o
ZWlnaHQoKSA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlY3RhbmdsZVNoYXBlKGJv
dW5kcywgcmFkaWkpKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0ZVNoYXBl
Q2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzKQoreworICAgIEFT
U0VSVChyYWRpdXMgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWN0YW5nbGVTaGFw
ZShGbG9hdFJlY3QoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVyLnkoKSAtIHJhZGl1cywgcmFk
aXVzKjIsIHJhZGl1cyoyKSwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSkpOworfQorCitzdGF0
aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRlU2hhcGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQm
IGNlbnRlciwgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKK3sKKyAgICBBU1NFUlQocmFkaWkud2lk
dGgoKSA+PSAwICYmIHJhZGlpLmhlaWdodCgpID49IDApOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUmVjdGFuZ2xlU2hhcGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpaS53aWR0aCgpLCBj
ZW50ZXIueSgpIC0gcmFkaWkuaGVpZ2h0KCksIHJhZGlpLndpZHRoKCkqMiwgcmFkaWkuaGVpZ2h0
KCkqMiksIHJhZGlpKSk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVQb2x5
Z29uU2hhcGUoUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1
bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQb2x5Z29uU2hhcGUodmVy
dGljZXMsIGZpbGxSdWxlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IHBoeXNpY2Fs
UmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxvZ2ljYWxCb3hIZWln
aHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiByZWN0OworICAgIGlmIChpc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBGbG9h
dFJlY3QocmVjdC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSByZWN0Lm1heFgoKSwgcmVjdC5oZWln
aHQoKSwgcmVjdC53aWR0aCgpKTsKKyAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwor
fQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworICAgIGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KHBvaW50Lnko
KSwgbG9naWNhbEJveEhlaWdodCAtIHBvaW50LngoKSk7CisgICAgcmV0dXJuIHBvaW50LnRyYW5z
cG9zZWRQb2ludCgpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBwaHlzaWNhbFNpemVU
b0xvZ2ljYWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkK
K3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAg
ICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOworfQorCitQ
YXNzT3duUHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29uc3QgQmFzaWNTaGFwZSogYmFz
aWNTaGFwZSwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZykKK3sKKyAgICBBU1NFUlQo
YmFzaWNTaGFwZSk7CisKKyAgICBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSA9IGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKKyAgICBmbG9hdCBib3hXaWR0aCA9IGhvcml6
b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLndpZHRoKCkgOiBsb2dpY2FsQm94U2l6
ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBib3hIZWlnaHQgPSBob3Jpem9udGFsV3JpdGluZ01vZGUg
PyBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSA6IGxvZ2ljYWxCb3hTaXplLndpZHRoKCk7CisgICAg
T3duUHRyPFNoYXBlPiBzaGFwZTsKKworICAgIHN3aXRjaCAoYmFzaWNTaGFwZS0+dHlwZSgpKSB7
CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVSZWN0YW5nbGVUeXBlOiB7CisgICAg
ICAgIGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcygKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT54KCks
IGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT55
KCksIGJveEhlaWdodCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3Rhbmds
ZS0+d2lkdGgoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChy
ZWN0YW5nbGUtPmhlaWdodCgpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgTGVuZ3RoIHJhZGl1c1hM
ZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKKyAgICAgICAgTGVuZ3RoIHJhZGl1
c1lMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKKyAgICAgICAgRmxvYXRTaXpl
IGNvcm5lclJhZGlpKAorICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8g
MCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAorICAgICAg
ICAgICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5n
dGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7CisgICAgICAgIEZsb2F0UmVjdCBsb2dpY2Fs
Qm91bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVp
Z2h0KCksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVJlY3RhbmdsZVNo
YXBlKGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3Jp
dGluZ01vZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBl
OjpCYXNpY1NoYXBlQ2lyY2xlVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlQ2lyY2xl
KiBjaXJjbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4oYmFzaWNTaGFw
ZSk7CisgICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+
Y2VudGVyWCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOworICAgICAgICBmbG9hdCBy
YWRpdXMgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWluKGJv
eEhlaWdodCwgYm94V2lkdGgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0g
cGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dp
Y2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNoYXBlID0gY3Jl
YXRlU2hhcGVDaXJjbGUobG9naWNhbENlbnRlciwgcmFkaXVzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlRWxsaXBzZVR5cGU6IHsKKyAg
ICAgICAgY29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2UgPSBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY1NoYXBlRWxsaXBzZSo+KGJhc2ljU2hhcGUpOworICAgICAgICBmbG9hdCBjZW50ZXJY
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKKyAg
ICAgICAgZmxvYXQgY2VudGVyWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVy
WSgpLCBib3hIZWlnaHQpOworICAgICAgICBmbG9hdCByYWRpdXNYID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxvYXQgcmFkaXVz
WSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWSgpLCBib3hIZWlnaHQpOwor
ICAgICAgICBGbG9hdFBvaW50IGxvZ2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2Fs
KEZsb2F0UG9pbnQoY2VudGVyWCwgY2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3
cml0aW5nTW9kZSk7CisgICAgICAgIEZsb2F0U2l6ZSBsb2dpY2FsUmFkaWkgPSBwaHlzaWNhbFNp
emVUb0xvZ2ljYWwoRmxvYXRTaXplKHJhZGl1c1gsIHJhZGl1c1kpLCB3cml0aW5nTW9kZSk7CisK
KyAgICAgICAgc2hhcGUgPSBjcmVhdGVTaGFwZUVsbGlwc2UobG9naWNhbENlbnRlciwgbG9naWNh
bFJhZGlpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpC
YXNpY1NoYXBlUG9seWdvblR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZVBvbHlnb24q
IHBvbHlnb24gPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUG9seWdvbio+KGJhc2ljU2hh
cGUpOworICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3RoPiYgdmFsdWVzID0gcG9seWdvbi0+dmFs
dWVzKCk7CisgICAgICAgIHNpemVfdCB2YWx1ZXNTaXplID0gdmFsdWVzLnNpemUoKTsKKyAgICAg
ICAgQVNTRVJUKCEodmFsdWVzU2l6ZSAlIDIpKTsKKyAgICAgICAgT3duUHRyPFZlY3RvcjxGbG9h
dFBvaW50PiA+IHZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50Pih2YWx1
ZXNTaXplIC8gMikpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzU2l6
ZTsgaSArPSAyKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50IHZlcnRleCgKKyAgICAgICAgICAg
ICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgpLAorICAgICAg
ICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkgKyAxKSwgYm94SGVpZ2h0
KSk7CisgICAgICAgICAgICAoKnZlcnRpY2VzKVtpIC8gMl0gPSBwaHlzaWNhbFBvaW50VG9Mb2dp
Y2FsKHZlcnRleCwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHNoYXBlID0gY3JlYXRlUG9seWdvblNoYXBlKHZlcnRpY2VzLnJlbGVh
c2UoKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTogeworICAgICAg
ICBjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0
PGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSo+KGJhc2ljU2hhcGUpOworICAgICAgICBm
bG9hdCBsZWZ0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmxlZnQoKSwgYm94V2lk
dGgpOworICAgICAgICBmbG9hdCB0b3AgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+
dG9wKCksIGJveEhlaWdodCk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMoCisgICAgICAgICAg
ICBsZWZ0LAorICAgICAgICAgICAgdG9wLAorICAgICAgICAgICAgYm94V2lkdGggLSBsZWZ0IC0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnJpZ2h0KCksIGJveFdpZHRoKSwKKyAgICAg
ICAgICAgIGJveEhlaWdodCAtIHRvcCAtIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5i
b3R0b20oKSwgYm94SGVpZ2h0KSk7CisgICAgICAgIExlbmd0aCByYWRpdXNYTGVuZ3RoID0gcmVj
dGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7CisgICAgICAgIExlbmd0aCByYWRpdXNZTGVuZ3RoID0g
cmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7CisgICAgICAgIEZsb2F0U2l6ZSBjb3JuZXJSYWRp
aSgKKyAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwKKyAgICAgICAgICAgIHJhZGl1
c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1lM
ZW5ndGgsIGJveEhlaWdodCkpOworICAgICAgICBGbG9hdFJlY3QgbG9naWNhbEJvdW5kcyA9IHBo
eXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0
aW5nTW9kZSk7CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVSZWN0YW5nbGVTaGFwZShsb2dpY2Fs
Qm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVyUmFkaWksIHdyaXRpbmdNb2RlKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNoYXBlLT5tX3dyaXRpbmdNb2RlID0gd3JpdGlu
Z01vZGU7CisgICAgc2hhcGUtPm1fbWFyZ2luID0gZmxvYXRWYWx1ZUZvckxlbmd0aChtYXJnaW4s
IDApOworICAgIHNoYXBlLT5tX3BhZGRpbmcgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHBhZGRpbmcs
IDApOworCisgICAgcmV0dXJuIHNoYXBlLnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBkOWVjZmQ3MjBiZDBkZDUzODA0MTMxOGM5ODI1YmYzMzcxMWU1ODcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmgKQEAgLTAsMCArMSw4
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAor
ICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor
ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVfaAorI2RlZmluZSBTaGFwZV9oCisKKyNpbmNsdWRl
ICJCYXNpY1NoYXBlcy5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJXcml0
aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBMaW5lU2VnbWVudCB7Cisg
ICAgTGluZVNlZ21lbnQoZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCkKKyAg
ICAgICAgOiBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAgICAgLCBsb2dpY2FsUmlnaHQo
bG9naWNhbFJpZ2h0KQorICAgIHsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
OworICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0OworfTsKKwordHlwZWRlZiBWZWN0b3I8TGlu
ZVNlZ21lbnQ+IFNlZ21lbnRMaXN0OworCisKKy8vIEEgcmVwcmVzZW50YXRpb24gb2YgYSBCYXNp
Y1NoYXBlIHRoYXQgZW5hYmxlcyBsYXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGJyZWFr
IGEgbGluZSB1cCBpbnRvIHNlZ21lbnRzCisvLyB0aGF0IHdpbGwgZml0IHdpdGhpbiBvciBhcm91
bmQgYSBzaGFwZS4gVGhlIGxpbmUgaXMgZGVmaW5lZCBieSBhIHBhaXIgb2YgbG9naWNhbCBZIGNv
b3JkaW5hdGVzIGFuZCB0aGUKKy8vIGNvbXB1dGVkIHNlZ21lbnRzIGFyZSByZXR1cm5lZCBhcyBw
YWlycyBvZiBsb2dpY2FsIFggY29vcmRpbmF0ZXMuIFRoZSBCYXNpY1NoYXBlIGl0c2VsZiBpcyBk
ZWZpbmVkIGluCisvLyBwaHlzaWNhbCBjb29yZGluYXRlcy4KKworY2xhc3MgU2hhcGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVTaGFwZShjb25zdCBCYXNp
Y1NoYXBlKiwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJveFNpemUsIFdyaXRpbmdNb2RlLCBM
ZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZyk7CisKKyAgICB2aXJ0dWFsIH5TaGFwZSgpIHsg
fQorCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2Fs
Qm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQg
bG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExh
eW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dp
Y2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0ID0gMDsKKworcHJvdGVj
dGVkOgorICAgIGZsb2F0IHNoYXBlTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0K
KyAgICBmbG9hdCBzaGFwZVBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0KKwor
cHJpdmF0ZToKKyAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOworICAgIGZsb2F0IG1fbWFy
Z2luOworICAgIGZsb2F0IG1fcGFkZGluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE1NTgzMjFjY2Y4ZmUwYzI4MDI3YTQ1ZmM3YjIz
NmE1NzU3ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZUluZm8uY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlSW5mby5oIgorCisj
aWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1
ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
dGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hh
cGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVu
aXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+Citjb25zdCBTaGFwZSogU2hhcGVJ
bmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVkU2hh
cGUoKSBjb25zdAoreworICAgIGlmIChTaGFwZSogc2hhcGUgPSBtX3NoYXBlLmdldCgpKQorICAg
ICAgICByZXR1cm4gc2hhcGU7CisKKyAgICBTaGFwZVZhbHVlKiBzaGFwZVZhbHVlID0gKG1fcmVu
ZGVyZXItPnN0eWxlKCktPipzaGFwZUdldHRlcikoKTsKKyAgICBCYXNpY1NoYXBlKiBzaGFwZSA9
IChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpTaGFwZSkg
PyBzaGFwZVZhbHVlLT5zaGFwZSgpIDogMDsKKworICAgIEFTU0VSVChzaGFwZSk7CisKKyAgICBt
X3NoYXBlID0gU2hhcGU6OmNyZWF0ZVNoYXBlKHNoYXBlLCBMYXlvdXRTaXplKG1fc2hhcGVMb2dp
Y2FsV2lkdGgsIG1fc2hhcGVMb2dpY2FsSGVpZ2h0KSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+d3Jp
dGluZ01vZGUoKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVNYXJnaW4oKSwgbV9yZW5kZXJl
ci0+c3R5bGUoKS0+c2hhcGVQYWRkaW5nKCkpOworICAgIEFTU0VSVChtX3NoYXBlKTsKKyAgICBy
ZXR1cm4gbV9zaGFwZS5nZXQoKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hh
cGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBl
OjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0Jikg
Y29uc3Q+Citib29sIFNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwgaW50ZXJ2YWxH
ZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lSGVpZ2h0KQoreworICAgIEFTU0VSVChsaW5lSGVpZ2h0ID49IDApOworICAgIG1f
c2hhcGVMaW5lVG9wID0gbGluZVRvcCAtIGxvZ2ljYWxUb3BPZmZzZXQoKTsKKyAgICBtX2xpbmVI
ZWlnaHQgPSBsaW5lSGVpZ2h0OworICAgIG1fc2VnbWVudHMuY2xlYXIoKTsKKworICAgIGlmIChs
aW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQorICAgICAgICAoY29tcHV0ZWRTaGFwZSgpLT4qaW50
ZXJ2YWxHZXR0ZXIpKG1fc2hhcGVMaW5lVG9wLCBzdGQ6Om1pbihtX2xpbmVIZWlnaHQsIHNoYXBl
TG9naWNhbEJvdHRvbSgpIC0gbGluZVRvcCksIG1fc2VnbWVudHMpOworCisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdE9mZnNldCA9IHRoaXMtPmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3NlZ21lbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIG1f
c2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNhbExlZnRPZmZzZXQ7CisgICAgICAgIG1f
c2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0OworICAgIH0KKwor
ICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKK30KKwordGVtcGxhdGUgY2xhc3MgU2hhcGVJ
bmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZTaGFw
ZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+OwordGVtcGxhdGUgY2xhc3MgU2hhcGVJbmZvPFJlbmRl
ckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRl
cnZhbHM+OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZTEzZDMyYTVkNjA5NWY1ZDJmMDk4ZThmYjA5MGE2MTJjNTRl
MzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUluZm8uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyogICAgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSICJBUyBJUyIgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLAorKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisqIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgor
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyogU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFNoYXBlSW5mb19oCisjZGVm
aW5lIFNoYXBlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgSW5mb1R5cGU+CitjbGFz
cyBNYXBwZWRJbmZvIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSW5mb1R5cGUqIGVuc3VyZUluZm8o
Y29uc3QgS2V5VHlwZSoga2V5KQorICAgIHsKKyAgICAgICAgSW5mb01hcCYgaW5mb01hcCA9IE1h
cHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7CisgICAgICAgIGlmIChJbmZv
VHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCisgICAgICAgICAgICByZXR1cm4gaW5mbzsK
KyAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGluZm9NYXAuYWRk
KGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7CisgICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmZv
KGNvbnN0IEtleVR5cGUqIGtleSkgeyBpbmZvTWFwKCkucmVtb3ZlKGtleSk7IH0KKyAgICBzdGF0
aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IHJldHVybiBpbmZvTWFwKCku
Z2V0KGtleSk7IH0KK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEtleVR5cGUq
LCBPd25QdHI8SW5mb1R5cGU+ID4gSW5mb01hcDsKKyAgICBzdGF0aWMgSW5mb01hcCYgaW5mb01h
cCgpCisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9NYXAsIHN0YXRpY0lu
Zm9NYXAsICgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY0luZm9NYXA7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hh
cGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVu
aXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+CitjbGFzcyBTaGFwZUluZm8gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1YWwgflNoYXBl
SW5mbygpIHsgfQorCisgICAgdm9pZCBzZXRTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCkKKyAgICB7CisgICAgICAgIGlmIChtX3JlbmRl
cmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgeworICAgICAgICAgICAg
bG9naWNhbFdpZHRoIC09IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NoYXBlTG9n
aWNhbFdpZHRoID09IGxvZ2ljYWxXaWR0aCAmJiBtX3NoYXBlTG9naWNhbEhlaWdodCA9PSBsb2dp
Y2FsSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkaXJ0eVNoYXBlU2l6ZSgp
OworICAgICAgICBtX3NoYXBlTG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoOworICAgICAgICBt
X3NoYXBlTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQ7CisgICAgfQorCisgICAgdmlydHVh
bCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVIZWlnaHQpOworICAgIHZvaWQgY2xlYXJTZWdtZW50cygpIHsgbV9zZWdtZW50cy5j
bGVhcigpOyB9CisKKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0
dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dpY2FsVG9wT2Zm
c2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0
dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBsb2dpY2FsVG9w
T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBjb25zdCB7IHJl
dHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9naWNhbExlZnRP
ZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJl
dHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsgbG9naWNhbExl
ZnRPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgoKSBjb25zdCB7
IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgoKTsgfQorICAg
IExheW91dFVuaXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRT
aGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBsb2dpY2FsVG9w
T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBtX2xpbmVIZWlnaHQgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7
IH0KKworICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKSBjb25zdCB7
IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gp
ID8gKG1fc2hhcGVMb2dpY2FsSGVpZ2h0ICsgbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxIZWlnaHQoKSkgOiBtX3NoYXBlTG9naWNhbEhlaWdodDsgfQorCisgICAgYm9vbCBsaW5l
T3ZlcmxhcHNTaGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMaW5lVG9wKCkgPCBz
aGFwZUxvZ2ljYWxCb3R0b20oKSAmJiBzaGFwZUxvZ2ljYWxUb3AoKSA8PSBsb2dpY2FsTGluZUJv
dHRvbSgpOyB9CisgICAgYm9vbCBsaW5lV2l0aGluU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpICYmIChsb2dpY2FsTGluZUJvdHRvbSgpIDw9IHNo
YXBlTG9naWNhbEJvdHRvbSgpKTsgfQorCisgICAgdm9pZCBkaXJ0eVNoYXBlU2l6ZSgpIHsgbV9z
aGFwZS5jbGVhcigpOyB9CisgICAgYm9vbCBzaGFwZVNpemVEaXJ0eSgpIHsgcmV0dXJuICFtX3No
YXBlLmdldCgpOyB9CisgICAgY29uc3QgUmVuZGVyVHlwZSogb3duZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmVyOyB9CisKK3Byb3RlY3RlZDoKKyAgICBTaGFwZUluZm8oY29uc3QgUmVuZGVy
VHlwZSogcmVuZGVyZXIpOiBtX3JlbmRlcmVyKHJlbmRlcmVyKSB7IH0KKworICAgIGNvbnN0IFNo
YXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisKKyAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLT5zdHlsZSgpLT5i
b3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdC
ZWZvcmUoKSA6IExheW91dFVuaXQoKTsgfTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09
IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLT5pc1JlbmRlclJlZ2lvbigpKSA/IG1fcmVuZGVy
ZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpIDogTGF5b3V0VW5pdCgpOyB9CisKKyAgICBMYXlv
dXRVbml0IG1fc2hhcGVMaW5lVG9wOworICAgIExheW91dFVuaXQgbV9saW5lSGVpZ2h0OworICAg
IFNlZ21lbnRMaXN0IG1fc2VnbWVudHM7CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBPd25QdHI8
U2hhcGU+IG1fc2hhcGU7CisKKyAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2FsV2lkdGg7Cisg
ICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbEhlaWdodDsKKyAgICBjb25zdCBSZW5kZXJUeXBl
KiBtX3JlbmRlcmVyOworfTsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDEy
OTVkMDNlZGIyNzNmYWU3YmFiZWNkMWM0YmFlMDllYWFjZTBkZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcApAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5j
b3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAq
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCisKKyNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKKworI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMaW5lU2VnbWVudFJhbmdlOjpMaW5l
U2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRl
cmF0b3ImIGVuZCkKKyAgICA6IHN0YXJ0KHN0YXJ0LnJvb3QoKSwgc3RhcnQub2JqZWN0KCksIHN0
YXJ0Lm9mZnNldCgpKQorICAgICwgZW5kKGVuZC5yb290KCksIGVuZC5vYmplY3QoKSwgZW5kLm9m
ZnNldCgpKQorICAgIHsKKyAgICB9CisKK2Jvb2wgU2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRG
b3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQoreworICAgIFNoYXBlVmFsdWUqIHNoYXBl
VmFsdWUgPSByZW5kZXJlci0+c3R5bGUoKS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpOworICAgIGlm
ICghc2hhcGVWYWx1ZSB8fCBzaGFwZVZhbHVlLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gc2hhcGVW
YWx1ZS0+c2hhcGUoKTsKKyAgICByZXR1cm4gc2hhcGUgJiYgc2hhcGUtPnR5cGUoKSAhPSBCYXNp
Y1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOworfQorCitib29sIFNoYXBlSW5z
aWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVudFdpZHRoKQorewor
ICAgIGNvbnN0IFNoYXBlKiBzaGFwZSA9IGNvbXB1dGVkU2hhcGUoKTsKKyAgICBpZiAoIXNoYXBl
IHx8IG1fbGluZUhlaWdodCA8PSAwIHx8IGxvZ2ljYWxMaW5lVG9wKCkgPiBzaGFwZUxvZ2ljYWxC
b3R0b20oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTGF5b3V0VW5pdCBuZXdMaW5l
VG9wOworICAgIGlmIChzaGFwZS0+Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChtX3No
YXBlTGluZVRvcCwgTGF5b3V0U2l6ZShtaW5TZWdtZW50V2lkdGgsIG1fbGluZUhlaWdodCksIG5l
d0xpbmVUb3ApKSB7CisgICAgICAgIGlmIChuZXdMaW5lVG9wID4gbV9zaGFwZUxpbmVUb3ApIHsK
KyAgICAgICAgICAgIG1fc2hhcGVMaW5lVG9wID0gbmV3TGluZVRvcDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5z
aWRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMDZiMzY0NTRiOWRhYjFjMjAyNjU3NzA1ZWQ0OTcxODli
YzdlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU2hhcGVJbnNpZGVJbmZvX2gKKyNkZWZpbmUgU2hhcGVJbnNpZGVJ
bmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiU2hhcGVJbmZvLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5saW5lSXRlcmF0b3I7CitjbGFzcyBSZW5k
ZXJCbG9jazsKK2NsYXNzIFJlbmRlck9iamVjdDsKKworc3RydWN0IExpbmVTZWdtZW50SXRlcmF0
b3IgeworICAgIFJlbmRlck9iamVjdCogcm9vdDsKKyAgICBSZW5kZXJPYmplY3QqIG9iamVjdDsK
KyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvcihSZW5kZXJPYmpl
Y3QqIHJvb3QsIFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAg
IDogcm9vdChyb290KQorICAgICAgICAsIG9iamVjdChvYmplY3QpCisgICAgICAgICwgb2Zmc2V0
KG9mZnNldCkKKyAgICB7CisgICAgfQorfTsKKworc3RydWN0IExpbmVTZWdtZW50UmFuZ2Ugewor
ICAgIExpbmVTZWdtZW50SXRlcmF0b3Igc3RhcnQ7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvciBl
bmQ7CisgICAgTGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnQsIGNv
bnN0IElubGluZUl0ZXJhdG9yJiBlbmQpOworfTsKKwordHlwZWRlZiBWZWN0b3I8TGluZVNlZ21l
bnRSYW5nZT4gU2VnbWVudFJhbmdlTGlzdDsKKworY2xhc3MgU2hhcGVJbnNpZGVJbmZvIDogcHVi
bGljIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5z
aWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8U2hhcGVJbnNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNoYXBlSW5zaWRlSW5mbyhyZW5kZXJl
cikpOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQmxvY2sq
IHJlbmRlcmVyKTsKKworICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgbV9zZWdtZW50UmFuZ2VzLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBTaGFwZUlu
Zm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJlNoYXBl
OjpnZXRJbmNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwg
bGluZUhlaWdodCk7CisgICAgfQorCisgICAgYm9vbCBoYXNTZWdtZW50cygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiBtX3NlZ21lbnRz
LnNpemUoKTsKKyAgICB9CisgICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTZWdtZW50cygpKTsKKyAgICAgICAgcmV0dXJuIG1f
c2VnbWVudHM7CisgICAgfQorICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSB7
IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7IH0KKyAgICBjb25zdCBTZWdtZW50UmFuZ2VMaXN0JiBz
ZWdtZW50UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9CisgICAgY29u
c3QgTGluZVNlZ21lbnQqIGN1cnJlbnRTZWdtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghaGFzU2VnbWVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQo
bV9zZWdtZW50UmFuZ2VzLnNpemUoKSA8IG1fc2VnbWVudHMuc2l6ZSgpKTsKKyAgICAgICAgcmV0
dXJuICZtX3NlZ21lbnRzW21fc2VnbWVudFJhbmdlcy5zaXplKCldOworICAgIH0KKyAgICBib29s
IGFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21lbnRXaWR0aCk7CisKKyAgICB2b2lk
IHNldE5lZWRzTGF5b3V0KGJvb2wgdmFsdWUpIHsgbV9uZWVkc0xheW91dCA9IHZhbHVlOyB9Cisg
ICAgYm9vbCBuZWVkc0xheW91dCgpIHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0KKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5n
Qm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZVBhZGRp
bmdMb2dpY2FsQm91bmRpbmdCb3goKTsgfQorCitwcml2YXRlOgorICAgIFNoYXBlSW5zaWRlSW5m
byhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCisgICAgOiBTaGFwZUluZm88UmVuZGVyQmxv
Y2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJlNoYXBlOjpnZXRJbmNsdWRl
ZEludGVydmFscz4gKHJlbmRlcmVyKQorICAgICwgbV9uZWVkc0xheW91dChmYWxzZSkKKyAgICB7
IH0KKworICAgIFNlZ21lbnRSYW5nZUxpc3QgbV9zZWdtZW50UmFuZ2VzOworICAgIGJvb2wgbV9u
ZWVkc0xheW91dDoxOworfTsKKworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NTgw
MzhiMjQ3YzNjODc1NzJlNTg2MGYwOGM4MTkyYjIxYmE0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwCkBAIC0wLDAg
KzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlSW50
ZXJ2YWwuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9y
KCkgKGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGkxLCBjb25zdCBTaGFwZUludGVydmFsJiBpMikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpMS54MSA8IGkyLngxOworICAgIH0KK307CisKK2Jv
b2wgU2hhcGVJbnRlcnZhbDo6aW50ZXJzZWN0KGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGksIFNoYXBl
SW50ZXJ2YWwmIHJ2KSBjb25zdAoreworICAgIGlmICh4MiA8IGkueDEgfHwgeDEgPiBpLngyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcnYueDEgPSBzdGQ6Om1heCh4MSwgaS54MSk7Cisg
ICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54Mik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgc29ydFNoYXBlSW50ZXJ2YWxzKFZlY3RvcjxTaGFwZUludGVydmFsPiYgdikKK3sKKyAgICBz
dGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKK30K
Kwordm9pZCBtZXJnZVNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYg
djEsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFwZUludGVydmFs
PiYgcnYpCit7CisgICAgaWYgKCF2MS5zaXplKCkpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYy
LmJlZ2luKCksIHYyLmVuZCgpKTsKKyAgICBlbHNlIGlmICghdjIuc2l6ZSgpKQorICAgICAgICBy
di5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7CisgICAgZWxzZSB7CisgICAgICAg
IFZlY3RvcjxTaGFwZUludGVydmFsPiB2KHYxLnNpemUoKSArIHYyLnNpemUoKSk7CisgICAgICAg
IFNoYXBlSW50ZXJ2YWwqIGludGVydmFsID0gMDsKKworICAgICAgICBzdGQ6Om1lcmdlKHYxLmJl
Z2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgdi5iZWdpbigpLCBJbnRlcnZh
bFgxQ29tcGFyYXRvcigpKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHYuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAg
aW50ZXJ2YWwgPSAmdltpXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZbaV0ueDEgPj0gaW50ZXJ2
YWwtPngxICYmIHZbaV0ueDEgPD0gaW50ZXJ2YWwtPngyKSAvLyBGSVhNRTogMXN0IDw9IHRlc3Qg
bm90IG5lZWRlZD8KKyAgICAgICAgICAgICAgICBpbnRlcnZhbC0+eDIgPSBzdGQ6Om1heChpbnRl
cnZhbC0+eDIsIHZbaV0ueDIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
cnYuYXBwZW5kKCppbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnRlcnZhbCkKKyAgICAg
ICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOworICAgIH0KK30KKwordm9pZCBpbnRlcnNlY3RT
aGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0
b3I8U2hhcGVJbnRlcnZhbD4mIHYyLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJ2KQoreworICAg
IHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNpemUo
KTsKKworICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCisgICAgICAgIHJldHVybjsKKworICAg
IFNoYXBlSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgYm9vbCBvdmVybGFwID0gZmFsc2U7CisgICAg
c2l6ZV90IGkxID0gMDsKKyAgICBzaXplX3QgaTIgPSAwOworCisgICAgd2hpbGUgKGkxIDwgdjFT
aXplICYmIGkyIDwgdjJTaXplKSB7CisgICAgICAgIFNoYXBlSW50ZXJ2YWwgdjEyOworICAgICAg
ICBpZiAodjFbaTFdLmludGVyc2VjdCh2MltpMl0sIHYxMikpIHsKKyAgICAgICAgICAgIGlmICgh
b3ZlcmxhcCB8fCAhdjEyLmludGVyc2VjdChpbnRlcnZhbCwgaW50ZXJ2YWwpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChpbnRl
cnZhbCk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSB2MTI7CisgICAgICAgICAgICAgICAg
b3ZlcmxhcCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodjFbaTFdLngy
IDwgdjJbaTJdLngyKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChv
dmVybGFwKQorICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7CisgICAgICAgICAg
ICBvdmVybGFwID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodjFbaTFdLngxIDwgdjJbaTJdLngx
KQorICAgICAgICAgICAgICAgIGkxKys7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaTIrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVybGFwKQorICAgICAgICBy
di5hcHBlbmQoaW50ZXJ2YWwpOworfQorCit2b2lkIHN1YnRyYWN0U2hhcGVJbnRlcnZhbHMoY29u
c3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+
JiB2MiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBydikKK3sKKyAgICBzaXplX3QgdjFTaXplID0g
djEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAgICBpZiAoIXYx
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2MlNpemUpCisgICAgICAgIHJ2LmFw
cGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2l6
ZV90IGkxID0gMCwgaTIgPSAwOworICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2
MS5lbmQoKSk7CisKKyAgICAgICAgd2hpbGUgKGkxIDwgcnYuc2l6ZSgpICYmIGkyIDwgdjJTaXpl
KSB7CisgICAgICAgICAgICBTaGFwZUludGVydmFsJiBpbnRlcnZhbDEgPSBydltpMV07CisgICAg
ICAgICAgICBjb25zdCBTaGFwZUludGVydmFsJiBpbnRlcnZhbDIgPSB2MltpMl07CisKKyAgICAg
ICAgICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA+
PSBpbnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgcnYucmVtb3ZlKGkxKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGludGVydmFsMi54MiA8IGludGVydmFsMS54MSkKKyAgICAgICAgICAgICAg
ICBpMiArPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwx
LngyKQorICAgICAgICAgICAgICAgIGkxICs9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpbnRl
cnZhbDIueDEgPiBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngyKSB7
CisgICAgICAgICAgICAgICAgcnYuaW5zZXJ0KGkxLCBTaGFwZUludGVydmFsKGludGVydmFsMS54
MSwgaW50ZXJ2YWwyLngxKSk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2
YWwyLngyOworICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGludGVydmFsMi54MSA8PSBpbnRlcnZhbDEueDEpIHsKKyAgICAgICAgICAgICAgICBpbnRlcnZh
bDEueDEgPSBpbnRlcnZhbDIueDI7CisgICAgICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAg
ICAgIH0gZWxzZSAgeyAvLyAoaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKKyAgICAgICAg
ICAgICAgICBpbnRlcnZhbDEueDIgPSBpbnRlcnZhbDIueDE7CisgICAgICAgICAgICAgICAgaTEg
Kz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUludGVydmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50
ZXJ2YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZmYxNGQ4YTVhNzIzMmQ5MmVkYTNkZmQ5Mzc3OGE5MmNkNjk1
NDQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUludGVydmFsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVJbnRl
cnZhbF9oCisjZGVmaW5lIFNoYXBlSW50ZXJ2YWxfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBTaGFwZUludGVydmFsIHsKK3B1Ymxp
YzoKKyAgICBmbG9hdCB4MTsKKyAgICBmbG9hdCB4MjsKKworICAgIFNoYXBlSW50ZXJ2YWwoZmxv
YXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApCisgICAgICAgIDogeDEoeDEpCisgICAgICAgICwgeDIo
eDIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaW50ZXJzZWN0KGNvbnN0IFNoYXBlSW50ZXJ2
YWwmLCBTaGFwZUludGVydmFsJikgY29uc3Q7Cit9OworCit2b2lkIHNvcnRTaGFwZUludGVydmFs
cyhWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgbWVyZ2VTaGFwZUludGVydmFscyhjb25z
dCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBW
ZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgaW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMoY29u
c3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jiwg
VmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7Cit2b2lkIHN1YnRyYWN0U2hhcGVJbnRlcnZhbHMoY29u
c3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jiwg
VmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFNoYXBlSW50ZXJ2YWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE5MmY2NTA1ZDgyMTI4
MzkyODJmYWQ5M2U2ZTI2M2IwZGFkMjFmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKQEAgLTAsMCArMSw2MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT
4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YK
KyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJTaGFwZU91dHNpZGVJbmZvLmgi
CisKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworYm9vbCBT
aGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94KiBib3gpCit7Cisg
ICAgU2hhcGVWYWx1ZSogdmFsdWUgPSBib3gtPnN0eWxlKCktPnNoYXBlT3V0c2lkZSgpOworICAg
IHJldHVybiBib3gtPmlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYgdmFsdWUtPnR5cGUo
KSA9PSBTaGFwZVZhbHVlOjpTaGFwZSAmJiB2YWx1ZS0+c2hhcGUoKTsKK30KKworYm9vbCBTaGFw
ZU91dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQoreworICAgIGlmIChzaGFwZVNpemVEaXJ0eSgpIHx8IG1f
bGluZVRvcCAhPSBsaW5lVG9wIHx8IG1fbGluZUhlaWdodCAhPSBsaW5lSGVpZ2h0KSB7CisgICAg
ICAgIGlmIChTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwg
JlNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGlu
ZVRvcCwgbGluZUhlaWdodCkpIHsKKyAgICAgICAgICAgIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5k
aW5nQm94RGVsdGEgPSBtX3NlZ21lbnRzWzBdLmxvZ2ljYWxMZWZ0IC0gc2hhcGVMb2dpY2FsTGVm
dCgpOworICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSBt
X3NlZ21lbnRzW21fc2VnbWVudHMuc2l6ZSgpLTFdLmxvZ2ljYWxSaWdodCAtIHNoYXBlTG9naWNh
bFJpZ2h0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xlZnRTZWdtZW50U2hh
cGVCb3VuZGluZ0JveERlbHRhID0gMDsKKyAgICAgICAgICAgIG1fcmlnaHRTZWdtZW50U2hhcGVC
b3VuZGluZ0JveERlbHRhID0gMDsKKyAgICAgICAgfQorICAgICAgICBtX2xpbmVUb3AgPSBsaW5l
VG9wOworICAgIH0KKworICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKK30KKworfQorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0
c2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRl
SW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNiZTU5MDU2Y2MxZWQ3ZDAyNDYyZWY0YTQ3MTZjZDM5N2JiZWEz
ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlT3V0c2lkZUluZm8uaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFNoYXBlT3V0c2lkZUluZm9faAorI2RlZmluZSBTaGFwZU91dHNp
ZGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiTGF5b3V0U2l6
ZS5oIgorI2luY2x1ZGUgIlNoYXBlSW5mby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFJlbmRlckJveDsKKworY2xhc3MgU2hhcGVPdXRzaWRlSW5mbyA6IHB1YmxpYyBTaGFwZUlu
Zm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlNoYXBlOjpnZXRFeGNs
dWRlZEludGVydmFscz4sIHB1YmxpYyBNYXBwZWRJbmZvPFJlbmRlckJveCwgU2hhcGVPdXRzaWRl
SW5mbz4geworcHVibGljOgorICAgIExheW91dFNpemUgc2hhcGVMb2dpY2FsT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gTGF5b3V0U2l6ZShzaGFwZUxvZ2ljYWxMZWZ0KCksIHNoYXBlTG9naWNhbFRv
cCgpKTsgfQorCisgICAgTGF5b3V0VW5pdCBsZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7IH0K
KyAgICBMYXlvdXRVbml0IHJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUhlaWdodCkgT1ZFUlJJREU7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxT
aGFwZU91dHNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVuZGVyZXIpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBTaGFwZU91dHNpZGVJbmZvKHJlbmRlcmVyKSk7IH0KKyAgICBz
dGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94Kik7CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS0+c2hhcGVNYXJnaW5Mb2dp
Y2FsQm91bmRpbmdCb3goKTsgfQorCitwcml2YXRlOgorICAgIFNoYXBlT3V0c2lkZUluZm8oY29u
c3QgUmVuZGVyQm94KiByZW5kZXJlcikgOiBTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5
bGU6OnNoYXBlT3V0c2lkZSwgJlNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4ocmVuZGVyZXIp
IHsgfQorCisgICAgTGF5b3V0VW5pdCBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRh
OworICAgIExheW91dFVuaXQgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7Cisg
ICAgTGF5b3V0VW5pdCBtX2xpbmVUb3A7Cit9OworCit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOWQzOTU3MzIzODJmM2IyNzZhYzU2NzZh
NjJkYjE2ZjA3ZmVjYjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
LSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFwZVZhbHVlX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hh
cGVWYWx1ZV9oCi0KLSNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgotI2luY2x1ZGUgIlN0eWxlSW1h
Z2UuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEV4Y2x1c2lvblNoYXBlVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxFeGNsdXNp
b25TaGFwZVZhbHVlPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBFeGNsdXNpb25TaGFwZVZhbHVlVHlw
ZSB7Ci0gICAgICAgIC8vIFRoZSBBdXRvIHZhbHVlIGlzIGRlZmluZWQgYnkgYSBudWxsIEV4Y2x1
c2lvblNoYXBlVmFsdWUqCi0gICAgICAgIFNoYXBlLAotICAgICAgICBPdXRzaWRlLAotICAgICAg
ICBJbWFnZQotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZh
bHVlPiBjcmVhdGVTaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4Y2x1c2lvblNoYXBlVmFsdWUoc2hhcGUp
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBj
cmVhdGVPdXRzaWRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBF
eGNsdXNpb25TaGFwZVZhbHVlKE91dHNpZGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBjcmVhdGVJbWFnZVZhbHVlKFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gaW1hZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4Y2x1
c2lvblNoYXBlVmFsdWUoaW1hZ2UpKTsKLSAgICB9Ci0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVl
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgQmFzaWNTaGFwZSogc2hh
cGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLmdldCgpOyB9Ci0gICAgU3R5bGVJbWFnZSogaW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRJbWFnZShQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW1hZ2Ug
IT0gaW1hZ2UpCi0gICAgICAgICAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgfQotICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKTsgfQotCi1wcml2YXRlOgotICAgIEV4Y2x1c2lvblNo
YXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZSkKLSAgICAgICAgOiBtX3R5cGUo
U2hhcGUpCi0gICAgICAgICwgbV9zaGFwZShzaGFwZSkKLSAgICB7Ci0gICAgfQotICAgIEV4Y2x1
c2lvblNoYXBlVmFsdWUoRXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgdHlwZSkKLSAgICAgICAgOiBt
X3R5cGUodHlwZSkKLSAgICB7Ci0gICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUoUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAgICAgICAgOiBtX3R5cGUoSW1hZ2UpCi0gICAgICAg
ICwgbV9pbWFnZShpbWFnZSkKLSAgICB7Ci0gICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWVU
eXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8QmFzaWNTaGFwZT4gbV9zaGFwZTsKLSAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gbV9pbWFnZTsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCBiOGIyMjBhYjZjMTQ0MTlk
MjA5OTBiZTIwOGFlMzY4NWY3NWM3YjkwLi5hNDAzN2MyNTkyMTA1OTBkYzQ0MGEyOGJkZWRjOGM0
MDhmYmIwZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAKQEAgLTE3MzMsOSArMTczMyw5IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEJvcmRl
ckltYWdlT3V0c2V0KExlbmd0aEJveCBvdXRzZXQpCiAgICAgc3Vycm91bmQuYWNjZXNzKCktPmJv
cmRlci5tX2ltYWdlLnNldE91dHNldChvdXRzZXQpOwogfQogCi1FeGNsdXNpb25TaGFwZVZhbHVl
KiBSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlKCkKK1NoYXBlVmFsdWUqIFJlbmRlclN0
eWxlOjppbml0aWFsU2hhcGVJbnNpZGUoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVm
UHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+LCBzT3V0c2lkZVZhbHVlLCAoRXhjbHVzaW9uU2hhcGVW
YWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJl
ZlB0cjxTaGFwZVZhbHVlPiwgc091dHNpZGVWYWx1ZSwgKFNoYXBlVmFsdWU6OmNyZWF0ZU91dHNp
ZGVWYWx1ZSgpKSk7CiAgICAgcmV0dXJuIHNPdXRzaWRlVmFsdWUuZ2V0KCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNjkyMjBmMzA3
YTc2NWJkZDUwMmZkOTgxYmIxNzc4YWYyZDc2MzE5ZS4uODNmZTAyMzhkMjRhNWJiNTFmYTRiNDVl
MmZhMDRjNTgzZDkzODNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAj
aW5jbHVkZSAiQ291bnRlckRpcmVjdGl2ZXMuaCIKICNpbmNsdWRlICJEYXRhUmVmLmgiCi0jaW5j
bHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgog
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
QEAgLTQ5LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2lu
Y2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgorI2luY2x1ZGUg
IlNoYXBlVmFsdWUuaCIKICNpbmNsdWRlICJTdHlsZUJhY2tncm91bmREYXRhLmgiCiAjaW5jbHVk
ZSAiU3R5bGVCb3hEYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVEZXByZWNhdGVkRmxleGlibGVCb3hE
YXRhLmgiCkBAIC0xNDcwLDMxICsxNDcwLDMxIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEtlcm5p
bmcoU1ZHTGVuZ3RoIGspIHsgYWNjZXNzU1ZHU3R5bGUoKS0+c2V0S2VybmluZyhrKTsgfQogI2Vu
ZGlmCiAKLSAgICB2b2lkIHNldFNoYXBlSW5zaWRlKFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVW
YWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRTaGFwZUluc2lkZShQYXNzUmVmUHRyPFNoYXBlVmFs
dWU+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3No
YXBlSW5zaWRlID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9zaGFwZUluc2lkZSA9IHZhbHVlOwogICAgIH0KLSAg
ICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZUluc2lkZSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlSW5zaWRlLmdldCgpOyB9Ci0gICAgRXhjbHVzaW9uU2hh
cGVWYWx1ZSogcmVzb2x2ZWRTaGFwZUluc2lkZSgpIGNvbnN0CisgICAgU2hhcGVWYWx1ZSogc2hh
cGVJbnNpZGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZUlu
c2lkZS5nZXQoKTsgfQorICAgIFNoYXBlVmFsdWUqIHJlc29sdmVkU2hhcGVJbnNpZGUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUgPSB0aGlz
LT5zaGFwZUluc2lkZSgpOwotICAgICAgICBpZiAoc2hhcGVJbnNpZGUgJiYgc2hhcGVJbnNpZGUt
PnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpPdXRzaWRlKQorICAgICAgICBTaGFwZVZh
bHVlKiBzaGFwZUluc2lkZSA9IHRoaXMtPnNoYXBlSW5zaWRlKCk7CisgICAgICAgIGlmIChzaGFw
ZUluc2lkZSAmJiBzaGFwZUluc2lkZS0+dHlwZSgpID09IFNoYXBlVmFsdWU6Ok91dHNpZGUpCiAg
ICAgICAgICAgICByZXR1cm4gc2hhcGVPdXRzaWRlKCk7CiAgICAgICAgIHJldHVybiBzaGFwZUlu
c2lkZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFNoYXBlT3V0c2lkZShQYXNzUmVmUHRyPEV4Y2x1
c2lvblNoYXBlVmFsdWU+IHZhbHVlKQorICAgIHZvaWQgc2V0U2hhcGVPdXRzaWRlKFBhc3NSZWZQ
dHI8U2hhcGVWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fc2hhcGVPdXRzaWRlID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9zaGFwZU91dHNpZGUgPSB2YWx1
ZTsKICAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlKCkgY29uc3Qg
eyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlLmdldCgpOyB9Cisg
ICAgU2hhcGVWYWx1ZSogc2hhcGVPdXRzaWRlKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVy
aXRlZERhdGEtPm1fc2hhcGVPdXRzaWRlLmdldCgpOyB9CiAKLSAgICBzdGF0aWMgRXhjbHVzaW9u
U2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlSW5zaWRlKCk7Ci0gICAgc3RhdGljIEV4Y2x1c2lvblNo
YXBlVmFsdWUqIGluaXRpYWxTaGFwZU91dHNpZGUoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGlj
IFNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZUluc2lkZSgpOworICAgIHN0YXRpYyBTaGFwZVZhbHVl
KiBpbml0aWFsU2hhcGVPdXRzaWRlKCkgeyByZXR1cm4gMDsgfQogCiAgICAgdm9pZCBzZXRDbGlw
UGF0aChQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBvcGVyYXRpb24pCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc0
YWVlYjI5ZjgyNWNiYTU5Mzg1N2IxMDlhOWQxYWI0NDQ5Y2IwZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmgKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgor
ICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlVmFsdWVfaAor
I2RlZmluZSBTaGFwZVZhbHVlX2gKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgiCisjaW5jbHVk
ZSAiU3R5bGVJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcGVWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXBl
VmFsdWU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFNoYXBlVmFsdWVUeXBlIHsKKyAgICAgICAgLy8g
VGhlIEF1dG8gdmFsdWUgaXMgZGVmaW5lZCBieSBhIG51bGwgU2hhcGVWYWx1ZSoKKyAgICAgICAg
U2hhcGUsCisgICAgICAgIE91dHNpZGUsCisgICAgICAgIEltYWdlCisgICAgfTsKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IGNyZWF0ZVNoYXBlVmFsdWUoUGFzc1JlZlB0cjxC
YXNpY1NoYXBlPiBzaGFwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hh
cGVWYWx1ZShzaGFwZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXBlVmFs
dWU+IGNyZWF0ZU91dHNpZGVWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNoYXBlVmFsdWUoT3V0c2lkZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXBlVmFsdWU+IGNyZWF0ZUltYWdlVmFsdWUoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFn
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcGVWYWx1ZShpbWFnZSkp
OworICAgIH0KKworICAgIFNoYXBlVmFsdWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKyAgICBCYXNpY1NoYXBlKiBzaGFwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuZ2V0
KCk7IH0KKyAgICBTdHlsZUltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCisg
ICAgeworICAgICAgICBpZiAobV9pbWFnZSAhPSBpbWFnZSkKKyAgICAgICAgICAgIG1faW1hZ2Ug
PSBpbWFnZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlVmFsdWUmIG90
aGVyKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpOyB9CisKK3ByaXZhdGU6
CisgICAgU2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlKQorICAgICAgICA6
IG1fdHlwZShTaGFwZSkKKyAgICAgICAgLCBtX3NoYXBlKHNoYXBlKQorICAgIHsKKyAgICB9Cisg
ICAgU2hhcGVWYWx1ZShTaGFwZVZhbHVlVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBl
KQorICAgIHsKKyAgICB9CisgICAgU2hhcGVWYWx1ZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGlt
YWdlKQorICAgICAgICA6IG1fdHlwZShJbWFnZSkKKyAgICAgICAgLCBtX2ltYWdlKGltYWdlKQor
ICAgIHsKKyAgICB9CisgICAgU2hhcGVWYWx1ZVR5cGUgbV90eXBlOworICAgIFJlZlB0cjxCYXNp
Y1NoYXBlPiBtX3NoYXBlOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBtX2ltYWdlOworfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4IDBhM2M3YThjYWMxYmMyMGEwZTQ0
NWQ5NzMzZDcwNWE2MDViZDExY2MuLjA3NjdhZDhjMzFmYzdkZjhkZmFkOWM4YWRhOTQ5OWJlMGM5
ZjQ5ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaApAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVk
ZSAiQ291bnRlckRpcmVjdGl2ZXMuaCIKICNpbmNsdWRlICJDdXJzb3JEYXRhLmgiCiAjaW5jbHVk
ZSAiRGF0YVJlZi5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKICNpbmNsdWRl
ICJGaWxsTGF5ZXIuaCIKICNpbmNsdWRlICJMaW5lQ2xhbXBWYWx1ZS5oIgogI2luY2x1ZGUgIk5p
bmVQaWVjZUltYWdlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTEzNiw4ICsxMzYsOCBAQCBwdWJsaWM6CiAKICAgICBMZW5ndGhTaXplIG1fcGFn
ZVNpemU7CiAKLSAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gbV9zaGFwZUluc2lkZTsK
LSAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gbV9zaGFwZU91dHNpZGU7CisgICAgUmVm
UHRyPFNoYXBlVmFsdWU+IG1fc2hhcGVJbnNpZGU7CisgICAgUmVmUHRyPFNoYXBlVmFsdWU+IG1f
c2hhcGVPdXRzaWRlOwogICAgIExlbmd0aCBtX3NoYXBlTWFyZ2luOwogICAgIExlbmd0aCBtX3No
YXBlUGFkZGluZzsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203977</attachid>
            <date>2013-06-06 16:10:19 -0700</date>
            <delta_ts>2013-06-07 11:13:06 -0700</delta_ts>
            <desc>Updating patch</desc>
            <filename>bug-117162-20130606160847.patch</filename>
            <type>text/plain</type>
            <size>287143</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE3ZGFjOWNiMDUwZTM3
YmFkM2ZmODJlMjk4NzU5ODdhMjQxOTNhNi4uYTRkNDg3NDgyZDJlYjZmYmY3ODMxMGFmMWM5MjQ5
YjJkYzQwODVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNCBAQAorMjAxMy0wNi0wNiAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSBz
cGxpdCBiZXR3ZWVuIHRoZSBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9ucywKKyAgICAgICAgc29tZSByZW5hbWluZyBpcyBuZWNlc3NhcnkuIEluIGdlbmVyYWwsIHRo
aXMgcGF0Y2ggcmVtb3ZlcyAnRXhjbHVzaW9uJyBmcm9tCisgICAgICAgIGFueSBTaGFwZXMgY29k
ZSwgbW9zdGx5IHJlbmFtaW5nIEV4Y2x1c2lvblNoYXBlIC0+IFNoYXBlLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVy
dHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAgICog
Y3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eVNoYXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
U2hhcGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVNoYXBl
OjpjcmVhdGVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFwcGVyU2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmVuc3VyZVByb3Bl
cnR5TWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2hhcGVJbnNpZGVJbmZvKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVTaGFwZVNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0ZXJDaGls
ZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9j
YXRpb25Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25O
ZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5zdXJlU2hhcGVJbnNpZGVJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaGFwZUluc2lkZUluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNldFNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5n
TWFyZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRTaGFwZUluc2lkZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3Np
dGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5zRm9yTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMb2dpY2FsTGluZVRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNh
bEhlaWdodElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGlu
ZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6d2lsbEJlRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzaGFwZU91dHNpZGVJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50T2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JlZmxleFZlcnRleCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppbndh
cmRFZGdlTm9ybWFsKToKKyAgICAgICAgKFdlYkNvcmU6Om91dHdhcmRFZGdlTm9ybWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGVuZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpzbmFwVmVydGlj
ZXNUb0xheW91dFVuaXRHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTaGFwZVBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50
ZXJzZWN0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6
OmFib3ZlT3JUb1RoZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpmaXJz
dEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1BvbHlnb25TaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpP
ZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29uRWRnZTo6
ZWRnZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpiYXNpcyk6
CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OlBvbHlnb25TaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2VZSW50
ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2VwdEZvcldp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRpbmdCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBlTWFyZ2luQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZh
bHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OmZpcnN0SW5jbHVkZWRJbnRl
cnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hh
cGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0
YW5nbGUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OkZsb2F0Um91bmRl
ZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cngpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVj
dGFuZ2xlU2hhcGU6OlJlY3RhbmdsZVNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWN0YW5nbGVTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9seWdvblNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUmVjdFRvTG9naWNhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNp
Y2FsU2l6ZVRvTG9naWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlU2hhcGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oLgorICAgICAgICAoV2ViQ29yZTo6
TGluZVNlZ21lbnQ6OkxpbmVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjp+U2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlOjpzaGFwZVBhZGRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wdXRlZFNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcHBl
ZEluZm86OmVuc3VyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6cmVtb3Zl
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjppbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcHBlZEluZm86OmluZm9NYXApOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZv
Ojp+U2hhcGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2V0U2hhcGVTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6Y2xlYXJTZWdtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlTG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluZm86OnNoYXBlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpz
aGFwZUxvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9n
aWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExpbmVUb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGluZUJvdHRvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlSW5mbzo6bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVJbmZvOjpsaW5lV2l0aGluU2hhcGVCb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcGVJbmZvOjpkaXJ0eVNoYXBlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluZm86OnNoYXBlU2l6ZURpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6b3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpTaGFwZUluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsVG9wT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGVJbnNpZGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lk
ZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6TGluZVNlZ21l
bnRJdGVyYXRvcjo6TGluZVNlZ21lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmNyZWF0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJ
bmZvOjpoYXNTZWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OnNl
Z21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2VnbWVudFJhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OmN1cnJlbnRTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2V0TmVlZHNMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpuZWVkc0xheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OlNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgICogcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUludGVydmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFNoYXBlSW50ZXJ2
YWxzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlU2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6c3Vi
dHJhY3RTaGFwZUludGVydmFscyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
dGVydmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
SW50ZXJ2YWwuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW50ZXJ2YWw6OlNoYXBlSW50ZXJ2
YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRG
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRz
Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hhcGVMb2dp
Y2FsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OmxlZnRTZWdt
ZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lk
ZUluZm86OnJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXBlT3V0c2lkZUluZm86OlNoYXBlT3V0c2lkZUluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5p
dGlhbFNoYXBlSW5zaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpzaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFwZVZhbHVlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OlNoYXBlVmFsdWUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6CisKIDIw
MTMtMDYtMDYgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
W0NTUyBTaGFwZXNdIFJlbmFtZSB1cGRhdGVMaW5lQm91bmRhcmllc0ZvckV4Y2x1c2lvbnMgdG8g
dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDhlODM3MzU5YzkzNTY2ZGM1NTZhNGUzZjI4NzljYzZiNzk3MjFlZmQuLjUxN2M3N2NhOTg4
Y2Q3MDcxNmNmZWM3N2IyZjYxMjk5YTFhMjQwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03
Niw2ICs3Niw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGx1Z2lucyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nIgogICAgICIk
e1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvbWF0aG1sIgorICAgICIke1dFQkNPUkVfRElSfS9yZW5k
ZXJpbmcvc2hhcGVzIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3R5bGUiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zdmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N0b3Jh
Z2UiCkBAIC0yMDkzLDEzICsyMDk0LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRl
cmluZy9CaWRpUnVuLmNwcAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAKICAgICByZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNw
cAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAotICAgIHJlbmRlcmluZy9FeGNs
dXNpb25SZWN0YW5nbGUuY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcAotICAg
IHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5jcHAKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCiAgICAgcmVu
ZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCiAgICAgcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250
cm9sbGVyLmNwcApAQCAtMjIxNCw2ICsyMjA4LDE1IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAKICAgICByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKIAorICAgIHJlbmRlcmluZy9zaGFwZXMv
UG9seWdvblNoYXBlLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3Bw
CisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1No
YXBlSW5mby5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHAKKyAg
ICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwCisgICAgcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZU91dHNpZGVJbmZvLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRl
SW5mby5oCisKICAgICByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwCiAgICAgcmVuZGVy
aW5nL3N0eWxlL0NvbnRlbnREYXRhLmNwcAogICAgIHJlbmRlcmluZy9zdHlsZS9Db3VudGVyRGly
ZWN0aXZlcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMGE1Mjg4MzdlNzIzNDcyMTA3YzA4
YjJkYjAzMGQ0ODdjZWY4MjBiYi4uMjNhZGY0ZWVlNzkxMDBhYjgyYTU3NzAyZjE1MzVjMzNiOTZl
YzM5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTkwLDYgKzkwLDcgQEAgd2ViY29yZV9jcHBm
bGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4gXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZyBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbCBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnIFwKIAkt
SSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCmluZGV4IDg0MWE1NDE5NTA0Yjg2MDdlYzI0YWE0M2YxN2M5NjE5MjZmNWNiZjEuLjk0
ZGZlNmM5ZjJlMjc5MzFmZTMyMmVmMTJmZjkxOTdiOThmNTA2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQpAQCAtNDM4NSwyMCArNDM4NSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvdW50ZXJOb2RlLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50
ZXJ2YWwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwu
aCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGUuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5m
by5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBc
Ci0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBc
Ci0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKQEAgLTQ2MzMsNiAr
NDYxOSwyMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9SZWN0YW5nbGVTaGFwZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvQmFzaWNTaGFwZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFz
aWNTaGFwZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEu
aCBcCkBAIC00NjQ2LDcgKzQ2NDYsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9DdXJzb3JEYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9DdXJzb3JMaXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9EYXRhUmVmLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNp
b25TaGFwZVZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb24uaCBcCkBAIC00NjYz
LDYgKzQ2NjIsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU2hhZG93RGF0YS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFk
b3dEYXRhLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQm94RGF0YS5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKaW5kZXggMGI0YTRmZDlkMDZkZGQ4NTNmMjA2YzE1MmIwN2RjMDJjMmYyYTY3OS4u
MDdiYThiZDk3N2FmNzgzZmQxMTVmMzBjZDYxZGM0ZWYyNGQ4NGI2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0xMTQ1LDEzICsxMTQ1LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL0JpZGlSdW4u
Y3BwIFwKICAgICByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwIFwKICAgICByZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIFwKLSAg
ICByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNp
b25SZWN0YW5nbGUuY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwIFwKLSAg
ICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvLmNwcCBcCiAgICAgcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBc
CiAgICAgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwIFwKICAgICByZW5kZXJpbmcvRmxv
d1RocmVhZENvbnRyb2xsZXIuY3BwIFwKQEAgLTEyNDUsNiArMTIzOCwxMyBAQCBTT1VSQ0VTICs9
IFwKICAgICByZW5kZXJpbmcvUmVuZGVyV29yZEJyZWFrLmNwcCBcCiAgICAgcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwIFwKICAgICByZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuY3BwIFwKKyAg
ICByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFw
ZXMvUmVjdGFuZ2xlU2hhcGUuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBc
CisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIFwKKyAgICByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW5zaWRlSW5mby5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRl
cnZhbC5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgXAog
ICAgIHJlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAgXAogICAgIHJlbmRlcmluZy9zdHls
ZS9Db250ZW50RGF0YS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db3VudGVyRGlyZWN0aXZl
cy5jcHAgXApAQCAtMjQwMywxMyArMjQwMyw2IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmlu
Zy9icmVha19saW5lcy5oIFwKICAgICByZW5kZXJpbmcvQ291bnRlck5vZGUuaCBcCiAgICAgcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5o
IFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIFwKLSAgICByZW5kZXJpbmcvRXhj
bHVzaW9uUmVjdGFuZ2xlLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oIFwKLSAg
ICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lk
ZUluZm8uaCBcCiAgICAgcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggXAogICAgIHJl
bmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmggXAogICAgIHJlbmRlcmluZy9IaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGUuaCBcCkBAIC0yNTEzLDE4ICsyNTA2LDI1IEBAIEhFQURFUlMgKz0gXAogICAg
IHJlbmRlcmluZy9SZW5kZXJXb3JkQnJlYWsuaCBcCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guaCBcCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmggXAorICAgIHJlbmRlcmluZy9z
aGFwZXMvUG9seWdvblNoYXBlLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hh
cGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oIFwKKyAgICByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW5mby5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5o
IFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBcCisgICAgcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9CYXNpY1No
YXBlcy5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuaCBcCiAgICAgcmVuZGVy
aW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9DdXJz
b3JEYXRhLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9DdXJzb3JMaXN0LmggXAotICAgIHJlbmRl
cmluZy9zdHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9G
aWxsTGF5ZXIuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5oIFwKICAgICBy
ZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1F1
b3Rlc0RhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggXAogICAgIHJl
bmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmggXAorICAgIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZh
bHVlLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmggXAogICAg
IHJlbmRlcmluZy9zdHlsZS9TdHlsZUJveERhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0
eWxlQ2FjaGVkSW1hZ2UuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDUzMDJjNGNlM2RmYTg2ZTRlZWVi
N2I3MWMyNGE2NjcyODNmN2EwNmYuLmI1ZTMzNGIwYjBjNTRkMmM4MTE5N2QzNDYzNWU1YzAxMjAz
NGZhZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC04NSw2ICs4NSw3IEBAIElOQ0xVREVQQVRIICs9IFwK
ICAgICAkJFNPVVJDRV9ESVIvcGx1Z2lucyBcCiAgICAgJCRTT1VSQ0VfRElSL3JlbmRlcmluZyBc
CiAgICAgJCRTT1VSQ0VfRElSL3JlbmRlcmluZy9tYXRobWwgXAorICAgICQkU09VUkNFX0RJUi9y
ZW5kZXJpbmcvc2hhcGVzIFwKICAgICAkJFNPVVJDRV9ESVIvcmVuZGVyaW5nL3N0eWxlIFwKICAg
ICAkJFNPVVJDRV9ESVIvcmVuZGVyaW5nL3N2ZyBcCiAgICAgJCRTT1VSQ0VfRElSL3N0b3JhZ2Ug
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5k
ZXggZTgwNzIwMWI0MTEwYjljYWNlNzVmMGUxNjA3NGQzMmQyZWMwZDc2OS4uMGQ5NWEyMjkyY2Y1
MGUwYTdjZTU1N2Y5NmUyYmIyMDRiNDQ2MjAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC01NDIyLDEyICs1NDIyLDYgQEAKICAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xF
eGNsdXNpb25JbnRlcnZhbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZS5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC02MzA2LDYgKzYzMDAsMTIgQEAKICAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8
L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNc
UG9seWdvblNoYXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91dHNpZGVJ
bmZvLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZH
UGF0aERhdGEuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgpAQCAtMTIxMDksMTEgKzEyMTA5LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xicmVha19saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXENvdW50ZXJOb2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcRWxsaXBzaXNCb3guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXEZpeGVkVGFibGVMYXlvdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xGbG93VGhyZWFkQ29udHJvbGxlci5oIiAvPgpAQCAtMTIxOTcsNiArMTIxOTIsMTIg
QEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWxlY3Rpb25J
bmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2xp
ZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyU25h
cHNob3R0ZWRQbHVnSW4uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzaGFwZXNcUG9seWdvblNoYXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUludGVydmFsLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUlu
Zm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVy
U1ZHQmxvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHQ29udGFpbmVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc3ZnXFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIiAvPgpAQCAtMTIyNjksNyArMTIyNzAs
NiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEN1cnNvckRh
dGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxDdXJz
b3JMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVc
RGF0YVJlZi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxl
XEV4Y2x1c2lvblNoYXBlVmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzdHlsZVxGaWxsTGF5ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzdHlsZVxHcmlkUG9zaXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxHcmlkVHJhY2tTaXplLmgiIC8+CkBAIC0xMjI4MCw2ICsx
MjI4MCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcUmVu
ZGVyU3R5bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHls
ZVxSZW5kZXJTdHlsZUNvbnN0YW50cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHN0eWxlXFNoYWRvd0RhdGEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFwZVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxlQm94RGF0YS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFN0eWxlQ2FjaGVkSW1h
Z2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBmNWU4NzIzOGM3ZjIwOGI3NThhMGZkNzE2MThkMDJm
NGQyMmRjNzAzLi41ZTJjZTA5ZWE0ZjRjM2Y4NTMyYThiMmNkYTMxYWQyZTY0MDgzYTE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZp
bHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCkBAIC0yNDMyLDIzICsyNDMyLDIzIEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRWxsaXBzaXNCb3guY3BwIj4KICAgICAg
IDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUG9seWdvblNoYXBlLmNwcCI+
CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hh
cGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUmVjdGFu
Z2xlLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNo
YXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBl
LmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBl
SW5zaWRlSW5mby5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uY3BwIj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnRlcnZhbC5jcHAiPgogICAgICAg
PEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCI+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lk
ZUluZm8uY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwIj4KQEAgLTkxMjAsMTkgKzkxMjAsMjIgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xFbGxpcHNpc0JveC5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVy
aW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRXhjbHVzaW9uSW50ZXJ2YWwuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc2hhcGVzXFBvbHlnb25TaGFwZS5oIj4KKyAgICAgIDxGaWx0ZXI+cmVu
ZGVyaW5nPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmgiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmgiPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVy
aW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+cmVu
ZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUludGVydmFsLmgiPgogICAgICAg
PEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgiPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZU91dHNpZGVJ
bmZvLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oIj4KQEAgLTk1ODgsOSArOTU5MSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc3R5bGVcRGF0YVJlZi5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0
eWxlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc3R5bGVcRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIj4KLSAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRmlsbExheWVyLmgiPgogICAgICAgPEZpbHRl
cj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTk2MjEsNiAr
OTYyMSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU2hh
ZG93RGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVc
U2hhcGVWYWx1ZS5oIj4KKyAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxlPC9GaWx0ZXI+Cisg
ICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5
bGVcU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nXHN0eWxl
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xNTE4NCw0ICsxNTE4Nyw0IEBACiAgICAg
ICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgogICA8
L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1By
b2plY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDUwZjJjNWY1YmQ2NDA0Y2ZmY2Q3OTk1ZTY2YTdmZGY5MzU0Zjk4Ny4uNGM0
ODdlYTUzYTE1MzlkMGQ4YWQ4ZTM1MzdhYzdlOTcxMTFlMjhkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgzNSwxNCArMTgz
NSw2IEBACiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0Qy
QTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi87IH07CiAJCTZF
NjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsgfTsKIAkJNkU2N0QyQTkxMjgwRThCRDAw
ODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5o
ICovOyB9OwotCQk2RTg3OThCQTE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4
QjQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCAqLzsgfTsKLQkJNkU4
Nzk4QkIxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNTE1RjgxRTRBMDBCRkU0
QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk2RTg3OThCQzE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9u
UmVjdGFuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFODc5OEI2MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwICov
OyB9OwotCQk2RTg3OThCRDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNzE1
RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmggKi87IH07Ci0JCTZFODc5OEJF
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyog
RXhjbHVzaW9uU2hhcGUuY3BwICovOyB9OwotCQk2RTg3OThCRjE1RjgxRTRBMDBCRkU0QUEgLyog
RXhjbHVzaW9uU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTZFQUYzNDBGMTYx
Mzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBF
eGNsdXNpb25Qb2x5Z29uLmNwcCAqLzsgfTsKLQkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8q
IEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmgg
Ki87IH07CiAJCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRDEz
OEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovOyB9OwogCQk2RUJDNUVCMDEz
OEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zs
b2F0NjRBcnJheS5oICovOyB9OwogCQk2RUJGMEU0ODEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4
dHVyZUZsb2F0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwICovOyB9
OwpAQCAtMzI2Myw4ICszMjU1LDYgQEAKIAkJOThDRTQzMkExMjlFMDBFNTAwNTgyMURDIC8qIExp
bmtMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk4Q0U0MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggKi87IH07CiAJCTk4RUIx
Rjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8q
IE5vdEltcGxlbWVudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOUExQjZGOTcxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
QTFCNkY5NjE1ODg2OUM4MDAxMUE4QzQgLyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCAqLzsg
fTsKLQkJOUE5Q0VGOEQxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUE5
Q0VGOEIxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwICov
OyB9OwotCQk5QTlDRUY4RTE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUE5
Q0VGOEMxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjFBQjA3QzE2
NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjFBQjA3QjE2
NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAg
Ki87IH07CiAJCTlCMjRERThFMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyNERFOEMxNTE5
NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdD
Q0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3MzksNyAr
NTcyOSw3IEBACiAJCUZEMDZERkE1MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkQwNkRGQTMxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAgKi87IH07CiAJCUZEMDZERkE2MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZEMDZERkE0MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGUuaCAqLzsgfTsKIAkJRkQxNjYwQTUxMzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFs
RGlzYWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggKi87IH07Ci0J
CUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDFBRjE0RTE2NTZGMTIx
MDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBT
aGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZEMjNBMTI1MTNGNUZBNTkwMEY2
NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDIzQTEyMzEzRjVGQTU5MDBGNjcwMDEg
LyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovOyB9OwogCQlGRDIzQTEyNjEz
RjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMjNBMTI0MTNGNUZBNTkw
MEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oICovOyB9OwogCQlGRDJE
QkYxMjEyQjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDJEQkYwRTEyQjA0OEEzMDBF
RDk4QzYgLyogQWNjZWxlcmF0ZS5mcmFtZXdvcmsgKi87IH07CkBAIC01ODU2LDYgKzU4NDYsMjAg
QEAKIAkJRkQzMTYwQzAxMkIwMjcyQTAwQzFBMzU5IC8qIEZGVEZyYW1lTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzE2MEJBMTJCMDI3MkEw
MEMxQTM1OSAvKiBGRlRGcmFtZU1hYy5jcHAgKi87IH07CiAJCUZEMzU5MThGMTM4REIyMjAwMEUx
RUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzNTkxOEQxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFy
YW1UaW1lbGluZS5jcHAgKi87IH07CiAJCUZEMzU5MTkwMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRp
b1BhcmFtVGltZWxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZEMzU5MThFMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuaCAq
LzsgfTsKKwkJRkQ0NUE5NEYxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3RjE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRDQ1QTk1MDE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4MTE3NUQzOTI2MDAy
Q0QzNjAgLyogU2hhcGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTExNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4
ODMxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTUyMTc1RDNGM0UwMEMyMUVD
OCAvKiBTaGFwZU91dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDA4QTg4NzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZE
NDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hh
cGUuY3BwICovOyB9OworCQlGRDQ1QTk1NDE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbmZvLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgw
MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uY3BwICovOyB9OworCQlGRDQ1QTk1NTE3NUQz
RkI4MDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgyMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFw
ZUluc2lkZUluZm8uY3BwICovOyB9OworCQlGRDQ1QTk1NjE3NUQzRkI4MDBDMjFFQzggLyogU2hh
cGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAg
Ki87IH07CisJCUZENDVBOTU3MTc1RDQxNEMwMEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdCMTc1RDM5
MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1ODE3NUQ0MTRDMDBDMjFFQzggLyogUmVjdGFu
Z2xlU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTU5MTc1RDQxNzEw
MEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0ExNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFw
ZS5jcHAgKi87IH07CisJCUZENDVBOTVBMTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4
QTg3QzE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuY3BwICovOyB9OworCQlGRDQ1
QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlSW50ZXJ2YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlGRDQ1QTk1QzE3NUQ0MjBEMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4NDE3
NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5jcHAgKi87IH07CiAJCUZENTM3MzUyMTM3
QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1MDEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUu
Y3BwICovOyB9OwogCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTM3MzUxMTM3QjY1
MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oICovOyB9OwogCQlGRDUzNzM1NjEzN0I2NTNCMDAwMDhE
Q0UgLyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTM3MzU0MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5h
bWljc0NvbXByZXNzb3JLZXJuZWwuY3BwICovOyB9OwpAQCAtNTg3OCw4ICs1ODgyLDYgQEAKIAkJ
RkQ2RUQyQzgxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ2RUQyQzYxMzZCOEU2NjAw
M0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5oICovOyB9OwogCQlGRDZGMjUyQzEzRjVFRjBF
MDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkYyNTI5MTNGNUVGMEUwMDY1MTY1
RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovOyB9OwogCQlGRDZGMjUyRDEz
RjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZGMjUyQTEzRjVFRjBFMDA2
NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi87IH07Ci0JCUZENzQ4QUJG
MTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3NDhBQkQxNUJGNzRFRDAw
NTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgKi87IH07Ci0JCUZENzQ4QUMw
MTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENzQ4QUJFMTVCRjc0RUQwMDU5
Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRDc4NjhCOTEzNkI5OTkyMDBENDAzREYgLyog
SlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZENzg2OEI3MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNz
Q29tcHJlc3Nvck5vZGUuY3BwICovOyB9OwogCQlGRDc4NjhCQTEzNkI5OTkyMDBENDAzREYgLyog
SlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRDc4NjhCODEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmggKi87IH07CiAJCUZEN0YyOTkxMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZl
U2hhcGVyRFNQS2VybmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZEN0YyOThBMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVs
LmNwcCAqLzsgfTsKQEAgLTU5NDAsOCArNTk0Miw2IEBACiAJCUZEQjA1MkUwMTU2MUE0MkMwMEI1
MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCMDUyREUxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3Vt
bWluZ0p1bmN0aW9uLmggKi87IH07CiAJCUZEQjE3MDA1MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0
aUNoYW5uZWxSZXNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkRCMTcwMDMxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2Ft
cGxlci5jcHAgKi87IH07CiAJCUZEQjE3MDA2MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5u
ZWxSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEQjE3MDA0MTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCAq
LzsgfTsKLQkJRkRCOEQxREExNkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCOEQxRDkx
NkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZEQjhEMUU1MTZCMENDOTcwMDM0MEYx
MCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEwIC8qIEV4Y2x1c2lvblNo
YXBlSW5mby5jcHAgKi87IH07CiAJCUZEQkQxREZDMTY3RkUyN0QwMDUxQTExRSAvKiBKU09zY2ls
bGF0b3JOb2RlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZEQkQxREZCMTY3RkUyN0QwMDUxQTExRSAvKiBKU09zY2lsbGF0b3JOb2RlQ3Vz
dG9tLmNwcCAqLzsgfTsKIAkJRkRCRDQ4MEMxNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJl
YW1BdWRpb1NvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkRCRDQ4MEExNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRp
b1NvdXJjZU5vZGUuY3BwICovOyB9OwogCQlGREJENDgwRDE1OUJDNjg3MDA5M0VCNEYgLyogSlNN
ZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkRCRDQ4MEIxNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJl
YW1BdWRpb1NvdXJjZU5vZGUuaCAqLzsgfTsKQEAgLTgyMjgsMTQgKzgyMjgsNiBAQAogCQk2RTY3
RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE4MTI4
MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZF
ODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25JbnRlcnZhbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI1MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNs
dXNpb25JbnRlcnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNp
b25JbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTg3OThCNjE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblJlY3RhbmdsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0
YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uUmVjdGFu
Z2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI4MTVGODFFNEEwMEJG
RTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNsdXNpb25TaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk2RUFGMzQwRDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25Qb2x5
Z29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVBRjM0MEUxNjEzODY5QTAw
ODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhjbHVzaW9uUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0Zsb2F0NjRBcnJheS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4
QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZF
QkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTcwNiw4ICs5Njk4LDYgQEAKIAkJOThDRTQzMjkxMjlFMDBFNTAwNTgyMURD
IC8qIExpbmtMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua0xv
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OEVCMUY5NDEzMTNGRTA1MDBE
MEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUExQjZG
OTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QTlDRUY4QjE2M0IzRUExMDBERTdFRkUgLyog
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOUE5Q0VGOEMxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3
OTE2NDhDNjlEMDA1MUYzRjIgLyogSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUIxQUIwN0IxNjQ4QzdDNDAwNTFGM0YyIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb25DdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCMjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQkRJRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1ODAsOCArMTI1NzAsMjIgQEAKIAkJRkQwMEQ3QTMx
NEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2luY1Jlc2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRDA2REZBMzEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMDZERkE0
MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdBMTc1RDM5MjYwMDJDRDM2MCAv
KiBQb2x5Z29uU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UG9seWdvblNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0Ix
NzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQb2x5Z29uU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkQwOEE4N0MxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlY3RhbmdsZVNoYXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0QxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3Rhbmds
ZVNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3RhbmdsZVNoYXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdFMTc1RDM5MjYwMDJDRDM2
MCAvKiBTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODdGMTc1RDM5MjYwMDJD
RDM2MCAvKiBTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAg
LyogU2hhcGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNo
YXBlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgxMTc1RDM5
MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2hhcGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgyMTc1
RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2hhcGVJbnNpZGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkQwOEE4ODMxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZUluc2lkZUluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODQxNzVEMzkyNjAwMkNEMzYwIC8qIFNo
YXBlSW50ZXJ2YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hh
cGVJbnRlcnZhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg1MTc1
RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNoYXBlSW50ZXJ2YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGVPdXRzaWRlSW5mby5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODg3MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFw
ZU91dHNpZGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlT3V0
c2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQxNjYwQTQxMzc4N0M2
RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVub3JtYWxEaXNhYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGNsdXNpb25TaGFwZVZhbHVlLmg7IHBhdGgg
PSBzdHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYXBlVmFsdWUuaDsgcGF0aCA9IHN0eWxlL1NoYXBlVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQyM0ExMjMxM0Y1RkE1OTAwRjY3
MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQyM0ExMjQxM0Y1RkE1OTAwRjY3MDAxIC8q
IEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQWNjZWxlcmF0ZS5mcmFtZXdvcms7IHBhdGggPSAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yazsgc291cmNlVHJl
ZSA9ICI8YWJzb2x1dGU+IjsgfTsKQEAgLTEyNzQyLDggKzEyNzQ2LDYgQEAKIAkJRkQ2RjI1Mjkx
M0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDZGMjUyQTEzRjVFRjBFMDA2
NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRDZGMjUyQjEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRDc0
OEFCRDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZENzQ4QUJFMTVCRjc0RUQwMDU5
Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZENzg2OEI3MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEeW5h
bWljc0NvbXByZXNzb3JOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ3
ODY4QjgxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ3RjI5OEExM0Q0QzBDQjAwQUQ5NTM1IC8q
IFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjgwNyw4ICsxMjgwOSw2IEBACiAJCUZEQjA1MkRFMTU2MUE0MkMwMEI1MDBENiAvKiBB
dWRpb1N1bW1pbmdKdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
dWRpb1N1bW1pbmdKdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREIx
NzAwMzE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQjE3MDA0MTRBMkJBQjIwMEEyQjVEOSAv
KiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTXVsdGlDaGFubmVsUmVzYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZEQjhEMUQ5MTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJbmZvLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEQjhEMURCMTZCMEMwRjYwMDM0MEYxMCAvKiBFeGNsdXNp
b25TaGFwZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhj
bHVzaW9uU2hhcGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCRDFE
RkIxNjdGRTI3RDAwNTFBMTFFIC8qIEpTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQkQ0ODBBMTU5QkM2ODcwMDkzRUI0RiAv
KiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGREJENDgwQjE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRp
YVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xODkyMiw3ICsxODkyMiw2IEBACiAJCQkJQkMyMjcyQTEwRTgyRTg3QzAwRTdGOTc1
IC8qIEN1cnNvckRhdGEuaCAqLywKIAkJCQlCQzIyNzJBQzBFODJFOEYzMDBFN0Y5NzUgLyogQ3Vy
c29yTGlzdC5oICovLAogCQkJCUJDMjI3NDZFMEU4MzY2NDUwMEU3Rjk3NSAvKiBEYXRhUmVmLmgg
Ki8sCi0JCQkJRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUu
aCAqLywKIAkJCQlCQzVFQjY5QzBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmNwcCAqLywK
IAkJCQlCQzVFQjY5RDBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggKi8sCiAJCQkJQTEy
NzA1QzIxNjU2QkQ2NTAwQzJFMjdDIC8qIEdyaWRQb3NpdGlvbi5oICovLApAQCAtMTg5NDAsNiAr
MTg5MzksNyBAQAogCQkJCUJDNUVCNjY3MEU4MUNCNzEwMEIyNTk2NSAvKiBSZW5kZXJTdHlsZUNv
bnN0YW50cy5oICovLAogCQkJCUJDNUVCOEMxMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRh
LmNwcCAqLywKIAkJCQlCQzVFQjhDMjBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5oICov
LAorCQkJCUZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggKi8sCiAJCQkJ
QkM1RUI2QTAwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuY3BwICovLAog
CQkJCUJDNUVCNkExMEU4MURDNEYwMEIyNTk2NSAvKiBTdHlsZUJhY2tncm91bmREYXRhLmggKi8s
CiAJCQkJQkM1RUI2N0MwRTgxRDQyMDAwQjI1OTY1IC8qIFN0eWxlQm94RGF0YS5jcHAgKi8sCkBA
IC0xOTg3Miw2ICsxOTg3Miw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTQzOTA0NkMyMTJEQTI1Q0UwMEFGODBBMiAvKiBtYXRobWwgKi8sCisJCQkJRkQwOEE4
NzkxNzVEMzkyNjAwMkNEMzYwIC8qIHNoYXBlcyAqLywKIAkJCQlCQzhDOEZBQTBERENEMkYyMDBC
NTkyRjQgLyogc3R5bGUgKi8sCiAJCQkJMDg4QzJGNzQxMjM5MDA4MDAwM0Q2NUNFIC8qIHN2ZyAq
LywKIAkJCQlBOENGRjA0QjBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCAq
LywKQEAgLTE5ODg1LDIwICsxOTg4Niw2IEBACiAJCQkJOTM5MkYxNEIwQUQxODYxQjAwNjkxQkQ0
IC8qIENvdW50ZXJOb2RlLmggKi8sCiAJCQkJQThDRkY2Q0EwQTE1NjFDRDAwMEE0MjM0IC8qIEVs
bGlwc2lzQm94LmNwcCAqLywKIAkJCQlBOENGRjZCRDBBMTU2MTE4MDAwQTQyMzQgLyogRWxsaXBz
aXNCb3guaCAqLywKLQkJCQk2RTg3OThCNDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50
ZXJ2YWwuY3BwICovLAotCQkJCTZFODc5OEI1MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25J
bnRlcnZhbC5oICovLAotCQkJCTZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Q
b2x5Z29uLmNwcCAqLywKLQkJCQk2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9u
UG9seWdvbi5oICovLAotCQkJCTZFODc5OEI2MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25S
ZWN0YW5nbGUuY3BwICovLAotCQkJCTZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNp
b25SZWN0YW5nbGUuaCAqLywKLQkJCQk2RTg3OThCODE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVz
aW9uU2hhcGUuY3BwICovLAotCQkJCTZFODc5OEI5MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNp
b25TaGFwZS5oICovLAotCQkJCUZEQjhEMURCMTZCMEMwRjYwMDM0MEYxMCAvKiBFeGNsdXNpb25T
aGFwZUluZm8uY3BwICovLAotCQkJCUZEQjhEMUQ5MTZCMEMwRDcwMDM0MEYxMCAvKiBFeGNsdXNp
b25TaGFwZUluZm8uaCAqLywKLQkJCQlGRDc0OEFCRDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmNwcCAqLywKLQkJCQlGRDc0OEFCRTE1QkY3NEVEMDA1OUNGMEQg
LyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggKi8sCi0JCQkJOUE5Q0VGOEIxNjNCM0VBMTAw
REU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwICovLAotCQkJCTlBOUNFRjhD
MTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggKi8sCiAJCQkJ
MzEzMTNGNjMxNDQzQjM1RTAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywK
IAkJCQkzMTMxM0Y2NDE0NDNCMzVFMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAq
LywKIAkJCQlBOENGRjA0ODBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5jcHAg
Ki8sCkBAIC0yMDU1Miw2ICsyMDUzOSwyNyBAQAogCQkJcGF0aCA9IG9wZW5nbDsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUZEMDhBODc5MTc1RDM5MjYwMDJDRDM2MCAvKiBz
aGFwZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZE
MDhBODdBMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuY3BwICovLAorCQkJCUZEMDhB
ODdCMTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuaCAqLywKKwkJCQlGRDA4QTg3QzE3
NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuY3BwICovLAorCQkJCUZEMDhBODdEMTc1
RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5oICovLAorCQkJCUZEMDhBODdFMTc1RDM5
MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi8sCisJCQkJRkQwOEE4N0YxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlLmggKi8sCisJCQkJRkQwOEE4ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5m
by5jcHAgKi8sCisJCQkJRkQwOEE4ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICov
LAorCQkJCUZEMDhBODgyMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uY3BwICov
LAorCQkJCUZEMDhBODgzMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluc2lkZUluZm8uaCAqLywK
KwkJCQlGRDA4QTg4NDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5jcHAgKi8sCisJ
CQkJRkQwOEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLywKKwkJCQlG
RDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8sCisJCQkJ
RkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uaCAqLywKKwkJCSk7
CisJCQlwYXRoID0gc2hhcGVzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
RkQzMTVGQTIxMkIwMjVCMTAwQzFBMzU5IC8qIHdlYmF1ZGlvICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIxNzE2LDE0ICsyMTcyNCw2IEBACiAJCQkJMTQ4
QUZEQTUwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzY3Q0UwQjE0NUFCQzEzMDA1RTY0REIgLyogRXhjZXB0aW9uSGVhZGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc2N0NFMEMxNDVBQkMxMzAwNUU2NERCIC8qIEV4Y2VwdGlvbklu
dGVyZmFjZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFODc5OEJCMTVGODFFNEEwMEJGRTRBQSAv
KiBFeGNsdXNpb25JbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkVBRjM0MTAxNjEzODY5
QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTZFODc5
OEJEMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTZFODc5OEJGMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJRkRCOEQxREExNkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBl
SW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkQ3NDhBQzAxNUJGNzRFRDAwNTlDRjBEIC8qIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOUE5Q0VGOEUxNjNC
M0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICov
LAotCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMDI0NTc1MjE2Q0VBQTI3MDAwRTU2NzEgLyogRVhURHJhd0J1
ZmZlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovLApAQCAtMjI5ODcsNiArMjI5
ODcsNyBAQAogCQkJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzA1OTk3ODEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MDU5OTdBMTA3RDk3NTIwMEE1MEE3QyAv
KiBQb2xpY3lDaGVja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1NzE3NUQ0MTRDMDBD
MjFFQzggLyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTc0RTIwQTEwQTFG
NDRGMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDY2OEUx
OEIwQUREOTYyNDAwNDEyOEUwIC8qIFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJD
MTI4NzcwQjMzQUE2RDAwQzY5M0Q1IC8qIFBvcHVwTWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yMzAyOCw2ICsyMzAyOSw3IEBACiAJCQkJQTg0RDgyN0MxMUQzMzNFRDAwOTcyOTkwIC8q
IFJhd0RhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwM0MxMkIw
MjY3NjAwQzFBMzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NDM2OEU4MEMyMjZFMzIwMDVFRkI1RiAvKiBSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1
QTk1ODE3NUQ0MTRDMDBDMjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3MkVBM0JCMTU4NUNGNTUwMDRGQUEyNiAvKiBSZWZDb3VudGVkU3VwcGxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTgzMUFFNEExNTQyMjVDOTAwRkUyNjQ0IC8qIFJlZmVycmVyUG9s
aWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0FCNDE4MjEzRTM1NkU4MDBEOEFBRjMgLyogUmVn
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMjk4LDYgKzIzMzAwLDEyIEBACiAJCQkJQkM1RUI4
QzQwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE2
RDE2OTY0MTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODBFNkNFODBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZENDVBOTRGMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkQ0NUE5NTAxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5mby5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkQ0NUE5NTExNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NUIxNzVENDFFRTAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2
YWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTUyMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFw
ZU91dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0
RjcgLyogU2hhcGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTk1NEUwQjRFRENDQjAw
MkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCMUYwMkYxM0Iw
MjVEMjAwRjUxMDNGIC8qIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjQzNDIsNiArMjQzNTAsMTMgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CUZENDVBOTVDMTc1RDQyMEQwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZENDVBOTU5MTc1RDQxNzEwMEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NUExNzVENDE3MTAwQzIxRUM4IC8qIFJlY3RhbmdsZVNo
YXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBT
aGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1NDE3NUQzRkI4MDBDMjFFQzggLyog
U2hhcGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTU1MTc1RDNGQjgwMEMyMUVD
OCAvKiBTaGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTYxNzVE
M0ZCODAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDFFMUIxRDAwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjlDMTZFMTMwMEMyRTIwMDJENzk0RSAvKiBBY2Nlc3NpYmlsaXR5QWxsSW5P
bmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZDREQyRjIxMTAzREE2NjAwNjgwNTIxIC8qIEFj
Y2Vzc2liaWxpdHlNZW51TGlzdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI0OTE3LDEzICsyNDkz
Miw2IEBACiAJCQkJOTczREM2M0YxNDVBOTQwOTAwMjg0MkMyIC8qIEV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBQ0RCMTEzQ0U4NzVDMDBCQkJFM0Yg
LyogRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEFG
REE2MEFGNTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTZFODc5OEJBMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk2RUFGMzQwRjE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9u
UG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2RTg3OThCQzE1RjgxRTRBMDBCRkU0QUEg
LyogRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTZFODc5OEJFMTVG
ODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlG
REI4RDFFNTE2QjBDQzk3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUZENzQ4QUJGMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUE5Q0VGOEQxNjNCM0VBMTAwREU3RUZF
IC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTAy
NDU3NTExNkNFQUEyNzAwMEU1NjcxIC8qIEVYVERyYXdCdWZmZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDREQUI1QjExNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggM2E5NGVmODhiMzE3
MmJlYzFhMTYyMDI0NWZlNjc1ZTQzNzIxMzcxNi4uNGZiNDlmZTA4NzYzOTczNWIyMDJkZGEyNmI2
ZGE2NjU5Zjg1MjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJF
eGNsdXNpb25TaGFwZVZhbHVlLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCkBAIC0yNjk5LDI0ICsyNjk5LDI0IEBAIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lk
ZToKICAgICAgICAgICAgIGlmICghc3R5bGUtPnNoYXBlSW5zaWRlKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0gRXhj
bHVzaW9uU2hhcGVWYWx1ZTo6T3V0c2lkZSkKKyAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJ
bnNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6Ok91dHNpZGUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU91dHNp
ZGVTaGFwZSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9
PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpJbWFnZSkgeworICAgICAgICAgICAgaWYgKHN0eWxlLT5z
aGFwZUluc2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6SW1hZ2UpIHsKICAgICAgICAgICAg
ICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPmltYWdlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdHlsZS0+c2hhcGVJbnNpZGUoKS0+aW1hZ2UoKS0+Y3NzVmFsdWUoKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoc3R5bGUt
PnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSk7Cisg
ICAgICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZh
bHVlOjpTaGFwZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JCYXNpY1NoYXBlKHN0eWxl
LT5zaGFwZUluc2lkZSgpLT5zaGFwZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlT3V0c2lkZToKICAgICAgICAgICAgIGlmICghc3R5bGUtPnNoYXBlT3V0c2lkZSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVPdXRzaWRlKCkt
PnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpJbWFnZSkgeworICAgICAgICAgICAgaWYg
KHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OkltYWdlKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+aW1hZ2UoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+aW1hZ2UoKS0+Y3Nz
VmFsdWUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBB
U1NFUlQoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1
ZTo6U2hhcGUpOworICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlw
ZSgpID09IFNoYXBlVmFsdWU6OlNoYXBlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckJh
c2ljU2hhcGUoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5zaGFwZSgpKTsKICNlbmRpZgogI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKaW5k
ZXggNjcyY2E0ZTE5NTUyMTk1M2Q5MGZiNTg3NDZiZDlhOGFhYmViY2QzZS4uMzcyYzFiM2Y0Njgw
ODFmNTZjN2Q0ZWE4MTQzNzQzNzM3MmI4NjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmgKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRoaXMg
aXMgdXNlZCBpbnRlcm5hbGx5IGZvciBjb3VudGVyIG5hbWVzIChhcyBvcHBvc2VkIHRvIGNvdW50
ZXIgdmFsdWVzKQogICAgICAgICBDU1NfQ09VTlRFUl9OQU1FID0gMTEwLAogCi0gICAgICAgIC8v
IFRoaXMgaXMgdXNlZCBieSB0aGUgQ1NTIEV4Y2x1c2lvbnMgZHJhZnQKKyAgICAgICAgLy8gVGhp
cyBpcyB1c2VkIGJ5IHRoZSBDU1MgU2hhcGVzIGRyYWZ0CiAgICAgICAgIENTU19TSEFQRSA9IDEx
MSwKIAogICAgICAgICAvLyBVc2VkIGJ5IGJvcmRlciBpbWFnZXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKaW5kZXggMDBmMGJlM2E1N2IzOTI2OGMw
OThjYTVlM2FmMzdhYmJiNzdkZmRlMC4uYzBjMzdiMWIyYWYwMDgwMzU1ZDQyODA0ZmM0MGE3ZTRk
M2Y1MGQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1
aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVy
LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIK
KyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
QEAgLTE5MzMsMTAgKzE5MzMsMTAgQEAgcHVibGljOgogfTsKIAogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotdGVtcGxhdGUgPEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRl
ckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQ
YXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKCpp
bml0aWFsRnVuY3Rpb24pKCk+Ci1jbGFzcyBBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hhcGUgewor
dGVtcGxhdGUgPFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFNoYXBl
VmFsdWU+KSwgU2hhcGVWYWx1ZSogKCppbml0aWFsRnVuY3Rpb24pKCk+CitjbGFzcyBBcHBseVBy
b3BlcnR5U2hhcGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0
eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkgeyAoc3R5
bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IHZhbHVlKSB7IChzdHls
ZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CkBAIC0xOTQ1LDIwICsxOTQ1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsKICAgICAgICAgICAgIC8vIEZJWE1F
IEJ1ZyAxMDI1NzE6IExheW91dCBmb3IgdGhlIHZhbHVlICdvdXRzaWRlLXNoYXBlJyBpcyBub3Qg
eWV0IGltcGxlbWVudGVkCiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNpZGVTaGFwZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRz
aWRlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOwogICAgICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAgICAgIFJlZlB0
cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0
ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBl
VmFsdWUoKSkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNo
YXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgcHJpbWl0aXZl
VmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOwogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVh
dGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7
CisgICAgICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVh
dGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7
CiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxl
YXNlKCkpOwogICAgICAgICB9CiAKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkKICAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0g
QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBnZXR0ZXJGdW5j
dGlvbiwgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiwgc2V0dGVyRnVuY3Rpb24sIEV4
Y2x1c2lvblNoYXBlVmFsdWUqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7Cisg
ICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
PFNoYXBlVmFsdWUqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiwgc2V0
dGVyRnVuY3Rpb24sIFNoYXBlVmFsdWUqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVy
KCk7CiAgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rp
b24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwogICAgIH0KIH07
CkBAIC0yMzQzLDggKzIzNDMsOCBAQCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyOjpEZXByZWNhdGVk
U3R5bGVCdWlsZGVyKCkKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU1hcmdpbiwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwm
UmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU1hcmdpbj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVQYWRkaW5nLCBBcHBseVBy
b3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6c2hhcGVQYWRkaW5nLCAmUmVuZGVyU3R5bGU6OnNl
dFNoYXBlUGFkZGluZywgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVQYWRkaW5nPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFw
ZUluc2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlPCZSZW5kZXJTdHlsZTo6c2hhcGVJ
bnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFNoYXBlSW5zaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGUsIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFw
ZTwmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZU91dHNp
ZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlT3V0c2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsIEFw
cGx5UHJvcGVydHlTaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6
OnNldFNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hh
cGVPdXRzaWRlLCBBcHBseVByb3BlcnR5U2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUs
ICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFw
ZU91dHNpZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwogI2VuZGlmCiAgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVdoaXRlU3Bh
Y2UsICZSZW5kZXJTdHlsZTo6d2hpdGVTcGFjZSwgRVdoaXRlU3BhY2UsICZSZW5kZXJTdHlsZTo6
c2V0V2hpdGVTcGFjZSwgRVdoaXRlU3BhY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFdoaXRlU3Bh
Y2U+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdpZG93cywgQXBwbHlQcm9wZXJ0eUF1dG88c2hvcnQsICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAm
UmVuZGVyU3R5bGU6OnNldFdpZG93cywgJlJlbmRlclN0eWxlOjpoYXNBdXRvV2lkb3dzLCAmUmVu
ZGVyU3R5bGU6OnNldEhhc0F1dG9XaWRvd3M+OjpjcmVhdGVIYW5kbGVyKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
CmluZGV4IDUyNDQwMDNjZDFjMDk3Nzk2OWVjMGVlMTlkNWQxNDU2NTBhMWVmMDkuLmZjYTYyNmY4
MGQ2NmExMmIxMjZhNGE4MTY1NWZiZmZjNGYyYzIzN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAgLTE0NCwx
MCArMTQ0LDEwIEBAIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4g
YmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBDbGlwCiB9CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLXN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBi
bGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIEV4Y2x1c2lvblNoYXBlVmFsdWUqIGZyb20s
IEV4Y2x1c2lvblNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqLCBT
aGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0bywgZG91YmxlIHByb2dyZXNzKQogewogICAg
IC8vIEZJWE1FIEJ1ZyAxMDI3MjM6IFNoYXBlLWluc2lkZSBzaG91bGQgYmUgYWJsZSB0byBhbmlt
YXRlIGEgdmFsdWUgb2YgJ291dHNpZGUtc2hhcGUnIHdoZW4gc2hhcGUtb3V0c2lkZSBpcyBzZXQg
dG8gYSBCYXNpY1NoYXBlCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBFeGNsdXNpb25TaGFwZVZh
bHVlOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKQor
ICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAh
PSBTaGFwZVZhbHVlOjpTaGFwZSkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgY29uc3QgQmFz
aWNTaGFwZSogZnJvbVNoYXBlID0gZnJvbS0+c2hhcGUoKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNv
bnN0IEFuaW1hdGlvbkJhc2UqLCBFeAogICAgIGlmICghZnJvbVNoYXBlLT5jYW5CbGVuZCh0b1No
YXBlKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgcmV0dXJuIEV4Y2x1c2lvblNoYXBlVmFs
dWU6OmNyZWF0ZVNoYXBlVmFsdWUodG9TaGFwZS0+YmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVzcykp
OworICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKHRvU2hhcGUtPmJsZW5k
KGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsKIH0KICNlbmRpZgogCkBAIC00MDUsMTAgKzQwNSwxMCBA
QCBwdWJsaWM6CiB9OwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1jbGFzcyBQcm9wZXJ0eVdy
YXBwZXJFeGNsdXNpb25TaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPEV4
Y2x1c2lvblNoYXBlVmFsdWU+IHsKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNoYXBlIDogcHVibGlj
IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U2hhcGVWYWx1ZT4gewogcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckV4Y2x1c2lvblNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcCwgRXhjbHVzaW9u
U2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6KnNldHRlcikoUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPikpCi0gICAgICAg
IDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxFeGNsdXNpb25TaGFwZVZhbHVlPihwcm9wLCBn
ZXR0ZXIsIHNldHRlcikKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHBy
b3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4pKQorICAgICAgICA6IFJl
ZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U2hhcGVWYWx1ZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIp
CiAgICAgewogICAgIH0KIH07CkBAIC0xMTY1LDcgKzExNjUsNyBAQCB2b2lkIENTU1Byb3BlcnR5
QW5pbWF0aW9uOjplbnN1cmVQcm9wZXJ0eU1hcCgpCiAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0
aCwgJlJlbmRlclN0eWxlOjpjbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpzZXRDbGlwUGF0aCkpOwog
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyRXhjbHVzaW9uU2hhcGUoQ1NTUHJvcGVydHlXZWJraXRTaGFwZUlu
c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUlu
c2lkZSkpOworICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
clNoYXBlKENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVJ
bnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUpKTsKICNlbmRpZgogCiAgICAgZ1By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVk
Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IsIE1heWJlSW52YWxpZENvbG9y
LCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0ZTBlZjdhOThiYWE2ODEwOWE4ODkxOTU4YWI5YzkwMTU2M2M4N2NhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICog
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25J
bnRlcnZhbC5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdHJ1Y3QgSW50ZXJ2YWxYMUNvbXBhcmF0b3IgewotICAgIGJvb2wgb3BlcmF0
b3IoKSAoY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGkxLCBjb25zdCBFeGNsdXNpb25JbnRlcnZh
bCYgaTIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaTEueDEgPCBpMi54MTsKLSAgICB9
Ci19OwotCi1ib29sIEV4Y2x1c2lvbkludGVydmFsOjppbnRlcnNlY3QoY29uc3QgRXhjbHVzaW9u
SW50ZXJ2YWwmIGksIEV4Y2x1c2lvbkludGVydmFsJiBydikgY29uc3QKLXsKLSAgICBpZiAoeDIg
PCBpLngxIHx8IHgxID4gaS54MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJ2LngxID0g
c3RkOjptYXgoeDEsIGkueDEpOwotICAgIHJ2LngyID0gc3RkOjptaW4oeDIsIGkueDIpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIHNvcnRFeGNsdXNpb25JbnRlcnZhbHMoVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYgdikKLXsKLSAgICBzdGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgp
LCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKLX0KLQotdm9pZCBtZXJnZUV4Y2x1c2lvbkludGVy
dmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYgdjIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJ2KQotewot
ICAgIGlmICghdjEuc2l6ZSgpKQotICAgICAgICBydi5hcHBlbmRSYW5nZSh2Mi5iZWdpbigpLCB2
Mi5lbmQoKSk7Ci0gICAgZWxzZSBpZiAoIXYyLnNpemUoKSkKLSAgICAgICAgcnYuYXBwZW5kUmFu
Z2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwotICAgIGVsc2UgewotICAgICAgICBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+IHYodjEuc2l6ZSgpICsgdjIuc2l6ZSgpKTsKLSAgICAgICAgRXhjbHVz
aW9uSW50ZXJ2YWwqIGludGVydmFsID0gMDsKLQotICAgICAgICBzdGQ6Om1lcmdlKHYxLmJlZ2lu
KCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgdi5iZWdpbigpLCBJbnRlcnZhbFgx
Q29tcGFyYXRvcigpKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHYuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgICAgIGlmICghaW50ZXJ2YWwpCi0gICAgICAgICAgICAgICAgaW50
ZXJ2YWwgPSAmdltpXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZbaV0ueDEgPj0gaW50ZXJ2YWwt
PngxICYmIHZbaV0ueDEgPD0gaW50ZXJ2YWwtPngyKSAvLyBGSVhNRTogMXN0IDw9IHRlc3Qgbm90
IG5lZWRlZD8KLSAgICAgICAgICAgICAgICBpbnRlcnZhbC0+eDIgPSBzdGQ6Om1heChpbnRlcnZh
bC0+eDIsIHZbaV0ueDIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcnYu
YXBwZW5kKCppbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnRlcnZhbCkKLSAgICAgICAg
ICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOwotICAgIH0KLX0KLQotdm9pZCBpbnRlcnNlY3RFeGNs
dXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjEsIGNvbnN0
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiBydikKLXsKLSAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOwotICAgIHNpemVfdCB2MlNp
emUgPSB2Mi5zaXplKCk7Ci0KLSAgICBpZiAoIXYxU2l6ZSB8fCAhdjJTaXplKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbDsKLSAgICBib29sIG92ZXJs
YXAgPSBmYWxzZTsKLSAgICBzaXplX3QgaTEgPSAwOwotICAgIHNpemVfdCBpMiA9IDA7Ci0KLSAg
ICB3aGlsZSAoaTEgPCB2MVNpemUgJiYgaTIgPCB2MlNpemUpIHsKLSAgICAgICAgRXhjbHVzaW9u
SW50ZXJ2YWwgdjEyOwotICAgICAgICBpZiAodjFbaTFdLmludGVyc2VjdCh2MltpMl0sIHYxMikp
IHsKLSAgICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmludGVyc2VjdChpbnRlcnZhbCwg
aW50ZXJ2YWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJsYXApCi0gICAgICAgICAgICAg
ICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSB2
MTI7Ci0gICAgICAgICAgICAgICAgb3ZlcmxhcCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAodjFbaTFdLngyIDwgdjJbaTJdLngyKQotICAgICAgICAgICAgICAgIGkxKys7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaTIrKzsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChvdmVybGFwKQotICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChp
bnRlcnZhbCk7Ci0gICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
djFbaTFdLngxIDwgdjJbaTJdLngxKQotICAgICAgICAgICAgICAgIGkxKys7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgaTIrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChvdmVybGFwKQotICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOwotfQotCi12b2lkIHN1YnRy
YWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYx
LCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiYgcnYpCi17Ci0gICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKLSAgICBzaXpl
X3QgdjJTaXplID0gdjIuc2l6ZSgpOwotCi0gICAgaWYgKCF2MVNpemUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghdjJTaXplKQotICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigp
LCB2MS5lbmQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNpemVfdCBpMSA9IDAsIGkyID0gMDsK
LSAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwotCi0gICAgICAg
IHdoaWxlIChpMSA8IHJ2LnNpemUoKSAmJiBpMiA8IHYyU2l6ZSkgewotICAgICAgICAgICAgRXhj
bHVzaW9uSW50ZXJ2YWwmIGludGVydmFsMSA9IHJ2W2kxXTsKLSAgICAgICAgICAgIGNvbnN0IEV4
Y2x1c2lvbkludGVydmFsJiBpbnRlcnZhbDIgPSB2MltpMl07Ci0KLSAgICAgICAgICAgIGlmIChp
bnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEu
eDIpCi0gICAgICAgICAgICAgICAgcnYucmVtb3ZlKGkxKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGludGVydmFsMi54MiA8IGludGVydmFsMS54MSkKLSAgICAgICAgICAgICAgICBpMiArPSAxOwot
ICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngyKQotICAgICAg
ICAgICAgICAgIGkxICs9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDEgPiBp
bnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngyKSB7Ci0gICAgICAgICAg
ICAgICAgcnYuaW5zZXJ0KGkxLCBFeGNsdXNpb25JbnRlcnZhbChpbnRlcnZhbDEueDEsIGludGVy
dmFsMi54MSkpOwotICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54MjsK
LSAgICAgICAgICAgICAgICBpMiArPSAxOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlcnZh
bDIueDEgPD0gaW50ZXJ2YWwxLngxKSB7Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0g
aW50ZXJ2YWwyLngyOwotICAgICAgICAgICAgICAgIGkyICs9IDE7Ci0gICAgICAgICAgICB9IGVs
c2UgIHsgLy8gKGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIpCi0gICAgICAgICAgICAgICAg
aW50ZXJ2YWwxLngyID0gaW50ZXJ2YWwyLngxOwotICAgICAgICAgICAgICAgIGkxICs9IDE7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZh
bC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMzFmZWIxODExM2RlOGMxZTQzNDFlMDEwMzcwOGI3
NzRjYTM1MWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25JbnRlcnZhbF9oCi0j
ZGVmaW5lIEV4Y2x1c2lvbkludGVydmFsX2gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRXhjbHVzaW9uSW50ZXJ2YWwgewotcHVibGlj
OgotICAgIGZsb2F0IHgxOwotICAgIGZsb2F0IHgyOwotCi0gICAgRXhjbHVzaW9uSW50ZXJ2YWwo
ZmxvYXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApCi0gICAgICAgIDogeDEoeDEpCi0gICAgICAgICwg
eDIoeDIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaW50ZXJzZWN0KGNvbnN0IEV4Y2x1c2lv
bkludGVydmFsJiwgRXhjbHVzaW9uSW50ZXJ2YWwmKSBjb25zdDsKLX07Ci0KLXZvaWQgc29ydEV4
Y2x1c2lvbkludGVydmFscyhWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jik7Ci12b2lkIG1lcmdl
RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBjb25z
dCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYp
Owotdm9pZCBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+Jik7Ci12b2lkIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+JiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFeGNsdXNpb25JbnRlcnZhbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE5Zjk3OGYzMGI1OGUyMTRiODRhOWQzZDFmOGQ0MDg3YWUwYjJhMjQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTEyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uUG9seWdvbi5o
IgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1lbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsKLSAgICBOb3JtYWwsCi0gICAgVmVydGV4TWlu
WSwKLSAgICBWZXJ0ZXhNYXhZLAotICAgIFZlcnRleFlCb3RoCi19OwotCi1zdHJ1Y3QgRWRnZUlu
dGVyc2VjdGlvbiB7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZTsKLSAgICBGbG9h
dFBvaW50IHBvaW50OwotICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHR5cGU7Ci19OwotCi1zdGF0
aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIHJl
dHVybiAoKHBvaW50LngoKSAtIHZlcnRleDEueCgpKSAqICh2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEu
eSgpKSkgLSAoKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpICogKHBvaW50LnkoKSAtIHZlcnRl
eDEueSgpKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlZmxleFZlcnRleChjb25zdCBG
bG9hdFBvaW50JiBwcmV2VmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZs
b2F0UG9pbnQmIG5leHRWZXJ0ZXgpCi17Ci0gICAgcmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgs
IG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAwOwotfQotCi1zdGF0aWMgYm9vbCBjb21wdXRlWEludGVy
c2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxvYXQgeSwgRWRn
ZUludGVyc2VjdGlvbiYgcmVzdWx0KQotewotICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVk
Z2UgPSAqZWRnZVBvaW50ZXI7Ci0KLSAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4
WSgpIDwgeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgRmxvYXRQb2ludCYg
dmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOwotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIg
PSBlZGdlLnZlcnRleDIoKTsKLSAgICBmbG9hdCBkeSA9IHZlcnRleDIueSgpIC0gdmVydGV4MS55
KCk7Ci0KLSAgICBmbG9hdCBpbnRlcnNlY3Rpb25YOwotICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBl
IGludGVyc2VjdGlvblR5cGU7Ci0KLSAgICBpZiAoIWR5KSB7Ci0gICAgICAgIGludGVyc2VjdGlv
blR5cGUgPSBWZXJ0ZXhZQm90aDsKLSAgICAgICAgaW50ZXJzZWN0aW9uWCA9IGVkZ2UubWluWCgp
OwotICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1pblkoKSkgewotICAgICAgICBpbnRlcnNlY3Rp
b25UeXBlID0gVmVydGV4TWluWTsKLSAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnko
KSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVydGV4Mi54KCk7Ci0gICAgfSBlbHNl
IGlmICh5ID09IGVkZ2UubWF4WSgpKSB7Ci0gICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0
ZXhNYXhZOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpID4gdmVydGV4Mi55
KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
bnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKCh5IC0g
dmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpIC8gZHkpICsgdmVydGV4
MS54KCk7Ci0gICAgfQotCi0gICAgcmVzdWx0LmVkZ2UgPSBlZGdlUG9pbnRlcjsKLSAgICByZXN1
bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7Ci0gICAgcmVzdWx0LnBvaW50LnNldChpbnRlcnNl
Y3Rpb25YLCB5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0
U2l6ZSBpbndhcmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UpCi17Ci0g
ICAgRmxvYXRTaXplIGVkZ2VEZWx0YSA9IGVkZ2UudmVydGV4MigpIC0gZWRnZS52ZXJ0ZXgxKCk7
Ci0gICAgaWYgKCFlZGdlRGVsdGEud2lkdGgoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgo
ZWRnZURlbHRhLmhlaWdodCgpID4gMCA/IC0xIDogMSksIDApOwotICAgIGlmICghZWRnZURlbHRh
LmhlaWdodCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKDAsIChlZGdlRGVsdGEud2lkdGgo
KSA+IDAgPyAxIDogLTEpKTsKLSAgICBmbG9hdCBlZGdlTGVuZ3RoID0gZWRnZURlbHRhLmRpYWdv
bmFsTGVuZ3RoKCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZSgtZWRnZURlbHRhLmhlaWdodCgpIC8g
ZWRnZUxlbmd0aCwgZWRnZURlbHRhLndpZHRoKCkgLyBlZGdlTGVuZ3RoKTsKLX0KLQotc3RhdGlj
IGlubGluZSBGbG9hdFNpemUgb3V0d2FyZEVkZ2VOb3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSYgZWRnZSkKLXsKLSAgICByZXR1cm4gLWlud2FyZEVkZ2VOb3JtYWwoZWRnZSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRBcmMoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNlcywg
Y29uc3QgRmxvYXRQb2ludCYgYXJjQ2VudGVyLCBmbG9hdCBhcmNSYWRpdXMsIGNvbnN0IEZsb2F0
UG9pbnQmIHN0YXJ0QXJjVmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiBlbmRBcmNWZXJ0ZXgsIGJv
b2wgcGFkZGluZykKLXsKLSAgICBmbG9hdCBzdGFydEFuZ2xlID0gYXRhbjIoc3RhcnRBcmNWZXJ0
ZXgueSgpIC0gYXJjQ2VudGVyLnkoKSwgc3RhcnRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngo
KSk7Ci0gICAgZmxvYXQgZW5kQW5nbGUgPSBhdGFuMihlbmRBcmNWZXJ0ZXgueSgpIC0gYXJjQ2Vu
dGVyLnkoKSwgZW5kQXJjVmVydGV4LngoKSAtIGFyY0NlbnRlci54KCkpOwotICAgIGNvbnN0IGZs
b2F0IHR3b1BJID0gcGlGbG9hdCAqIDI7Ci0gICAgaWYgKHN0YXJ0QW5nbGUgPCAwKQotICAgICAg
ICBzdGFydEFuZ2xlICs9IHR3b1BJOwotICAgIGlmIChlbmRBbmdsZSA8IDApCi0gICAgICAgIGVu
ZEFuZ2xlICs9IHR3b1BJOwotICAgIGZsb2F0IGFuZ2xlID0gKHN0YXJ0QW5nbGUgPiBlbmRBbmds
ZSkgPyAoc3RhcnRBbmdsZSAtIGVuZEFuZ2xlKSA6IChzdGFydEFuZ2xlICsgdHdvUEkgLSBlbmRB
bmdsZSk7Ci0gICAgY29uc3QgZmxvYXQgYXJjU2VnbWVudENvdW50ID0gNjsgLy8gQW4gZXZlbiBu
dW1iZXIgc28gdGhhdCBvbmUgYXJjIHZlcnRleCB3aWxsIGJlIGVhY3RseSBhcmNSYWRpdXMgZnJv
bSBhcmNDZW50ZXIuCi0gICAgZmxvYXQgYXJjU2VnbWVudEFuZ2xlID0gICgocGFkZGluZykgPyAt
YW5nbGUgOiB0d29QSSAtIGFuZ2xlKSAvIGFyY1NlZ21lbnRDb3VudDsKLQotICAgIHZlcnRpY2Vz
LmFwcGVuZChzdGFydEFyY1ZlcnRleCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFy
Y1NlZ21lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGFuZ2xlID0gc3RhcnRBbmdsZSAr
IGFyY1NlZ21lbnRBbmdsZSAqIGk7Ci0gICAgICAgIHZlcnRpY2VzLmFwcGVuZChhcmNDZW50ZXIg
KyBGbG9hdFBvaW50KGNvcyhhbmdsZSkgKiBhcmNSYWRpdXMsIHNpbihhbmdsZSkgKiBhcmNSYWRp
dXMpKTsKLSAgICB9Ci0gICAgdmVydGljZXMuYXBwZW5kKGVuZEFyY1ZlcnRleCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKFZlY3RvcjxGbG9h
dFBvaW50PiYgdmVydGljZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnRp
Y2VzLnNpemUoKTsgKytpKQotICAgICAgICB2ZXJ0aWNlc1tpXS5zZXQoTGF5b3V0VW5pdCh2ZXJ0
aWNlc1tpXS54KCkpLnRvRmxvYXQoKSwgTGF5b3V0VW5pdCh2ZXJ0aWNlc1tpXS55KCkpLnRvRmxv
YXQoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUGFzc093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1
dGVTaGFwZVBhZGRpbmdCb3VuZHMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBw
YWRkaW5nLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9p
bnQ+ID4gcGFkZGVkVmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkp
OwotICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0aW9uOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmxv
YXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBwb2x5Z29uLmVkZ2VBdChpKTsKLSAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVkZ2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsK
LSAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgdGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIGlud2Fy
ZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogcGFkZGluZyk7Ci0gICAgICAgIE9mZnNldFBvbHlnb25F
ZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdlLCBpbndhcmRFZGdlTm9ybWFsKHByZXZFZGdlKSAq
IHBhZGRpbmcpOwotCi0gICAgICAgIGlmIChwcmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhp
c09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikpCi0gICAgICAgICAgICBwYWRkZWRWZXJ0aWNlcy0+
YXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKGlzUmVmbGV4VmVydGV4KHBy
ZXZFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2UudmVydGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgyKCkp
KQotICAgICAgICAgICAgYXBwZW5kQXJjKCpwYWRkZWRWZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4
MSgpLCBwYWRkaW5nLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRFZGdlLnZl
cnRleDEoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3Jp
ZCgqcGFkZGVkVmVydGljZXMpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29u
KHBhZGRlZFZlcnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKGNvbnN0
IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgbWFyZ2luLCBXaW5kUnVsZSBmaWxsUnVsZSkK
LXsKLSAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gbWFyZ2luVmVydGljZXMgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KCkpOwotICAgIEZsb2F0UG9pbnQgaW50ZXJzZWN0
aW9uOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHlnb24ubnVtYmVyT2ZFZGdl
cygpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSBw
b2x5Z29uLmVkZ2VBdChpKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgcHJldkVk
Z2UgPSB0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKTsKLSAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2Ug
dGhpc09mZnNldEVkZ2UodGhpc0VkZ2UsIG91dHdhcmRFZGdlTm9ybWFsKHRoaXNFZGdlKSAqIG1h
cmdpbik7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHByZXZPZmZzZXRFZGdlKHByZXZFZGdl
LCBvdXR3YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkgKiBtYXJnaW4pOwotCi0gICAgICAgIGlmIChw
cmV2T2Zmc2V0RWRnZS5pbnRlcnNlY3Rpb24odGhpc09mZnNldEVkZ2UsIGludGVyc2VjdGlvbikp
Ci0gICAgICAgICAgICBtYXJnaW5WZXJ0aWNlcy0+YXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZEFyYygqbWFyZ2luVmVydGljZXMsIHRoaXNFZGdl
LnZlcnRleDEoKSwgbWFyZ2luLCBwcmV2T2Zmc2V0RWRnZS52ZXJ0ZXgyKCksIHRoaXNPZmZzZXRF
ZGdlLnZlcnRleDEoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0
VW5pdEdyaWQoKm1hcmdpblZlcnRpY2VzKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0
UG9seWdvbihtYXJnaW5WZXJ0aWNlcy5yZWxlYXNlKCksIGZpbGxSdWxlKSk7Ci19Ci0KLWNvbnN0
IEZsb2F0UG9seWdvbiYgRXhjbHVzaW9uUG9seWdvbjo6c2hhcGVQYWRkaW5nQm91bmRzKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoc2hhcGVQYWRkaW5nKCkgPj0gMCk7Ci0gICAgaWYgKCFzaGFwZVBh
ZGRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbjsKLQotICAgIGlmICghbV9wYWRkaW5n
Qm91bmRzKQotICAgICAgICBtX3BhZGRpbmdCb3VuZHMgPSBjb21wdXRlU2hhcGVQYWRkaW5nQm91
bmRzKG1fcG9seWdvbiwgc2hhcGVQYWRkaW5nKCksIG1fcG9seWdvbi5maWxsUnVsZSgpKTsKLQot
ICAgIHJldHVybiAqbV9wYWRkaW5nQm91bmRzOwotfQotCi1jb25zdCBGbG9hdFBvbHlnb24mIEV4
Y2x1c2lvblBvbHlnb246OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
c2hhcGVNYXJnaW4oKSA+PSAwKTsKLSAgICBpZiAoIXNoYXBlTWFyZ2luKCkpCi0gICAgICAgIHJl
dHVybiBtX3BvbHlnb247Ci0KLSAgICBpZiAoIW1fbWFyZ2luQm91bmRzKQotICAgICAgICBtX21h
cmdpbkJvdW5kcyA9IGNvbXB1dGVTaGFwZU1hcmdpbkJvdW5kcyhtX3BvbHlnb24sIHNoYXBlTWFy
Z2luKCksIG1fcG9seWdvbi5maWxsUnVsZSgpKTsKLQotICAgIHJldHVybiAqbV9tYXJnaW5Cb3Vu
ZHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNl
cyhjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24sIEZsb2F0UG9pbnQmIHByZXZW
ZXJ0ZXgsIEZsb2F0UG9pbnQmIHRoaXNWZXJ0ZXgsIEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCi17
Ci0gICAgaWYgKGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleE1pblkgJiYgaW50ZXJzZWN0aW9u
LnR5cGUgIT0gVmVydGV4TWF4WSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJU
KGludGVyc2VjdGlvbi5lZGdlICYmIGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOwotICAg
IGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9ICooaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHln
b24oKSk7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqKGludGVyc2Vj
dGlvbi5lZGdlKTsKLQotICAgIGlmICgoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSAm
JiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRoaXNFZGdlLnZlcnRleDIoKS55KCkpKQotICAg
ICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSAmJiAodGhpc0VkZ2UudmVy
dGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIoKS55KCkpKSkgewotICAgICAgICBwcmV2VmVy
dGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXhJbmRl
eDEoKSk7Ci0gICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZl
cnRleEluZGV4MSgpKTsKLSAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhp
c0VkZ2UudmVydGV4SW5kZXgyKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZXZWZXJ0ZXgg
PSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsKLSAgICAgICAgdGhp
c1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgyKCkpOwotICAg
ICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS5uZXh0RWRnZSgpLnZl
cnRleEluZGV4MigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGFwcGVuZEludGVydmFsWChmbG9hdCB4LCBib29sIGluc2lkZSwgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQotewotICAgIGlmICghaW5zaWRlKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKEV4Y2x1c2lvbkludGVydmFsKHgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJl
c3VsdFtyZXN1bHQuc2l6ZSgpIC0gMV0ueDIgPSB4OwotCi0gICAgcmV0dXJuICFpbnNpZGU7Ci19
Ci0KLXN0YXRpYyBib29sIGNvbXBhcmVFZGdlSW50ZXJzZWN0aW9uWChjb25zdCBFZGdlSW50ZXJz
ZWN0aW9uJiBpbnRlcnNlY3Rpb24xLCBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rp
b24yKQotewotICAgIGZsb2F0IHgxID0gaW50ZXJzZWN0aW9uMS5wb2ludC54KCk7Ci0gICAgZmxv
YXQgeDIgPSBpbnRlcnNlY3Rpb24yLnBvaW50LngoKTsKLSAgICByZXR1cm4gKHgxID09IHgyKSA/
IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlvbjIudHlwZSA6IHgxIDwgeDI7Ci19Ci0K
LXN0YXRpYyB2b2lkIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhjb25zdCBGbG9hdFBvbHlnb24mIHBv
bHlnb24sIGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiBy
ZXN1bHQpCi17Ci0gICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAg
ICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5LCB5LCBlZGdlcykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFZlY3RvcjxFZGdlSW50ZXJzZWN0aW9uPiBpbnRlcnNlY3Rpb25zOwotICAg
IEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rp
b24oZWRnZXNbaV0sIHksIGludGVyc2VjdGlvbikgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVy
dGV4WUJvdGgpCi0gICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVuZChpbnRlcnNlY3Rpb24p
OwotICAgIH0KLQotICAgIGlmIChpbnRlcnNlY3Rpb25zLnNpemUoKSA8IDIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJlZ2luKCksIGludGVyc2VjdGlv
bnMuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50ZXJzZWN0aW9uWCk7Ci0KLSAgICB1bnNp
Z25lZCBpbmRleCA9IDA7Ci0gICAgaW50IHdpbmRDb3VudCA9IDA7Ci0gICAgYm9vbCBpbnNpZGUg
PSBmYWxzZTsKLQotICAgIHdoaWxlIChpbmRleCA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7Ci0g
ICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIHRoaXNJbnRlcnNlY3Rpb24gPSBpbnRlcnNl
Y3Rpb25zW2luZGV4XTsKLSAgICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBuZXh0SW50ZXJzZWN0
aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArIDFdOwotICAgICAgICAgICAgaWYgKCh0aGlzSW50
ZXJzZWN0aW9uLnBvaW50LngoKSA9PSBuZXh0SW50ZXJzZWN0aW9uLnBvaW50LngoKSkgJiYgKHRo
aXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZIHx8IHRoaXNJbnRlcnNlY3Rpb24udHlw
ZSA9PSBWZXJ0ZXhNYXhZKSkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzSW50ZXJzZWN0aW9u
LnR5cGUgPT0gbmV4dEludGVyc2VjdGlvbi50eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFNraXAgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3aG9zZSB0eXBlcyBhcmUgVmVydGV4TWF4WSxW
ZXJ0ZXhNYXhZIGFuZCBWZXJ0ZXhNaW5ZLFZlcnRleE1pblkuCi0gICAgICAgICAgICAgICAgICAg
IGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gUmVwbGFjZSBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0
ZXhNaW5ZLFZlcnRleE1heFkgb3IgVmVydGV4TWF4WSxWZXJ0ZXhNaW5ZIHdpdGggb25lIGludGVy
c2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0
aW9uLmVkZ2U7Ci0gICAgICAgIGJvb2wgZXZlbk9kZENyb3NzaW5nID0gIXdpbmRDb3VudDsKLQot
ICAgICAgICBpZiAocG9seWdvbi5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkgewotICAgICAg
ICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpID4gdGhpc0VkZ2UudmVy
dGV4MSgpLnkoKSkgPyAxIDogLTE7Ci0gICAgICAgICAgICBldmVuT2RkQ3Jvc3NpbmcgPSBldmVu
T2RkQ3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChldmVu
T2RkQ3Jvc3NpbmcpIHsKLSAgICAgICAgICAgIGJvb2wgZWRnZUNyb3NzaW5nID0gdGhpc0ludGVy
c2VjdGlvbi50eXBlID09IE5vcm1hbDsKLSAgICAgICAgICAgIGlmICghZWRnZUNyb3NzaW5nKSB7
Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwcmV2VmVydGV4OwotICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgdGhpc1ZlcnRleDsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IG5leHRW
ZXJ0ZXg7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGlj
ZXModGhpc0ludGVyc2VjdGlvbiwgcHJldlZlcnRleCwgdGhpc1ZlcnRleCwgbmV4dFZlcnRleCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgueSgpID09IHkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSAoaXNNaW5ZKSA/IHByZXZWZXJ0ZXgueSgp
ID4geSA6IHByZXZWZXJ0ZXgueSgpIDwgeTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
cHJldlZlcnRleC55KCkgPT0geSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2lu
ZyA9IChpc01pblkpID8gbmV4dFZlcnRleC55KCkgPiB5IDogbmV4dFZlcnRleC55KCkgPCB5Owot
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jv
c3NpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChlZGdlQ3Jvc3NpbmcpCi0gICAgICAgICAgICAgICAgaW5zaWRlID0gYXBwZW5kSW50
ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpLCBpbnNpZGUsIHJlc3VsdCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICArK2luZGV4OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29tcHV0
ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24s
IGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQot
ewotICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7Ci0gICAgaWYgKCFw
b2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBlZGdlcykpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHln
b25FZGdlICplZGdlID0gZWRnZXNbaV07Ci0gICAgICAgIGZsb2F0IHgxOwotICAgICAgICBmbG9h
dCB4MjsKLQotICAgICAgICBpZiAoZWRnZS0+bWluWSgpIDwgeTEpIHsKLSAgICAgICAgICAgIGNv
bXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkxLCBpbnRlcnNlY3Rpb24pOwotICAgICAgICAgICAg
eDEgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHgxID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPCBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2Ut
PnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOwotCi0gICAgICAgIGlmIChlZGdl
LT5tYXhZKCkgPiB5MikgewotICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwg
eTIsIGludGVyc2VjdGlvbik7Ci0gICAgICAgICAgICB4MiA9IGludGVyc2VjdGlvbi5wb2ludC54
KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeDIgPSAoZWRnZS0+dmVydGV4MSgpLnko
KSA+IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2UtPnZl
cnRleDIoKS54KCk7Ci0KLSAgICAgICAgaWYgKHgxID4geDIpCi0gICAgICAgICAgICBzdGQ6OnN3
YXAoeDEsIHgyKTsKLQotICAgICAgICBpZiAoeDIgPiB4MSkKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeDEsIHgyKSk7Ci0gICAgfQotCi0gICAgc29ydEV4Y2x1
c2lvbkludGVydmFscyhyZXN1bHQpOwotfQotCi12b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEV4
Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0UG9s
eWdvbiYgcG9seWdvbiA9IHNoYXBlTWFyZ2luQm91bmRzKCk7Ci0gICAgaWYgKHBvbHlnb24uaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Ci0g
ICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKLQotICAgIFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7Ci0gICAgY29tcHV0
ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOwotICAgIGNv
bXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHkyWEludGVydmFscyk7Ci0K
LSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdlZEludGVydmFsczsKLSAgICBtZXJn
ZUV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywgbWVyZ2VkSW50
ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZWRnZUludGVydmFsczsK
LSAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24sIHkxLCB5Miwg
ZWRnZUludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGV4Y2x1ZGVk
SW50ZXJ2YWxzOwotICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKG1lcmdlZEludGVydmFscywg
ZWRnZUludGVydmFscywgZXhjbHVkZWRJbnRlcnZhbHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEV4Y2x1
c2lvbkludGVydmFsIGludGVydmFsID0gZXhjbHVkZWRJbnRlcnZhbHNbaV07Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVydmFsLngyKSk7Ci0gICAg
fQotfQotCi12b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYg
cmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBl
UGFkZGluZ0JvdW5kcygpOwotICAgIGlmIChwb2x5Z29uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9naWNh
bFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkx
WEludGVydmFscywgeTJYSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5
Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMo
cG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiBjb21tb25JbnRlcnZhbHM7Ci0gICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2
YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMpOwotCi0gICAg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVPdmVy
bGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsK
LQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gaW5jbHVkZWRJbnRlcnZhbHM7Ci0gICAg
c3VidHJhY3RFeGNsdXNpb25JbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxz
LCBpbmNsdWRlZEludGVydmFscyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5j
bHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwg
aW50ZXJ2YWwgPSBpbmNsdWRlZEludGVydmFsc1tpXTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChM
aW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKLSAgICB9Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEs
IHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDIpCi17Ci0gICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9s
eWdvbkVkZ2UqPiBlZGdlczsKLSAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhyZWN0
LnkoKSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOwotICAgICAgICBpZiAoZWRnZS0+
ZWRnZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdlLT5lZGdlSW5kZXgoKSAhPSBv
ZmZzZXRFZGdlSW5kZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChyZWN0KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwgY29uc3QgRmxv
YXRSZWN0JiByMikKLXsKLSAgICBpZiAocjEueSgpIDwgcjIueSgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAocjEueSgpID09IHIyLnkoKSkKLSAgICAgICAgcmV0dXJuIHIxLngoKSA8
IHIyLngoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uUG9seWdvbjo6
Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRl
cnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0
VW5pdCYgcmVzdWx0KSBjb25zdAotewotICAgIGZsb2F0IG1pbkludGVydmFsVG9wID0gbWluTG9n
aWNhbEludGVydmFsVG9wOwotICAgIGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0gbWluTG9naWNh
bEludGVydmFsU2l6ZS5oZWlnaHQoKTsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbFdpZHRoID0gbWlu
TG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOwotCi0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAgY29uc3QgRmxvYXRSZWN0IGJvdW5k
aW5nQm94ID0gcG9seWdvbi5ib3VuZGluZ0JveCgpOwotICAgIGlmIChtaW5JbnRlcnZhbFdpZHRo
ID4gYm91bmRpbmdCb3gud2lkdGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxv
YXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluSW50ZXJ2YWxUb3ApOwotICAg
IGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7Ci0KLSAgICBpZiAobWF4WSA+
IGJvdW5kaW5nQm94Lm1heFkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9y
PGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBwb2x5Z29uLm92ZXJsYXBwaW5n
RWRnZXMobWluSW50ZXJ2YWxUb3AsIGJvdW5kaW5nQm94Lm1heFkoKSwgZWRnZXMpOwotCi0gICAg
ZmxvYXQgZHggPSBtaW5JbnRlcnZhbFdpZHRoIC8gMjsKLSAgICBmbG9hdCBkeSA9IG1pbkludGVy
dmFsSGVpZ2h0IC8gMjsKLSAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2Vz
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqKGVkZ2VzW2ldKTsKLSAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJldmlvdXNFZGdlKCkudmVydGV4
MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52ZXJ0ZXgxKCk7
Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKLSAg
ICAgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRFZGdlQnVmZmVyOwotCi0gICAg
ICAgIGlmICh2ZXJ0ZXgyLnkoKSA+IHZlcnRleDEueSgpID8gdmVydGV4Mi54KCkgPj0gdmVydGV4
MS54KCkgOiB2ZXJ0ZXgxLngoKSA+PSB2ZXJ0ZXgyLngoKSkgewotICAgICAgICAgICAgb2Zmc2V0
RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKGR4LCAt
ZHkpKSk7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29u
RWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZs
b2F0U2l6ZShkeCwgZHkpKSk7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChP
ZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCAtZHkpKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoaXNSZWZsZXhWZXJ0ZXgodmVydGV4MCwgdmVydGV4MSwgdmVydGV4Mikp
IHsKLSAgICAgICAgICAgIGlmICh2ZXJ0ZXgyLngoKSA8PSB2ZXJ0ZXgxLngoKSAmJiB2ZXJ0ZXgw
LngoKSA8PSB2ZXJ0ZXgxLngoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFw
cGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoZHgsIC1keSksIEZsb2F0
U2l6ZShkeCwgZHkpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2ZXJ0ZXgyLngoKSA+PSB2ZXJ0
ZXgxLngoKSAmJiB2ZXJ0ZXgwLngoKSA+PSB2ZXJ0ZXgxLngoKSkKLSAgICAgICAgICAgICAgICBv
ZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNp
emUoLWR4LCAtZHkpLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKLSAgICAgICAgICAgIGlmICh2ZXJ0
ZXgyLnkoKSA8PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0ZXgwLnkoKSA8PSB2ZXJ0ZXgxLnkoKSkKLSAg
ICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2
ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCBkeSksIEZsb2F0U2l6ZShkeCwgZHkpKSk7Ci0gICAgICAg
ICAgICBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0ZXgwLnkoKSA+
PSB2ZXJ0ZXgxLnkoKSkKLSAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChP
ZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCAtZHkpLCBGbG9hdFNpemUo
ZHgsIC1keSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBvZmZzZXRFZGdlQnVmZmVyLnNpemUoKTsgKytqKQotICAgICAgICAgICAgaWYgKG9mZnNldEVk
Z2VCdWZmZXJbal0ubWF4WSgpID49IG1pblkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0RWRnZXMu
YXBwZW5kKG9mZnNldEVkZ2VCdWZmZXJbal0pOwotICAgIH0KLQotICAgIG9mZnNldEVkZ2VzLmFw
cGVuZChPZmZzZXRQb2x5Z29uRWRnZShwb2x5Z29uLCBtaW5JbnRlcnZhbFRvcCwgRmxvYXRTaXpl
KDAsIGR5KSkpOwotCi0gICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbjsKLSAg
ICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OwotICAgIGJvb2wgZmlyc3RGaXRGb3VuZCA9IGZhbHNl
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9mZnNldEVkZ2VzLnNpemUoKSAtIDE7
ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG9mZnNldEVkZ2Vz
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0RWRnZXNbaV0uaW50ZXJzZWN0
aW9uKG9mZnNldEVkZ2VzW2pdLCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50IHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ob2Zmc2V0RWRnZXNJ
bnRlcnNlY3Rpb24ueCgpIC0gZHgsIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uLnkoKSAtIGR5KTsK
LSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcG90ZW50aWFsRmlyc3RGaXRSZWN0KHBvdGVudGlh
bEZpcnN0Rml0TG9jYXRpb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUpOwotICAgICAgICAgICAg
ICAgIGlmICgob2Zmc2V0RWRnZXNbaV0uYmFzaXMoKSA9PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGlu
ZVRvcAotICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXRFZGdlc1tqXS5iYXNpcygpID09IE9m
ZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCi0gICAgICAgICAgICAgICAgICAgIHx8IHBvdGVudGlh
bEZpcnN0Rml0TG9jYXRpb24ueSgpID49IG1pbkludGVydmFsVG9wKQotICAgICAgICAgICAgICAg
ICAgICAmJiAoIWZpcnN0Rml0Rm91bmQgfHwgYWJvdmVPclRvVGhlTGVmdChwb3RlbnRpYWxGaXJz
dEZpdFJlY3QsIGZpcnN0Rml0UmVjdCkpCi0gICAgICAgICAgICAgICAgICAgICYmIHBvbHlnb24u
Y29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgICYm
IGZpcnN0Rml0UmVjdEluUG9seWdvbihwb2x5Z29uLCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIG9m
ZnNldEVkZ2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdlc1tqXS5lZGdlSW5kZXgoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0Rml0UmVjdCA9IHBvdGVudGlhbEZpcnN0Rml0UmVjdDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmlyc3RG
aXRGb3VuZCkKLSAgICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChmaXJzdEZpdFJlY3Qu
eSgpKTsKLSAgICByZXR1cm4gZmlyc3RGaXRGb3VuZDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHln
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ODU1M2FiMjFkMDY0NDFiZWJhMzAxOWFjMGI5YTUy
ODZhNWZlZTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaAorKysgL2Rldi9udWxs
CkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25Qb2x5Z29uX2gKLSNk
ZWZpbmUgRXhjbHVzaW9uUG9seWdvbl9oCi0KLSNpbmNsdWRlICJFeGNsdXNpb25JbnRlcnZhbC5o
IgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgT2Zmc2V0UG9seWdvbkVkZ2UgOiBwdWJs
aWMgVmVydGV4UGFpciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBCYXNpcyB7Ci0gICAgICAgIEVkZ2Us
Ci0gICAgICAgIFZlcnRleCwKLSAgICAgICAgTGluZVRvcAotICAgIH07Ci0KLSAgICBPZmZzZXRQ
b2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUm
IG9mZnNldCkKLSAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgxKCkgKyBvZmZzZXQpCi0g
ICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0KQotICAgICAgICAsIG1f
ZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkpCi0gICAgICAgICwgbV9iYXNpcyhFZGdlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvaW50JiByZWZs
ZXhWZXJ0ZXgsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MSwgY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQyKQotICAgICAgICA6IG1fdmVydGV4MShyZWZsZXhWZXJ0ZXggKyBvZmZzZXQxKQotICAgICAg
ICAsIG1fdmVydGV4MihyZWZsZXhWZXJ0ZXggKyBvZmZzZXQyKQotICAgICAgICAsIG1fZWRnZUlu
ZGV4KC0xKQotICAgICAgICAsIG1fYmFzaXMoVmVydGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICBP
ZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1pbkxv
Z2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIDogbV92
ZXJ0ZXgxKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLngoKSwgbWluTG9naWNhbElu
dGVydmFsVG9wKSArIG9mZnNldCkKLSAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQb2ludChwb2x5
Z29uLmJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0
KQotICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQotICAgICAgICAsIG1fYmFzaXMoTGluZVRvcCkK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgxOyB9Ci0gICAgdmlydHVhbCBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgyOyB9
Ci0gICAgaW50IGVkZ2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9Ci0gICAg
QmFzaXMgYmFzaXMoKSBjb25zdCB7IHJldHVybiBtX2Jhc2lzOyB9Ci0KLXByaXZhdGU6Ci0gICAg
RmxvYXRQb2ludCBtX3ZlcnRleDE7Ci0gICAgRmxvYXRQb2ludCBtX3ZlcnRleDI7Ci0gICAgaW50
IG1fZWRnZUluZGV4OwotICAgIEJhc2lzIG1fYmFzaXM7Ci19OwotCi1jbGFzcyBFeGNsdXNpb25Q
b2x5Z29uIDogcHVibGljIEV4Y2x1c2lvblNoYXBlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShFeGNsdXNpb25Qb2x5Z29uKTsKLXB1YmxpYzoKLSAgICBFeGNsdXNpb25Qb2x5Z29uKFBhc3NP
d25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQot
ICAgICAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAgICAgLCBtX3BvbHlnb24odmVydGljZXMs
IGZpbGxSdWxlKQotICAgICAgICAsIG1fbWFyZ2luQm91bmRzKG51bGxwdHIpCi0gICAgICAgICwg
bV9wYWRkaW5nQm91bmRzKG51bGxwdHIpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2luQm91bmRzKCkuYm91bmRp
bmdCb3goKSk7IH0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJv
dW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVj
dD4oc2hhcGVQYWRkaW5nQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9seWdvbi5pc0VtcHR5KCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQg
bG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2Fs
VG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBt
aW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3QgT1ZFUlJJREU7Ci0KLXBy
aXZhdGU6Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0
OwotICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3Q7Ci0K
LSAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOwotICAgIG11dGFibGUgT3duUHRyPEZsb2F0UG9s
eWdvbj4gbV9tYXJnaW5Cb3VuZHM7Ci0gICAgbXV0YWJsZSBPd25QdHI8RmxvYXRQb2x5Z29uPiBt
X3BhZGRpbmdCb3VuZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFeGNsdXNpb25Qb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblJlY3RhbmdsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YjUyMDI2
ZThhMWUxNmNmNGUzZjliNmM5ZDJhYjFkMjVmMGVmYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blJlY3RhbmdsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25SZWN0YW5nbGUuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGlubGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5LCBmbG9hdCByeCwgZmxvYXQg
cnkpCi17Ci0gICAgQVNTRVJUKHJ5ID4gMCk7Ci0gICAgcmV0dXJuIHJ4ICogc3FydCgxIC0gKHkg
KiB5KSAvIChyeSAqIHJ5KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgZWxsaXBzZVlJbnRl
cmNlcHQoZmxvYXQgeCwgZmxvYXQgcngsIGZsb2F0IHJ5KQotewotICAgIEFTU0VSVChyeCA+IDAp
OwotICAgIHJldHVybiByeSAqIHNxcnQoMSAtICh4ICogeCkgLyAocnggKiByeCkpOwotfQotCi1G
bG9hdFJvdW5kZWRSZWN0IEZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdCb3VuZHMoZmxvYXQgcGFk
ZGluZykgY29uc3QKLXsKLSAgICBBU1NFUlQocGFkZGluZyA+PSAwKTsKLSAgICBpZiAoIXBhZGRp
bmcgfHwgaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBmbG9hdCBib3Vu
ZHNYID0geCgpICsgc3RkOjptaW4od2lkdGgoKSAvIDIsIHBhZGRpbmcpOwotICAgIGZsb2F0IGJv
dW5kc1kgPSB5KCkgKyBzdGQ6Om1pbihoZWlnaHQoKSAvIDIsIHBhZGRpbmcpOwotICAgIGZsb2F0
IGJvdW5kc1dpZHRoID0gc3RkOjptYXgoMC4wZiwgd2lkdGgoKSAtIHBhZGRpbmcgKiAyKTsKLSAg
ICBmbG9hdCBib3VuZHNIZWlnaHQgPSBzdGQ6Om1heCgwLjBmLCBoZWlnaHQoKSAtIHBhZGRpbmcg
KiAyKTsKLSAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gc3RkOjptYXgoMC4wZiwgcngoKSAtIHBh
ZGRpbmcpOwotICAgIGZsb2F0IGJvdW5kc1JhZGl1c1kgPSBzdGQ6Om1heCgwLjBmLCByeSgpIC0g
cGFkZGluZyk7Ci0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxvYXRSZWN0KGJvdW5kc1gs
IGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9hdFNpemUoYm91bmRzUmFk
aXVzWCwgYm91bmRzUmFkaXVzWSkpOwotfQotCi1GbG9hdFJvdW5kZWRSZWN0IEZsb2F0Um91bmRl
ZFJlY3Q6Om1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1h
cmdpbiA+PSAwKTsKLSAgICBpZiAoIW1hcmdpbikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0g
ICAgZmxvYXQgYm91bmRzWCA9IHgoKSAtIG1hcmdpbjsKLSAgICBmbG9hdCBib3VuZHNZID0geSgp
IC0gbWFyZ2luOwotICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gd2lkdGgoKSArIG1hcmdpbiAqIDI7
Ci0gICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gaGVpZ2h0KCkgKyBtYXJnaW4gKiAyOwotICAgIGZs
b2F0IGJvdW5kc1JhZGl1c1ggPSByeCgpICsgbWFyZ2luOwotICAgIGZsb2F0IGJvdW5kc1JhZGl1
c1kgPSByeSgpICsgbWFyZ2luOwotICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0KEZsb2F0UmVj
dChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0KSwgRmxvYXRTaXpl
KGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKLX0KLQotRmxvYXRQb2ludCBGbG9hdFJv
dW5kZWRSZWN0Ojpjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3aWR0aEF0SW50ZXJjZXB0
KSBjb25zdAotewotICAgIGZsb2F0IHhpID0gKHdpZHRoKCkgLSB3aWR0aEF0SW50ZXJjZXB0KSAv
IDI7Ci0gICAgZmxvYXQgeWkgPSByeSgpIC0gZWxsaXBzZVlJbnRlcmNlcHQocngoKSAtIHhpLCBy
eCgpLCByeSgpKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludCh4aSwgeWkpOwotfQotCi1GbG9hdFJv
dW5kZWRSZWN0IEV4Y2x1c2lvblJlY3RhbmdsZTo6c2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcykgewotICAgICAgICBt
X2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgPSB0cnVlOwotICAgICAgICBtX3BhZGRpbmdC
b3VuZHMgPSBtX2JvdW5kcy5wYWRkaW5nQm91bmRzKHNoYXBlUGFkZGluZygpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG1fcGFkZGluZ0JvdW5kczsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBFeGNsdXNp
b25SZWN0YW5nbGU6OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGF2
ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzKSB7Ci0gICAgICAgIG1faGF2ZUluaXRpYWxpemVkTWFy
Z2luQm91bmRzID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBtX2JvdW5kcy5tYXJn
aW5Cb3VuZHMoc2hhcGVNYXJnaW4oKSk7Ci0gICAgfQotICAgIHJldHVybiBtX21hcmdpbkJvdW5k
czsKLX0KLQotdm9pZCBFeGNsdXNpb25SZWN0YW5nbGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlz
dCYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9
IHNoYXBlTWFyZ2luQm91bmRzKCk7Ci0gICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IGxv
Z2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgaWYgKHkyIDwgYm91bmRzLnkoKSB8fCB5
MSA+PSBib3VuZHMubWF4WSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB4MSA9IGJv
dW5kcy54KCk7Ci0gICAgZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOwotCi0gICAgaWYgKGJvdW5k
cy5yeSgpID4gMCkgewotICAgICAgICBpZiAoeTIgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCkp
IHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0geTIgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7
Ci0gICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngo
KSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRzLnJ4
KCkgLSB4aTsKLSAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgpICsg
eGk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeTEgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkp
IHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0gIHkxIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMu
cnkoKSk7Ci0gICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3Vu
ZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91
bmRzLnJ4KCkgLSB4aTsKLSAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5y
eCgpICsgeGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdt
ZW50KHgxLCB4MikpOwotfQotCi12b2lkIEV4Y2x1c2lvblJlY3RhbmdsZTo6Z2V0SW5jbHVkZWRJ
bnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgYm91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAgaWYgKGJvdW5kcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBm
bG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgaWYgKHkxIDwgYm91
bmRzLnkoKSB8fCB5MiA+IGJvdW5kcy5tYXhZKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZs
b2F0IHgxID0gYm91bmRzLngoKTsKLSAgICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7Ci0KLSAg
ICBpZiAoYm91bmRzLnJ5KCkgPiAwKSB7Ci0gICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29ybmVy
ID0geTEgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCk7Ci0gICAgICAgIGJvb2wgeTJJbnRlcmNl
cHRzQ29ybmVyID0geTIgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCk7Ci0gICAgICAgIGZs
b2F0IHhpID0gMDsKLQotICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyICYmIHkySW50ZXJj
ZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgaWYgICh5MSA8IGJvdW5kcy5oZWlnaHQoKSArIDIg
KiBib3VuZHMueSgpIC0geTIpIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91
bmRzLnkoKSAtIGJvdW5kcy5yeSgpOwotICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRl
cmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3Vu
ZHMucnkoKSk7Ci0gICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91
bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
ICh5MUludGVyY2VwdHNDb3JuZXIpIHsKLSAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3Vu
ZHMueSgpIC0gYm91bmRzLnJ5KCk7Ci0gICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0
KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICB9IGVsc2UgaWYgKHkySW50
ZXJjZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1h
eFkoKSAtIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQo
eWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
eTFJbnRlcmNlcHRzQ29ybmVyIHx8IHkySW50ZXJjZXB0c0Nvcm5lcikgewotICAgICAgICAgICAg
eDEgPSBib3VuZHMueCgpICsgYm91bmRzLnJ4KCkgLSB4aTsKLSAgICAgICAgICAgIHgyID0gYm91
bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgpICsgeGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KHgxLCB4MikpOwotfQotCi1ib29sIEV4Y2x1c2lvblJl
Y3RhbmdsZTo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxv
Z2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6
ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAotewotICAgIGZsb2F0IG1pbkludGVydmFsVG9w
ID0gbWluTG9naWNhbEludGVydmFsVG9wOwotICAgIGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0g
bWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbFdp
ZHRoID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOwotCi0gICAgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAgaWYgKGJvdW5k
cy5pc0VtcHR5KCkgfHwgbWluSW50ZXJ2YWxXaWR0aCA+IGJvdW5kcy53aWR0aCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBtaW5ZID0gc3RkOjptYXgoYm91bmRzLnkoKSwg
bWluSW50ZXJ2YWxUb3ApOwotICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWln
aHQ7Ci0KLSAgICBpZiAobWF4WSA+IGJvdW5kcy5tYXhZKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGJvb2wgaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciA9IG1pblkgPCBib3VuZHMu
eSgpICsgYm91bmRzLnJ5KCk7Ci0gICAgYm9vbCBpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyID0g
bWF4WSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKLQotICAgIGlmICghaW50ZXJ2YWxP
dmVybGFwc01pbkNvcm5lciAmJiAhaW50ZXJ2YWxPdmVybGFwc01heENvcm5lcikgewotICAgICAg
ICByZXN1bHQgPSBtaW5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBmbG9h
dCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDI7Ci0gICAgYm9vbCBt
aW5Db3JuZXJEZWZpbmVzWCA9IGZhYnMoY2VudGVyWSAtIG1pblkpID4gZmFicyhjZW50ZXJZIC0g
bWF4WSk7Ci0gICAgYm9vbCBpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzID0gbWluSW50ZXJ2YWxX
aWR0aCArIDIgKiBib3VuZHMucngoKSA8PSBib3VuZHMud2lkdGgoKTsKLSAgICBGbG9hdFBvaW50
IGNvcm5lckludGVyY2VwdCA9IGJvdW5kcy5jb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChtaW5JbnRl
cnZhbFdpZHRoKTsKLQotICAgIGlmIChpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyICYmICghaW50
ZXJ2YWxPdmVybGFwc01heENvcm5lciB8fCBtaW5Db3JuZXJEZWZpbmVzWCkpIHsKLSAgICAgICAg
aWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgYm91bmRzLnkoKSArIGNvcm5lckludGVy
Y2VwdC55KCkgPCBtaW5ZKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtaW5ZOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1pbkludGVydmFsSGVpZ2h0
IDwgYm91bmRzLmhlaWdodCgpIC0gKDIgKiBjb3JuZXJJbnRlcmNlcHQueSgpKSkgewotICAgICAg
ICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChib3VuZHMueSgpICsgY29ybmVySW50ZXJj
ZXB0LnkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyICYmICghaW50ZXJ2YWxPdmVybGFwc01p
bkNvcm5lciB8fCAhbWluQ29ybmVyRGVmaW5lc1gpKSB7Ci0gICAgICAgIGlmIChpbnRlcnZhbEZp
dHNXaXRoaW5Db3JuZXJzIHx8IG1pblkgPD0gIGJvdW5kcy5tYXhZKCkgLSBjb3JuZXJJbnRlcmNl
cHQueSgpIC0gbWluSW50ZXJ2YWxIZWlnaHQpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzMDlmZGFjMTYzYzEyZWU3M2QyYmU4OTNlZjMxODhiZDMyNzdjMmEwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblJlY3RhbmdsZV9oCi0jZGVmaW5lIEV4Y2x1c2lvblJl
Y3RhbmdsZV9oCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIK
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFJvdW5kZWRSZWN0IDogcHVibGljIEZs
b2F0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCgpIHsgfQotICAgIEZsb2F0
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFk
aWkpCi0gICAgICAgIDogRmxvYXRSZWN0KGJvdW5kcykKLSAgICAgICAgLCBtX3JhZGlpKHJhZGlp
KQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCByeCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWku
d2lkdGgoKTsgfQotICAgIGZsb2F0IHJ5KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpaS5oZWlnaHQo
KTsgfQotICAgIEZsb2F0Um91bmRlZFJlY3QgbWFyZ2luQm91bmRzKGZsb2F0IG1hcmdpbikgY29u
c3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBwYWRkaW5nQm91bmRzKGZsb2F0IHBhZGRpbmcpIGNv
bnN0OwotICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lkdGgp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZsb2F0U2l6ZSBtX3JhZGlpOwotfTsKLQotY2xhc3Mg
RXhjbHVzaW9uUmVjdGFuZ2xlIDogcHVibGljIEV4Y2x1c2lvblNoYXBlIHsKLXB1YmxpYzoKLSAg
ICBFeGNsdXNpb25SZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0
U2l6ZSYgcmFkaWkpCi0gICAgICAgIDogRXhjbHVzaW9uU2hhcGUoKQotICAgICAgICAsIG1fYm91
bmRzKGJvdW5kcywgcmFkaWkpCi0gICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3Vu
ZHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKGZhbHNl
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dp
Y2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlv
dXRSZWN0PihzaGFwZU1hcmdpbkJvdW5kcygpKTsgfQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBz
aGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBz
dGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKSk7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91bmRzLmlzRW1w
dHkoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0Jikg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExv
Z2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNp
emUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklERTsK
LQotcHJpdmF0ZToKLSAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlTWFyZ2luQm91bmRzKCkgY29u
c3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdDsKLQot
ICAgIEZsb2F0Um91bmRlZFJlY3QgbV9ib3VuZHM7Ci0gICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRS
ZWN0IG1fbWFyZ2luQm91bmRzOwotICAgIG11dGFibGUgRmxvYXRSb3VuZGVkUmVjdCBtX3BhZGRp
bmdCb3VuZHM7Ci0gICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRz
IDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzIDog
MTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEV4Y2x1c2lvblJl
Y3RhbmdsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlNjQwZGI1ZDc2MTc0NGE0YTAxYjY4MDVi
ODVjNzhjYmIwNjdkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUg
U3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKLQotI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMu
aCIKLSNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uUmVj
dGFuZ2xlLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiTGVuZ3RoRnVuY3Rp
b25zLmgiCi0jaW5jbHVkZSAiV2luZFJ1bGUuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBl
PiBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0
IEZsb2F0U2l6ZSYgcmFkaWkpCi17Ci0gICAgQVNTRVJUKGJvdW5kcy53aWR0aCgpID49IDAgJiYg
Ym91bmRzLmhlaWdodCgpID49IDAgJiYgcmFkaWkud2lkdGgoKSA+PSAwICYmIHJhZGlpLmhlaWdo
dCgpID49IDApOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUmVjdGFuZ2xlKGJv
dW5kcywgcmFkaWkpKTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNy
ZWF0ZUV4Y2x1c2lvbkNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1
cykKLXsKLSAgICBBU1NFUlQocmFkaXVzID49IDApOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcg
RXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaXVzLCBjZW50ZXIu
eSgpIC0gcmFkaXVzLCByYWRpdXMqMiwgcmFkaXVzKjIpLCBGbG9hdFNpemUocmFkaXVzLCByYWRp
dXMpKSk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNs
dXNpb25FbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgY29uc3QgRmxvYXRTaXplJiBy
YWRpaSkKLXsKLSAgICBBU1NFUlQocmFkaWkud2lkdGgoKSA+PSAwICYmIHJhZGlpLmhlaWdodCgp
ID49IDApOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUmVjdGFuZ2xlKEZsb2F0
UmVjdChjZW50ZXIueCgpIC0gcmFkaWkud2lkdGgoKSwgY2VudGVyLnkoKSAtIHJhZGlpLmhlaWdo
dCgpLCByYWRpaS53aWR0aCgpKjIsIHJhZGlpLmhlaWdodCgpKjIpLCByYWRpaSkpOwotfQotCi1z
dGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uUG9seWdvbihQ
YXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVs
ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblBvbHlnb24odmVydGljZXMs
IGZpbGxSdWxlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IHBoeXNpY2FsUmVjdFRv
TG9naWNhbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQsIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiByZWN0OwotICAgIGlmIChpc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
cmVjdC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSByZWN0Lm1heFgoKSwgcmVjdC5oZWlnaHQoKSwg
cmVjdC53aWR0aCgpKTsKLSAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwotfQotCi1z
dGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkK
LSAgICAgICAgcmV0dXJuIHBvaW50OwotICAgIGlmIChpc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KHBvaW50LnkoKSwgbG9n
aWNhbEJveEhlaWdodCAtIHBvaW50LngoKSk7Ci0gICAgcmV0dXJuIHBvaW50LnRyYW5zcG9zZWRQ
b2ludCgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBwaHlzaWNhbFNpemVUb0xvZ2lj
YWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1
cm4gc2l6ZTsKLSAgICByZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwotfQotCi1QYXNzT3du
UHRyPEV4Y2x1c2lvblNoYXBlPiBFeGNsdXNpb25TaGFwZTo6Y3JlYXRlRXhjbHVzaW9uU2hhcGUo
Y29uc3QgQmFzaWNTaGFwZSogYmFzaWNTaGFwZSwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNhbEJv
eFNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFk
ZGluZykKLXsKLSAgICBBU1NFUlQoYmFzaWNTaGFwZSk7Ci0KLSAgICBib29sIGhvcml6b250YWxX
cml0aW5nTW9kZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKLSAgICBm
bG9hdCBib3hXaWR0aCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLndp
ZHRoKCkgOiBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKTsKLSAgICBmbG9hdCBib3hIZWlnaHQgPSBo
b3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSA6IGxvZ2ljYWxC
b3hTaXplLndpZHRoKCk7Ci0gICAgT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBleGNsdXNpb25TaGFw
ZTsKLQotICAgIHN3aXRjaCAoYmFzaWNTaGFwZS0+dHlwZSgpKSB7Ci0KLSAgICBjYXNlIEJhc2lj
U2hhcGU6OkJhc2ljU2hhcGVSZWN0YW5nbGVUeXBlOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljU2hh
cGVSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVSZWN0
YW5nbGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kcygKLSAgICAgICAg
ICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT54KCksIGJveFdpZHRoKSwKLSAgICAg
ICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT55KCksIGJveEhlaWdodCksCi0g
ICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+d2lkdGgoKSwgYm94V2lk
dGgpLAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmhlaWdodCgp
LCBib3hIZWlnaHQpKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1hMZW5ndGggPSByZWN0YW5nbGUt
PmNvcm5lclJhZGl1c1goKTsKLSAgICAgICAgTGVuZ3RoIHJhZGl1c1lMZW5ndGggPSByZWN0YW5n
bGUtPmNvcm5lclJhZGl1c1koKTsKLSAgICAgICAgRmxvYXRTaXplIGNvcm5lclJhZGlpKAotICAg
ICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JM
ZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgpLAotICAgICAgICAgICAgcmFkaXVzWUxlbmd0
aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0aCwg
Ym94SGVpZ2h0KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsQm91bmRzID0gcGh5c2ljYWxS
ZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2Rl
KTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvblJlY3RhbmdsZShs
b2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVyUmFkaWksIHdyaXRpbmdN
b2RlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFz
aWNTaGFwZUNpcmNsZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZUNpcmNsZSogY2ly
Y2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUNpcmNsZSo+KGJhc2ljU2hhcGUpOwot
ICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRl
clgoKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChjaXJjbGUtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKLSAgICAgICAgZmxvYXQgcmFkaXVz
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPnJhZGl1cygpLCBzdGQ6Om1pbihib3hIZWln
aHQsIGJveFdpZHRoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRlciA9IHBoeXNp
Y2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgbG9naWNhbEJv
eFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9
IGNyZWF0ZUV4Y2x1c2lvbkNpcmNsZShsb2dpY2FsQ2VudGVyLCByYWRpdXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVFbGxpcHNlVHlw
ZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIGZsb2F0
IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRlclgoKSwgYm94V2lk
dGgpOwotICAgICAgICBmbG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNl
LT5jZW50ZXJZKCksIGJveEhlaWdodCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1c1ggPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1goKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9h
dCByYWRpdXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNZKCksIGJveEhl
aWdodCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRlciA9IHBoeXNpY2FsUG9pbnRU
b0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgbG9naWNhbEJveFNpemUuaGVp
Z2h0KCksIHdyaXRpbmdNb2RlKTsKLSAgICAgICAgRmxvYXRTaXplIGxvZ2ljYWxSYWRpaSA9IHBo
eXNpY2FsU2l6ZVRvTG9naWNhbChGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVzWSksIHdyaXRpbmdN
b2RlKTsKLQotICAgICAgICBleGNsdXNpb25TaGFwZSA9IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2Uo
bG9naWNhbENlbnRlciwgbG9naWNhbFJhZGlpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUG9seWdvblR5cGU6IHsKLSAgICAgICAgY29u
c3QgQmFzaWNTaGFwZVBvbHlnb24qIHBvbHlnb24gPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1No
YXBlUG9seWdvbio+KGJhc2ljU2hhcGUpOwotICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3RoPiYg
dmFsdWVzID0gcG9seWdvbi0+dmFsdWVzKCk7Ci0gICAgICAgIHNpemVfdCB2YWx1ZXNTaXplID0g
dmFsdWVzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWVzU2l6ZSAlIDIpKTsKLSAgICAg
ICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxGbG9hdFBvaW50Pih2YWx1ZXNTaXplIC8gMikpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzU2l6ZTsgaSArPSAyKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50
IHZlcnRleCgKLSAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChp
KSwgYm94V2lkdGgpLAotICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVz
LmF0KGkgKyAxKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgICAgICAoKnZlcnRpY2VzKVtpIC8gMl0g
PSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKHZlcnRleCwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCks
IHdyaXRpbmdNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3Jl
YXRlRXhjbHVzaW9uUG9seWdvbih2ZXJ0aWNlcy5yZWxlYXNlKCksIHBvbHlnb24tPndpbmRSdWxl
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2lj
U2hhcGVJbnNldFJlY3RhbmdsZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZUluc2V0
UmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlSW5zZXRS
ZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgZmxvYXQgbGVmdCA9IGZsb2F0VmFsdWVG
b3JMZW5ndGgocmVjdGFuZ2xlLT5sZWZ0KCksIGJveFdpZHRoKTsKLSAgICAgICAgZmxvYXQgdG9w
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnRvcCgpLCBib3hIZWlnaHQpOwotICAg
ICAgICBGbG9hdFJlY3QgYm91bmRzKAotICAgICAgICAgICAgbGVmdCwKLSAgICAgICAgICAgIHRv
cCwKLSAgICAgICAgICAgIGJveFdpZHRoIC0gbGVmdCAtIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVj
dGFuZ2xlLT5yaWdodCgpLCBib3hXaWR0aCksCi0gICAgICAgICAgICBib3hIZWlnaHQgLSB0b3Ag
LSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+Ym90dG9tKCksIGJveEhlaWdodCkpOwot
ICAgICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgp
OwotICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVz
WSgpOwotICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCi0gICAgICAgICAgICByYWRpdXNY
TGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNYTGVu
Z3RoLCBib3hXaWR0aCksCi0gICAgICAgICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkg
PyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQpKTsKLSAg
ICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91
bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwotCi0gICAgICAgIGV4
Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKGxvZ2ljYWxCb3VuZHMsIHBo
eXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3JpdGluZ01vZGUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgZXhjbHVzaW9uU2hhcGUtPm1fd3JpdGluZ01vZGUgPSB3cml0aW5n
TW9kZTsKLSAgICBleGNsdXNpb25TaGFwZS0+bV9tYXJnaW4gPSBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG1hcmdpbiwgMCk7Ci0gICAgZXhjbHVzaW9uU2hhcGUtPm1fcGFkZGluZyA9IGZsb2F0VmFsdWVG
b3JMZW5ndGgocGFkZGluZywgMCk7Ci0KLSAgICByZXR1cm4gZXhjbHVzaW9uU2hhcGUucmVsZWFz
ZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2Q1MWYw
NDE2ODIzMjE4MjE1MmMzMjgwM2ZhNzNmYTQ4OWQ0NTFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
RXhjbHVzaW9uU2hhcGVfaAotI2RlZmluZSBFeGNsdXNpb25TaGFwZV9oCi0KLSNpbmNsdWRlICJC
YXNpY1NoYXBlcy5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlICJXcml0aW5n
TW9kZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBMaW5lU2VnbWVudCB7Ci0gICAg
TGluZVNlZ21lbnQoZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCkKLSAgICAg
ICAgOiBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKLSAgICAgICAgLCBsb2dpY2FsUmlnaHQobG9n
aWNhbFJpZ2h0KQotICAgIHsKLSAgICB9Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0Owot
ICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0OwotfTsKLQotdHlwZWRlZiBWZWN0b3I8TGluZVNl
Z21lbnQ+IFNlZ21lbnRMaXN0OwotCi0KLS8vIEEgcmVwcmVzZW50YXRpb24gb2YgYSBCYXNpY1No
YXBlIHRoYXQgZW5hYmxlcyBsYXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGJyZWFrIGEg
bGluZSB1cCBpbnRvIHNlZ21lbnRzCi0vLyB0aGF0IHdpbGwgZml0IHdpdGhpbiBvciBhcm91bmQg
YSBzaGFwZS4gVGhlIGxpbmUgaXMgZGVmaW5lZCBieSBhIHBhaXIgb2YgbG9naWNhbCBZIGNvb3Jk
aW5hdGVzIGFuZCB0aGUKLS8vIGNvbXB1dGVkIHNlZ21lbnRzIGFyZSByZXR1cm5lZCBhcyBwYWly
cyBvZiBsb2dpY2FsIFggY29vcmRpbmF0ZXMuIFRoZSBCYXNpY1NoYXBlIGl0c2VsZiBpcyBkZWZp
bmVkIGluCi0vLyBwaHlzaWNhbCBjb29yZGluYXRlcy4KLQotY2xhc3MgRXhjbHVzaW9uU2hhcGUg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVF
eGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBlKiwgY29uc3QgTGF5b3V0U2l6ZSYgbG9naWNh
bEJveFNpemUsIFdyaXRpbmdNb2RlLCBMZW5ndGggbWFyZ2luLCBMZW5ndGggcGFkZGluZyk7Ci0K
LSAgICB2aXJ0dWFsIH5FeGNsdXNpb25TaGFwZSgpIHsgfQotCi0gICAgdmlydHVhbCBMYXlvdXRS
ZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBm
aXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVy
dmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRV
bml0JiByZXN1bHQpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIGZsb2F0IHNoYXBlTWFy
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAgICBmbG9hdCBzaGFwZVBhZGRpbmco
KSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0KLQotcHJpdmF0ZToKLSAgICBXcml0aW5nTW9k
ZSBtX3dyaXRpbmdNb2RlOwotICAgIGZsb2F0IG1fbWFyZ2luOwotICAgIGZsb2F0IG1fcGFkZGlu
ZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEV4Y2x1c2lvblNo
YXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMTRmODIyYjc4NTQxZWRlM2UzYzQ4
YjgzNGQ4MmMzMjhhY2UxYjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluZm8uaCIK
LQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIK
LSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1
ZGUgIlJlbmRlclJlZ2lvbi5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIEV4Y2x1c2lvblNoYXBlVmFs
dWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChFeGNsdXNpb25T
aGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlz
dCYpIGNvbnN0PgotY29uc3QgRXhjbHVzaW9uU2hhcGUqIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5k
ZXJUeXBlLCBzaGFwZUdldHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpjb21wdXRlZFNoYXBlKCkgY29u
c3QKLXsKLSAgICBpZiAoRXhjbHVzaW9uU2hhcGUqIGV4Y2x1c2lvblNoYXBlID0gbV9zaGFwZS5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIGV4Y2x1c2lvblNoYXBlOwotCi0gICAgRXhjbHVzaW9uU2hh
cGVWYWx1ZSogc2hhcGVWYWx1ZSA9IChtX3JlbmRlcmVyLT5zdHlsZSgpLT4qc2hhcGVHZXR0ZXIp
KCk7Ci0gICAgQmFzaWNTaGFwZSogc2hhcGUgPSAoc2hhcGVWYWx1ZSAmJiBzaGFwZVZhbHVlLT50
eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpID8gc2hhcGVWYWx1ZS0+c2hhcGUo
KSA6IDA7Ci0KLSAgICBBU1NFUlQoc2hhcGUpOwotCi0gICAgbV9zaGFwZSA9IEV4Y2x1c2lvblNo
YXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShzaGFwZSwgTGF5b3V0U2l6ZShtX3NoYXBlTG9naWNh
bFdpZHRoLCBtX3NoYXBlTG9naWNhbEhlaWdodCksIG1fcmVuZGVyZXItPnN0eWxlKCktPndyaXRp
bmdNb2RlKCksIG1fcmVuZGVyZXItPnN0eWxlKCktPnNoYXBlTWFyZ2luKCksIG1fcmVuZGVyZXIt
PnN0eWxlKCktPnNoYXBlUGFkZGluZygpKTsKLSAgICBBU1NFUlQobV9zaGFwZSk7Ci0gICAgcmV0
dXJuIG1fc2hhcGUuZ2V0KCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIEV4Y2x1
c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChFeGNsdXNpb25TaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRVbml0
LCBTZWdtZW50TGlzdCYpIGNvbnN0PgotYm9vbCBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyVHlw
ZSwgc2hhcGVHZXR0ZXIsIGludGVydmFsR2V0dGVyPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShM
YXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkKLXsKLSAgICBBU1NFUlQo
bGluZUhlaWdodCA+PSAwKTsKLSAgICBtX3NoYXBlTGluZVRvcCA9IGxpbmVUb3AgLSBsb2dpY2Fs
VG9wT2Zmc2V0KCk7Ci0gICAgbV9saW5lSGVpZ2h0ID0gbGluZUhlaWdodDsKLSAgICBtX3NlZ21l
bnRzLmNsZWFyKCk7Ci0KLSAgICBpZiAobGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkKLSAgICAg
ICAgKGNvbXB1dGVkU2hhcGUoKS0+KmludGVydmFsR2V0dGVyKShtX3NoYXBlTGluZVRvcCwgc3Rk
OjptaW4obV9saW5lSGVpZ2h0LCBzaGFwZUxvZ2ljYWxCb3R0b20oKSAtIGxpbmVUb3ApLCBtX3Nl
Z21lbnRzKTsKLQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSB0aGlzLT5sb2dp
Y2FsTGVmdE9mZnNldCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zZWdtZW50cy5z
aXplKCk7IGkrKykgewotICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2ljYWxMZWZ0ICs9IGxvZ2lj
YWxMZWZ0T2Zmc2V0OwotICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2ljYWxSaWdodCArPSBsb2dp
Y2FsTGVmdE9mZnNldDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7Ci19
Ci0KLXRlbXBsYXRlIGNsYXNzIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRl
clN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEluY2x1ZGVk
SW50ZXJ2YWxzPjsKLXRlbXBsYXRlIGNsYXNzIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCb3gs
ICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1ZGVk
SW50ZXJ2YWxzPjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTcwNzkyYTNm
OTEyNmZkNzVjZmI3NjgyOWZiOWFhYzYwMThmZmI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotKiAgICBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0qICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0qICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotKiAgICBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBCRQotKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0qIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IK
LSogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GCi0qIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSovCi0KLSNpZm5kZWYgRXhj
bHVzaW9uU2hhcGVJbmZvX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hhcGVJbmZvX2gKLQotI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKLSNpbmNsdWRl
ICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSA8d3Rm
L093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi10ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBjbGFzcyBJbmZvVHlwZT4KLWNsYXNzIE1hcHBl
ZEluZm8gewotcHVibGljOgotICAgIHN0YXRpYyBJbmZvVHlwZSogZW5zdXJlSW5mbyhjb25zdCBL
ZXlUeXBlKiBrZXkpCi0gICAgewotICAgICAgICBJbmZvTWFwJiBpbmZvTWFwID0gTWFwcGVkSW5m
bzxLZXlUeXBlLCBJbmZvVHlwZT46OmluZm9NYXAoKTsKLSAgICAgICAgaWYgKEluZm9UeXBlKiBp
bmZvID0gaW5mb01hcC5nZXQoa2V5KSkKLSAgICAgICAgICAgIHJldHVybiBpbmZvOwotICAgICAg
ICB0eXBlbmFtZSBJbmZvTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gaW5mb01hcC5hZGQoa2V5LCBJ
bmZvVHlwZTo6Y3JlYXRlSW5mbyhrZXkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuZ2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3Qg
S2V5VHlwZSoga2V5KSB7IGluZm9NYXAoKS5yZW1vdmUoa2V5KTsgfQotICAgIHN0YXRpYyBJbmZv
VHlwZSogaW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsgcmV0dXJuIGluZm9NYXAoKS5nZXQoa2V5
KTsgfQotcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgS2V5VHlwZSosIE93blB0
cjxJbmZvVHlwZT4gPiBJbmZvTWFwOwotICAgIHN0YXRpYyBJbmZvTWFwJiBpbmZvTWFwKCkKLSAg
ICB7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW5mb01hcCwgc3RhdGljSW5mb01hcCwg
KCkpOwotICAgICAgICByZXR1cm4gc3RhdGljSW5mb01hcDsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTxjbGFzcyBSZW5kZXJUeXBlLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6Oipz
aGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoRXhjbHVzaW9uU2hhcGU6OippbnRlcnZhbEdldHRl
cikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KLWNsYXNzIEV4
Y2x1c2lvblNoYXBlSW5mbyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB+RXhjbHVzaW9uU2hhcGVJbmZvKCkgeyB9Ci0KLSAgICB2b2lkIHNldFNo
YXBlU2l6ZShMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
KQotICAgIHsKLSAgICAgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09
IENPTlRFTlRfQk9YKSB7Ci0gICAgICAgICAgICBsb2dpY2FsV2lkdGggLT0gbV9yZW5kZXJlci0+
Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgbG9naWNhbEhlaWdo
dCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1fc2hhcGVMb2dpY2FsV2lkdGggPT0gbG9naWNhbFdpZHRoICYm
IG1fc2hhcGVMb2dpY2FsSGVpZ2h0ID09IGxvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGRpcnR5U2hhcGVTaXplKCk7Ci0gICAgICAgIG1fc2hhcGVMb2dpY2FsV2lk
dGggPSBsb2dpY2FsV2lkdGg7Ci0gICAgICAgIG1fc2hhcGVMb2dpY2FsSGVpZ2h0ID0gbG9naWNh
bEhlaWdodDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGlu
ZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCk7Ci0gICAgdm9pZCBj
bGVhclNlZ21lbnRzKCkgeyBtX3NlZ21lbnRzLmNsZWFyKCk7IH0KLQotICAgIExheW91dFVuaXQg
c2hhcGVMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3Vu
ZGluZ0JveCgpLnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgc2hh
cGVMb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3Vu
ZGluZ0JveCgpLm1heFkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQg
c2hhcGVMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91
bmRpbmdCb3goKS54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBz
aGFwZUxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91
bmRpbmdCb3goKS5tYXhYKCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5p
dCBzaGFwZUxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2Fs
Qm91bmRpbmdCb3goKS53aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxIZWln
aHQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkuaGVp
Z2h0KCk7IH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbExpbmVUb3AoKSBjb25zdCB7IHJldHVy
biBtX3NoYXBlTGluZVRvcCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQg
bG9naWNhbExpbmVCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX3NoYXBlTGluZVRvcCArIG1fbGlu
ZUhlaWdodCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBzaGFwZUNv
bnRhaW5pbmdCbG9ja0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgp
LT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgPyAobV9zaGFwZUxvZ2ljYWxIZWlnaHQgKyBt
X3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKSA6IG1fc2hhcGVMb2dp
Y2FsSGVpZ2h0OyB9Ci0KLSAgICBib29sIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gbG9naWNhbExpbmVUb3AoKSA8IHNoYXBlTG9naWNhbEJvdHRvbSgpICYmIHNoYXBl
TG9naWNhbFRvcCgpIDw9IGxvZ2ljYWxMaW5lQm90dG9tKCk7IH0KLSAgICBib29sIGxpbmVXaXRo
aW5TaGFwZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkg
JiYgKGxvZ2ljYWxMaW5lQm90dG9tKCkgPD0gc2hhcGVMb2dpY2FsQm90dG9tKCkpOyB9Ci0KLSAg
ICB2b2lkIGRpcnR5U2hhcGVTaXplKCkgeyBtX3NoYXBlLmNsZWFyKCk7IH0KLSAgICBib29sIHNo
YXBlU2l6ZURpcnR5KCkgeyByZXR1cm4gIW1fc2hhcGUuZ2V0KCk7IH0KLSAgICBjb25zdCBSZW5k
ZXJUeXBlKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLQotcHJvdGVjdGVk
OgotICAgIEV4Y2x1c2lvblNoYXBlSW5mbyhjb25zdCBSZW5kZXJUeXBlKiByZW5kZXJlcik6IG1f
cmVuZGVyZXIocmVuZGVyZXIpIHsgfQotCi0gICAgY29uc3QgRXhjbHVzaW9uU2hhcGUqIGNvbXB1
dGVkU2hhcGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxv
Z2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKLQotICAgIExheW91dFVuaXQgbG9naWNhbFRv
cE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygp
ID09IENPTlRFTlRfQk9YID8gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpIDog
TGF5b3V0VW5pdCgpOyB9OwotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25z
dCB7IHJldHVybiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9C
T1ggJiYgIW1fcmVuZGVyZXItPmlzUmVuZGVyUmVnaW9uKCkpID8gbV9yZW5kZXJlci0+Ym9yZGVy
QW5kUGFkZGluZ1N0YXJ0KCkgOiBMYXlvdXRVbml0KCk7IH0KLQotICAgIExheW91dFVuaXQgbV9z
aGFwZUxpbmVUb3A7Ci0gICAgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7Ci0gICAgU2VnbWVudExp
c3QgbV9zZWdtZW50czsKLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIE93blB0cjxFeGNsdXNpb25T
aGFwZT4gbV9zaGFwZTsKLQotICAgIExheW91dFVuaXQgbV9zaGFwZUxvZ2ljYWxXaWR0aDsKLSAg
ICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2FsSGVpZ2h0OwotICAgIGNvbnN0IFJlbmRlclR5cGUq
IG1fcmVuZGVyZXI7Ci19OwotfQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU4YTc0NGZjYmE5OTU0ZDlkYTBhOTk1NWRjYTg3YWJkZWQzZTkz
MTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgi
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1MaW5l
U2VnbWVudFJhbmdlOjpMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFy
dCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCkKLSAgICA6IHN0YXJ0KHN0YXJ0LnJvb3QoKSwg
c3RhcnQub2JqZWN0KCksIHN0YXJ0Lm9mZnNldCgpKQotICAgICwgZW5kKGVuZC5yb290KCksIGVu
ZC5vYmplY3QoKSwgZW5kLm9mZnNldCgpKQotICAgIHsKLSAgICB9Ci0KLWJvb2wgRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVy
KQotewotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSByZW5kZXJlci0+c3R5
bGUoKS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpOwotICAgIGlmICghc2hhcGVWYWx1ZSB8fCBzaGFw
ZVZhbHVlLT50eXBlKCkgIT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gc2hhcGVWYWx1ZS0+c2hhcGUo
KTsKLSAgICByZXR1cm4gc2hhcGUgJiYgc2hhcGUtPnR5cGUoKSAhPSBCYXNpY1NoYXBlOjpCYXNp
Y1NoYXBlSW5zZXRSZWN0YW5nbGVUeXBlOwotfQotCi1ib29sIEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVudFdpZHRoKQotewotICAg
IGNvbnN0IEV4Y2x1c2lvblNoYXBlKiBzaGFwZSA9IGNvbXB1dGVkU2hhcGUoKTsKLSAgICBpZiAo
IXNoYXBlIHx8IG1fbGluZUhlaWdodCA8PSAwIHx8IGxvZ2ljYWxMaW5lVG9wKCkgPiBzaGFwZUxv
Z2ljYWxCb3R0b20oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTGF5b3V0VW5pdCBu
ZXdMaW5lVG9wOwotICAgIGlmIChzaGFwZS0+Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRv
cChtX3NoYXBlTGluZVRvcCwgTGF5b3V0U2l6ZShtaW5TZWdtZW50V2lkdGgsIG1fbGluZUhlaWdo
dCksIG5ld0xpbmVUb3ApKSB7Ci0gICAgICAgIGlmIChuZXdMaW5lVG9wID4gbV9zaGFwZUxpbmVU
b3ApIHsKLSAgICAgICAgICAgIG1fc2hhcGVMaW5lVG9wID0gbmV3TGluZVRvcDsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg0MDMy
ZmY5OWY2ZmRiN2RjYzI0Yjg2NmM5NDFiODYzMDI1ODAyYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAq
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
Ci0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
b19oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5mby5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIElubGluZUl0ZXJhdG9yOwotY2xhc3MgUmVuZGVyQmxvY2s7Ci1jbGFz
cyBSZW5kZXJPYmplY3Q7Ci0KLXN0cnVjdCBMaW5lU2VnbWVudEl0ZXJhdG9yIHsKLSAgICBSZW5k
ZXJPYmplY3QqIHJvb3Q7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3Q7Ci0gICAgdW5zaWduZWQg
b2Zmc2V0OwotICAgIExpbmVTZWdtZW50SXRlcmF0b3IoUmVuZGVyT2JqZWN0KiByb290LCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0KQotICAgICAgICA6IHJvb3Qocm9vdCkK
LSAgICAgICAgLCBvYmplY3Qob2JqZWN0KQotICAgICAgICAsIG9mZnNldChvZmZzZXQpCi0gICAg
ewotICAgIH0KLX07Ci0KLXN0cnVjdCBMaW5lU2VnbWVudFJhbmdlIHsKLSAgICBMaW5lU2VnbWVu
dEl0ZXJhdG9yIHN0YXJ0OwotICAgIExpbmVTZWdtZW50SXRlcmF0b3IgZW5kOwotICAgIExpbmVT
ZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBJbmxpbmVJdGVy
YXRvciYgZW5kKTsKLX07Ci0KLXR5cGVkZWYgVmVjdG9yPExpbmVTZWdtZW50UmFuZ2U+IFNlZ21l
bnRSYW5nZUxpc3Q7Ci0KLWNsYXNzIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA6IHB1YmxpYyBF
eGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFw
ZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz4gewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbz4gY3JlYXRl
SW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8ocmVuZGVyZXIpKTsgfQotCi0gICAgc3RhdGljIGJvb2wg
aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcik7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVu
aXQgbGluZUhlaWdodCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1fc2VnbWVudFJhbmdlcy5j
bGVhcigpOwotICAgICAgICByZXR1cm4gRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAm
UmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0SW5j
bHVkZWRJbnRlcnZhbHM+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWln
aHQpOwotICAgIH0KLQotICAgIGJvb2wgaGFzU2VnbWVudHMoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgJiYgbV9zZWdtZW50cy5zaXplKCk7
Ci0gICAgfQotICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50cygpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaGFzU2VnbWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBtX3NlZ21lbnRz
OwotICAgIH0KLSAgICBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzKCkgeyByZXR1cm4g
bV9zZWdtZW50UmFuZ2VzOyB9Ci0gICAgY29uc3QgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJh
bmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQotICAgIGNvbnN0IExpbmVT
ZWdtZW50KiBjdXJyZW50U2VnbWVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWhhc1Nl
Z21lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgQVNTRVJUKG1fc2VnbWVu
dFJhbmdlcy5zaXplKCkgPCBtX3NlZ21lbnRzLnNpemUoKSk7Ci0gICAgICAgIHJldHVybiAmbV9z
ZWdtZW50c1ttX3NlZ21lbnRSYW5nZXMuc2l6ZSgpXTsKLSAgICB9Ci0gICAgYm9vbCBhZGp1c3RM
b2dpY2FsTGluZVRvcChmbG9hdCBtaW5TZWdtZW50V2lkdGgpOwotCi0gICAgdm9pZCBzZXROZWVk
c0xheW91dChib29sIHZhbHVlKSB7IG1fbmVlZHNMYXlvdXQgPSB2YWx1ZTsgfQotICAgIGJvb2wg
bmVlZHNMYXlvdXQoKSB7IHJldHVybiBtX25lZWRzTGF5b3V0OyB9Ci0KLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS0+c2hhcGVQYWRkaW5nTG9naWNh
bEJvdW5kaW5nQm94KCk7IH0KLQotcHJpdmF0ZToKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQotICAgIDogRXhjbHVzaW9uU2hhcGVJbmZv
PFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNp
b25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IChyZW5kZXJlcikKLSAgICAsIG1fbmVlZHNM
YXlvdXQoZmFsc2UpCi0gICAgeyB9Ci0KLSAgICBTZWdtZW50UmFuZ2VMaXN0IG1fc2VnbWVudFJh
bmdlczsKLSAgICBib29sIG1fbmVlZHNMYXlvdXQ6MTsKLX07Ci0KLX0KLSNlbmRpZgotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OWNjZTVhNTZmMWNh
OWRjMDRjNDk4MzBmMmM4NWNkN2RkZTJhNWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
ICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgiCi0K
LSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotYm9vbCBFeGNs
dXNpb25TaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94KiBib3gp
Ci17Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogdmFsdWUgPSBib3gtPnN0eWxlKCktPnNoYXBl
T3V0c2lkZSgpOwotICAgIHJldHVybiBib3gtPmlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkg
JiYgdmFsdWUtPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSAmJiB2YWx1ZS0+
c2hhcGUoKTsKLX0KLQotYm9vbCBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjpjb21wdXRlU2Vn
bWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQot
ewotICAgIGlmIChzaGFwZVNpemVEaXJ0eSgpIHx8IG1fbGluZVRvcCAhPSBsaW5lVG9wIHx8IG1f
bGluZUhlaWdodCAhPSBsaW5lSGVpZ2h0KSB7Ci0gICAgICAgIGlmIChFeGNsdXNpb25TaGFwZUlu
Zm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lvblNoYXBl
OjpnZXRFeGNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwg
bGluZUhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94
RGVsdGEgPSBtX3NlZ21lbnRzWzBdLmxvZ2ljYWxMZWZ0IC0gc2hhcGVMb2dpY2FsTGVmdCgpOwot
ICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSBtX3NlZ21l
bnRzW21fc2VnbWVudHMuc2l6ZSgpLTFdLmxvZ2ljYWxSaWdodCAtIHNoYXBlTG9naWNhbFJpZ2h0
KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2xlZnRTZWdtZW50U2hhcGVCb3Vu
ZGluZ0JveERlbHRhID0gMDsKLSAgICAgICAgICAgIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGlu
Z0JveERlbHRhID0gMDsKLSAgICAgICAgfQotICAgICAgICBtX2xpbmVUb3AgPSBsaW5lVG9wOwot
ICAgIH0KLQotICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKLX0KLQotfQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3YTVjNDhiN2IxZmZjZTIxNTZm
ODE3ODc0NmYzZjMzMjA3ODVmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvX2gKLSNkZWZp
bmUgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5mby5oIgotI2luY2x1ZGUgIkxheW91dFNpemUu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJCb3g7Ci0KLWNsYXNzIEV4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRl
ckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0RXhj
bHVkZWRJbnRlcnZhbHM+LCBwdWJsaWMgTWFwcGVkSW5mbzxSZW5kZXJCb3gsIEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8+IHsKLXB1YmxpYzoKLSAgICBMYXlvdXRTaXplIHNoYXBlTG9naWNhbE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFNpemUoc2hhcGVMb2dpY2FsTGVmdCgpLCBzaGFw
ZUxvZ2ljYWxUb3AoKSk7IH0KLQotICAgIExheW91dFVuaXQgbGVmdFNlZ21lbnRTaGFwZUJvdW5k
aW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhOyB9Ci0gICAgTGF5b3V0VW5pdCByaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVs
dGEoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsg
fQotCi0gICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFOwotCi0gICAgc3RhdGljIFBh
c3NPd25QdHI8RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbz4gY3JlYXRlSW5mbyhjb25zdCBSZW5k
ZXJCb3gqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mbyhyZW5kZXJlcikpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNFbmFibGVkRm9yKGNvbnN0
IFJlbmRlckJveCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21w
dXRlZFNoYXBlKCktPnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KLQotcHJpdmF0
ZToKLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVuZGVy
ZXIpIDogRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91
dHNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+KHJlbmRlcmVyKSB7
IH0KLQotICAgIExheW91dFVuaXQgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsK
LSAgICBMYXlvdXRVbml0IG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOwotICAg
IExheW91dFVuaXQgbV9saW5lVG9wOwotfTsKLQotfQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCmluZGV4IDBmNmQ5M2NhYjk1MzJkNDM3MzFj
MGQ1YWIyNDMzMTVkZjM2MjVmMzIuLmQ5ZWJkNjQ3YTdkOTU4NTdkMjhhOWFlOTk2ZjNlZWIzNGM4
N2Y5MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcApAQCAtNDAs
NyArNDAsNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByZXYsIFJl
bmRlckJveCogcmVuZGVyZXIsIGNvbnN0IExheW91dFNpegogICAgICwgbV9saW5lR3JpZCgwKQog
ICAgICwgbV9uZXh0KHByZXYpCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgLCBtX2V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbygwKQorICAgICwgbV9zaGFwZUluc2lkZUluZm8oMCkKICNlbmRp
ZgogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCkBAIC0xMTMsOSAr
MTEzLDkgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRlKiBwcmV2LCBSZW5k
ZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRTaXoKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
ICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkgewogICAgICAgICBjb25zdCBSZW5k
ZXJCbG9jayogcmVuZGVyQmxvY2sgPSB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKTsKLSAgICAgICAg
bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSByZW5kZXJCbG9jay0+ZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCk7Ci0gICAgICAgIGlmICghbV9leGNsdXNpb25TaGFwZUluc2lkZUluZm8gJiYg
bV9uZXh0LT5tX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyAmJiByZW5kZXJCbG9jay0+YWxsb3dz
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQotICAgICAgICAgICAgbV9leGNsdXNp
b25TaGFwZUluc2lkZUluZm8gPSBtX25leHQtPm1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOwor
ICAgICAgICBtX3NoYXBlSW5zaWRlSW5mbyA9IHJlbmRlckJsb2NrLT5zaGFwZUluc2lkZUluZm8o
KTsKKyAgICAgICAgaWYgKCFtX3NoYXBlSW5zaWRlSW5mbyAmJiBtX25leHQtPm1fc2hhcGVJbnNp
ZGVJbmZvICYmIHJlbmRlckJsb2NrLT5hbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpCisg
ICAgICAgICAgICBtX3NoYXBlSW5zaWRlSW5mbyA9IG1fbmV4dC0+bV9zaGFwZUluc2lkZUluZm87
CiAgICAgfQogI2VuZGlmCiAKQEAgLTE0OSw3ICsxNDksNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0
U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgICwgbV9saW5lR3JpZCgwKQogICAgICwgbV9u
ZXh0KDApCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgLCBtX2V4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbygwKQorICAgICwgbV9zaGFwZUluc2lkZUluZm8oMCkKICNlbmRpZgogICAgICwgbV9w
YWdlTG9naWNhbEhlaWdodCgwKQogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheW91dFN0YXRlLmgKaW5kZXggNzVjMzUzZDVkZGE4MDhmMTliYzhmYmFlYzQ2ODczYjVlZjU2
M2FkYS4uZDc3NDljNTJjNjBkNzU2MjAxYTk4MTM5MmU4M2I1YjVjMTcyYTA5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgUmVu
ZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLWNsYXNzIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzsKK2Ns
YXNzIFNoYXBlSW5zaWRlSW5mbzsKICNlbmRpZgogCiBjbGFzcyBMYXlvdXRTdGF0ZSB7CkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgICAgICwg
bV9uZXh0KDApCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgICwgbV9leGNsdXNpb25T
aGFwZUluc2lkZUluZm8oMCkKKyAgICAgICAgLCBtX3NoYXBlSW5zaWRlSW5mbygwKQogI2VuZGlm
CiAgICAgICAgICwgbV9wYWdlTG9naWNhbEhlaWdodCgwKQogI2lmbmRlZiBOREVCVUcKQEAgLTk5
LDcgKzk5LDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0aW9u
U2V0QmVmb3JlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lR3JpZCB8fCAobV9pc1BhZ2lu
YXRlZCAmJiBtX3BhZ2VMb2dpY2FsSGVpZ2h0KTsgfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KSBjb25zdCB7IHJldHVybiBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzsgfQorICAgIFNoYXBl
SW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZUluc2lk
ZUluZm87IH0KICNlbmRpZgogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9wZXJhdG9yIG5l
dyBpcyBkaXNhbGxvd2VkLgpAQCAtMTI1LDggKzEyNSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGUg
Y3VycmVudCBsaW5lIGdyaWQgdGhhdCB3ZSdyZSBzbmFwcGluZyB0byBhbmQgdGhlIG9mZnNldCBv
ZiB0aGUgc3RhcnQgb2YgdGhlIGdyaWQuCiAgICAgUmVuZGVyQmxvY2sqIG1fbGluZUdyaWQ7CiAg
ICAgTGF5b3V0U3RhdGUqIG1fbmV4dDsKLSNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCi0gICAg
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzsKKyNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICBTaGFwZUluc2lkZUluZm8qIG1fc2hhcGVJbnNpZGVJ
bmZvOwogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbGF5
b3V0IGNsaXAgcmVjdCBhbmQgdGhlIHBhaW50IGNsaXAgcmVjdCB3aGljaCBtYXkgYmUgbGFyZ2Vy
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYjBkMTU5ZjJl
NzRhMDliMDc5ZDY3MjdlZDllYzEzYzBmMzA5NDQzNy4uZmE4MDNlOWY3N2NhYWM4ZjAxMDI1YTE0
ZTY1YWIwMzkzNTUxMmQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCkBAIC02Nyw4ICs2Nyw4IEBACiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVk
ZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5oIgorI2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5mby5oIgorI2luY2x1ZGUgIlNo
YXBlT3V0c2lkZUluZm8uaCIKICNlbmRpZgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAj
aW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgpAQCAtMzYzLDkgKzM2Myw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5CiAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gc3R5bGUoKTsK
ICAgICAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAvLyBGSVhNRTogQnVnIDg5OTkzOiBT
dHlsZSBjaGFuZ2VzIHNob3VsZCBhZmZlY3QgdGhlIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb3Mg
Zm9yIG90aGVyIHJlbmRlciBibG9ja3MgdGhhdAotICAgIC8vIHNoYXJlIHRoZSBzYW1lIEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbwotICAgIHVwZGF0ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0Fm
dGVyU3R5bGVDaGFuZ2UobmV3U3R5bGUtPnJlc29sdmVkU2hhcGVJbnNpZGUoKSwgb2xkU3R5bGUg
PyBvbGRTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpIDogMCk7CisgICAgdXBkYXRlU2hhcGVJ
bnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShuZXdTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgp
LCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5yZXNvbHZlZFNoYXBlSW5zaWRlKCkgOiAwKTsKICNlbmRp
ZgogCiAgICAgaWYgKCFpc0Fub255bW91c0Jsb2NrKCkpIHsKQEAgLTE0NDAsMTcgKzE0MzgsMTgg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZUluc2lkZSwgY29uc3Qg
RXhjbHVzaW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVJbnNpZGUpCit2b2lkIFJlbmRlckJsb2NrOjp1
cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqIHNo
YXBlSW5zaWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZUluc2lkZSkKIHsKICAgICAvLyBG
SVhNRTogQSBmdXR1cmUgb3B0aW1pemF0aW9uIHdvdWxkIGRvIGEgZGVlcCBjb21wYXJpc29uIGZv
ciBlcXVhbGl0eS4KICAgICBpZiAoc2hhcGVJbnNpZGUgPT0gb2xkU2hhcGVJbnNpZGUpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvOwogICAg
IGlmIChzaGFwZUluc2lkZSkgewotICAgICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGVuc3VyZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
OwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7Cisg
ICAgICAgIHNoYXBlSW5zaWRlSW5mbyA9IGVuc3VyZVNoYXBlSW5zaWRlSW5mbygpOworICAgICAg
ICBzaGFwZUluc2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgc2V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKG51bGxwdHIpOworICAgICAgICBzZXRTaGFw
ZUluc2lkZUluZm8obnVsbHB0cik7CiAgICAgICAgIG1hcmtTaGFwZUluc2lkZURlc2NlbmRhbnRz
Rm9yTGF5b3V0KCk7CiAgICAgfQogfQpAQCAtMTQ3MiwxNiArMTQ3MSwxNiBAQCB2b2lkIFJlbmRl
ckJsb2NrOjptYXJrU2hhcGVJbnNpZGVEZXNjZW5kYW50c0ZvckxheW91dCgpCiB9CiAjZW5kaWYK
IAotc3RhdGljIGlubGluZSBib29sIGV4Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KGNvbnN0
IFJlbmRlckJsb2NrKiBibG9jaykKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaGFwZUluZm9SZXF1aXJl
c1JlbGF5b3V0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKIHsKICNpZiAhRU5BQkxFKENTU19T
SEFQRVMpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICBFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8qIGluZm8gPSBibG9jay0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hh
cGVJbnNpZGVJbmZvKiBpbmZvID0gYmxvY2stPnNoYXBlSW5zaWRlSW5mbygpOwogICAgIGlmIChp
bmZvKQogICAgICAgICBpbmZvLT5zZXROZWVkc0xheW91dChpbmZvLT5zaGFwZVNpemVEaXJ0eSgp
KTsKICAgICBlbHNlCi0gICAgICAgIGluZm8gPSBibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCk7CisgICAgICAgIGluZm8gPSBibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZv
KCk7CiAgICAgcmV0dXJuIGluZm8gJiYgaW5mby0+bmVlZHNMYXlvdXQoKTsKICNlbmRpZgogfQpA
QCAtMTQ4OSwxMSArMTQ4OCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXhjbHVzaW9uSW5mb1Jl
cXVpcmVzUmVsYXlvdXQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogYm9vbCBSZW5kZXJCbG9j
azo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExheW91dChSZW5kZXJGbG93
VGhyZWFkKiBmbG93VGhyZWFkKQogewogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIGlmICgh
Zmxvd1RocmVhZCAmJiAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkpCisgICAgaWYgKCFmbG93
VGhyZWFkICYmICFzaGFwZUluc2lkZUluZm8oKSkKICNlbHNlCiAgICAgaWYgKCFmbG93VGhyZWFk
KQogI2VuZGlmCi0gICAgICAgIHJldHVybiBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxheW91dCh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQodGhpcyk7CiAK
ICAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICBMYXlvdXRV
bml0IG9sZFRvcCA9IGxvZ2ljYWxUb3AoKTsKQEAgLTE1MDQsNyArMTUwMyw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQoUmVu
ZGVyRmxvd1RocmVhZCoKICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CiAKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKLSAgICBjb21wdXRlRXhjbHVzaW9uU2hhcGVTaXplKCk7CisgICAgY29tcHV0
ZVNoYXBlU2l6ZSgpOwogI2VuZGlmCiAKICAgICAvLyBTZXQgb3VyIHN0YXJ0IGFuZCBlbmQgcmVn
aW9ucy4gTm8gcmVnaW9ucyBhYm92ZSBvciBiZWxvdyB1cyB3aWxsIGJlIGNvbnNpZGVyZWQgYnkg
b3VyIGNoaWxkcmVuLiBUaGV5IGFyZQpAQCAtMTUxNCwxNiArMTUxMywxNiBAQCBib29sIFJlbmRl
ckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0JlZm9yZUNoaWxkTGF5b3V0KFJlbmRl
ckZsb3dUaHJlYWQqCiAgICAgc2V0TG9naWNhbEhlaWdodChvbGRIZWlnaHQpOwogICAgIHNldExv
Z2ljYWxUb3Aob2xkVG9wKTsKICAgICAKLSAgICByZXR1cm4gZXhjbHVzaW9uSW5mb1JlcXVpcmVz
UmVsYXlvdXQodGhpcyk7CisgICAgcmV0dXJuIHNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQodGhp
cyk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1
dGVFeGNsdXNpb25TaGFwZVNpemUoKQordm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVNoYXBlU2l6
ZSgpCiB7Ci0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lk
ZUluZm8gPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAgICBpZiAoZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKSB7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUlu
Zm8gPSB0aGlzLT5zaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKSB7
CiAgICAgICAgIGJvb2wgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID0gcGVyY2Vu
dGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGVGcm9tQmxvY2sodGhpcywgZmFsc2UpOwotICAg
ICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNldFNoYXBlU2l6ZShsb2dpY2FsV2lkdGgo
KSwgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9naWNhbEhlaWdodCgpIDog
TGF5b3V0VW5pdCgpKTsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5zZXRTaGFwZVNpemUobG9n
aWNhbFdpZHRoKCksIHBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0UmVzb2x2YWJsZSA/IGxvZ2ljYWxI
ZWlnaHQoKSA6IExheW91dFVuaXQoKSk7CiAgICAgfQogfQogI2VuZGlmCkBAIC0xNTMyLDcgKzE1
MzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0FmdGVy
Q2hpbGRMYXlvdXQoUmVuZGVyRmxvd1RocmVhZCogZgogewogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQogICAgIC8vIEEgcHJldmlvdXMgc2libGluZyBoYXMgY2hhbmdlZCBkaW1lbnNpb24sIHNvIHdl
IG5lZWQgdG8gcmVsYXlvdXQgdGhlIHNoYXBlIHdpdGggdGhlIGNvbnRlbnQKLSAgICBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5
b3V0U2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgaWYgKGhlaWdodENoYW5nZWQgJiYgc2hhcGVJbnNp
ZGVJbmZvKQogICAgICAgICBzaGFwZUluc2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CiAjZW5k
aWYKQEAgLTQwMTEsMTAgKzQwMTAsMTAgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBS
ZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogICAgIH0KIAog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIHNo
YXBlT3V0c2lkZSA9IG8tPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAgICBTaGFwZU91
dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBvLT5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgaWYg
KHNoYXBlT3V0c2lkZSkgewogICAgICAgICBzaGFwZU91dHNpZGUtPnNldFNoYXBlU2l6ZShvLT5s
b2dpY2FsV2lkdGgoKSwgby0+bG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgLy8gVGhlIENTUyBF
eGNsdXNpb25zIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoZSBtYXJnaW5zIGFyZSBpZ25vcmVk
CisgICAgICAgIC8vIFRoZSBDU1MgU2hhcGVzIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHRoZSBt
YXJnaW5zIGFyZSBpZ25vcmVkCiAgICAgICAgIC8vIHdoZW4gYSBmbG9hdCBoYXMgYSBzaGFwZSBv
dXRzaWRlLgogICAgICAgICBzZXRMb2dpY2FsV2lkdGhGb3JGbG9hdChuZXdPYmosIHNoYXBlT3V0
c2lkZS0+c2hhcGVMb2dpY2FsV2lkdGgoKSk7CiAgICAgfSBlbHNlCkBAIC00MDkyLDcgKzQwOTEs
NyBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2ljYWxMb2NhdGlvbkZvckZs
b2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbAogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0
T2Zmc2V0OyAvLyBDb25zdGFudCBwYXJ0IG9mIHJpZ2h0IG9mZnNldC4KICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKICAgICAvLyBGSVhNRSBCdWcgMTAyOTQ4OiBUaGlzIG9ubHkgd29ya3MgZm9yIHNo
YXBlIG91dHNpZGUgZGlyZWN0bHkgc2V0IG9uIHRoaXMgYmxvY2suCi0gICAgRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHRoaXMtPnNoYXBlSW5z
aWRlSW5mbygpOwogICAgIC8vIEZJWE1FIEJ1ZyAxMDI4NDY6IFRha2UgaW50byBhY2NvdW50IHRo
ZSBoZWlnaHQgb2YgdGhlIGNvbnRlbnQuIFRoZSBvZmZzZXQgc2hvdWxkIGJlCiAgICAgLy8gZXF1
YWwgdG8gdGhlIG1heGltdW0gc2VnbWVudCBsZW5ndGguCiAgICAgaWYgKHNoYXBlSW5zaWRlSW5m
byAmJiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkgJiYgc2hhcGVJbnNpZGVJbmZvLT5z
ZWdtZW50cygpLnNpemUoKSA9PSAxKSB7CkBAIC00MjQ3LDggKzQyNDYsOCBAQCBib29sIFJlbmRl
ckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAKICAgICAgICAgc2V0TG9naWNhbFRvcEZvckZs
b2F0KGZsb2F0aW5nT2JqZWN0LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi55KCkpOwogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQotICAgICAgICBpZiAoY2hpbGRCb3gtPmV4Y2x1c2lvblNoYXBlT3V0c2lk
ZUluZm8oKSkKLSAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09i
amVjdCwgY2hpbGRCb3gtPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKS0+c2hhcGVMb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICBpZiAoY2hpbGRCb3gtPnNoYXBlT3V0c2lkZUluZm8oKSkKKyAg
ICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgY2hpbGRC
b3gtPnNoYXBlT3V0c2lkZUluZm8oKS0+c2hhcGVMb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICBl
bHNlCiAjZW5kaWYKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGlu
Z09iamVjdCwgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkJlZm9yZUZv
ckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGRCb3gpKTsKQEAgLTQ0
MzQsNyArNDQzMyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCiAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBhZGFwdGVy
Lmxhc3RGbG9hdCgpOwogICAgICAgICBpZiAob2Zmc2V0TW9kZSA9PSBTaGFwZU91dHNpZGVGbG9h
dFNoYXBlT2Zmc2V0ICYmIGxhc3RGbG9hdCkgewotICAgICAgICAgICAgaWYgKEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKSB7CisgICAgICAgICAgICBpZiAoU2hhcGVPdXRzaWRl
SW5mbyogc2hhcGVPdXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJ
bmZvKCkpIHsKICAgICAgICAgICAgICAgICBzaGFwZU91dHNpZGUtPmNvbXB1dGVTZWdtZW50c0Zv
ckxpbmUobG9naWNhbFRvcCAtIGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgc2hhcGVP
dXRzaWRlLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAg
ICAgbGVmdCArPSBzaGFwZU91dHNpZGUtPnJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YSgpOwogICAgICAgICAgICAgfQpAQCAtNDQ5Miw3ICs0NDkxLDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IExheW91dFUKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3QqIGxhc3RGbG9hdCA9IGFkYXB0ZXIubGFzdEZsb2F0KCk7CiAgICAgICAgIGlmIChvZmZz
ZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgbGFzdEZsb2F0KSB7Ci0g
ICAgICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0g
bGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCkpIHsKKyAg
ICAgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0RmxvYXQt
PnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgewogICAgICAgICAgICAgICAgIHNoYXBl
T3V0c2lkZS0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsb2dpY2FsVG9wIC0gbG9naWNhbFRvcEZv
ckZsb2F0KGxhc3RGbG9hdCkgKyBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbFRvcCgpLCBsb2dp
Y2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICByaWdodEZsb2F0T2Zmc2V0ICs9IHNoYXBlT3V0
c2lkZS0+bGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEoKTsKICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNzEzNDI0OWZiZjM0MTVh
ZDMyNjgwM2YwNDE5YWE5Y2I0OTYzMGNiZC4uZjc3MzJlN2UxZWNhMGNmZTRhOTk5Y2RjYWVkZjMw
YmQ0ZmNmMDU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTM1
LDggKzM1LDggQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAogI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIgotI2luY2x1
ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUluZm8uaCIK
KyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDQ2LDI4ICs0NDYsMjggQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGVuc3VyZUV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbygpCisgICAgU2hhcGVJbnNpZGVJbmZvKiBlbnN1cmVTaGFwZUluc2lkZUluZm8o
KQogICAgIHsKICAgICAgICAgaWYgKCFtX3JhcmVEYXRhIHx8ICFtX3JhcmVEYXRhLT5tX3NoYXBl
SW5zaWRlSW5mbykKLSAgICAgICAgICAgIHNldEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhFeGNs
dXNpb25TaGFwZUluc2lkZUluZm86OmNyZWF0ZUluZm8odGhpcykpOworICAgICAgICAgICAgc2V0
U2hhcGVJbnNpZGVJbmZvKFNoYXBlSW5zaWRlSW5mbzo6Y3JlYXRlSW5mbyh0aGlzKSk7CiAgICAg
ICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mby5nZXQoKTsKICAgICB9CiAK
LSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
IGNvbnN0CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8oKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKCFtX3JhcmVEYXRhIHx8ICFtX3JhcmVEYXRhLT5tX3NoYXBlSW5zaWRl
SW5mbykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IodGhpcykgPyBtX3JhcmVEYXRhLT5tX3NoYXBlSW5z
aWRlSW5mby5nZXQoKSA6IDA7CisgICAgICAgIHJldHVybiBTaGFwZUluc2lkZUluZm86OmlzRW5h
YmxlZEZvcih0aGlzKSA/IG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvLmdldCgpIDogMDsK
ICAgICB9Ci0gICAgdm9pZCBzZXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oUGFzc093blB0cjxF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8+IHZhbHVlKQorICAgIHZvaWQgc2V0U2hhcGVJbnNpZGVJ
bmZvKFBhc3NPd25QdHI8U2hhcGVJbnNpZGVJbmZvPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlm
ICghbV9yYXJlRGF0YSkKICAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmVu
ZGVyQmxvY2tSYXJlRGF0YSh0aGlzKSk7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fc2hhcGVJbnNp
ZGVJbmZvID0gdmFsdWU7CiAgICAgfQogICAgIHZvaWQgbWFya1NoYXBlSW5zaWRlRGVzY2VuZGFu
dHNGb3JMYXlvdXQoKTsKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGxheW91dEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbygpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dzRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvU2hhcmluZygpIGNvbnN0IHsgcmV0dXJuICFpc0lubGluZSgpICYmICFpc0Zs
b2F0aW5nKCk7IH0KKyAgICBTaGFwZUluc2lkZUluZm8qIGxheW91dFNoYXBlSW5zaWRlSW5mbygp
IGNvbnN0OworICAgIGJvb2wgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpIGNvbnN0IHsg
cmV0dXJuICFpc0lubGluZSgpICYmICFpc0Zsb2F0aW5nKCk7IH0KICNlbmRpZgogCiBwcm90ZWN0
ZWQ6CkBAIC01ODUsOCArNTg1LDggQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQotICAgIHZvaWQgY29tcHV0ZUV4Y2x1c2lvblNoYXBlU2l6ZSgpOwotICAg
IHZvaWQgdXBkYXRlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBFeGNsdXNpb25TaGFwZVZhbHVlKiwgY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogb2xkRXhj
bHVzaW9uU2hhcGUpOworICAgIHZvaWQgY29tcHV0ZVNoYXBlU2l6ZSgpOworICAgIHZvaWQgdXBk
YXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBTaGFwZVZhbHVlKiwgY29u
c3QgU2hhcGVWYWx1ZSogb2xkU2hhcGUpOwogI2VuZGlmCiAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KICAg
ICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQpAQCAtNzg5LDcgKzc4OSw3IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBG
bG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgICAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvICpzaGFwZU91dHNpZGUgPSBjaGls
ZC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICBTaGFw
ZU91dHNpZGVJbmZvICpzaGFwZU91dHNpZGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRz
aWRlSW5mbygpOwogICAgICAgICBpZiAoc2hhcGVPdXRzaWRlKQogICAgICAgICAgICAgcmV0dXJu
IGNoaWxkLT54KCk7CiAjZW5kaWYKQEAgLTgwMyw3ICs4MDMsNyBAQCBwcml2YXRlOgogICAgIExh
eW91dFVuaXQgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxvYXRpbmdP
YmplY3QqIGNoaWxkKSBjb25zdAogICAgIHsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAg
ICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRl
cmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAgICAgICAgU2hhcGVPdXRzaWRl
SW5mbyAqc2hhcGVPdXRzaWRlID0gY2hpbGQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8o
KTsKICAgICAgICAgaWYgKHNoYXBlT3V0c2lkZSkKICAgICAgICAgICAgIHJldHVybiBjaGlsZC0+
eSgpOwogI2VuZGlmCkBAIC0xMDg0LDggKzEwODQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbGF5
b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmLCBib29sIGhhc0lubGluZUNoaWxkKTsK
ICAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYsIElu
bGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwg
Y29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgdW5zaWduZWQgY29uc2VjdXRp
dmVIeXBoZW5hdGVkTGluZXMpOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIHZvaWQgdXBk
YXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byosIExheW91dFVuaXQmLCBMaW5lTGF5b3V0U3RhdGUmLCBib29sJik7Ci0gICAgYm9vbCBhZGp1
c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8qLCBMYXlvdXRVbml0LCBMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2
ZXImLCBGbG9hdGluZ09iamVjdCosIElubGluZUl0ZXJhdG9yJiwgV29yZE1lYXN1cmVtZW50cyYp
OworICAgIHZvaWQgdXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKFNoYXBlSW5z
aWRlSW5mbyosIExheW91dFVuaXQmLCBMaW5lTGF5b3V0U3RhdGUmLCBib29sJik7CisgICAgYm9v
bCBhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChTaGFwZUluc2lk
ZUluZm8qLCBMYXlvdXRVbml0LCBMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXIm
LCBGbG9hdGluZ09iamVjdCosIElubGluZUl0ZXJhdG9yJiwgV29yZE1lYXN1cmVtZW50cyYpOwog
I2VuZGlmCiAgICAgY29uc3QgSW5saW5lSXRlcmF0b3ImIHJlc3RhcnRMYXlvdXRSdW5zQW5kRmxv
YXRzSW5SYW5nZShMYXlvdXRVbml0IG9sZExvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbmV3TG9n
aWNhbEhlaWdodCwgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBJ
bmxpbmVCaWRpUmVzb2x2ZXImLCAgY29uc3QgSW5saW5lSXRlcmF0b3ImKTsKICAgICB2b2lkIGxp
bmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmKTsKQEAgLTEyOTIsNyArMTI5Miw3
IEBAIHB1YmxpYzoKIAogICAgICAgICBSb290SW5saW5lQm94KiBtX2xpbmVCcmVha1RvQXZvaWRX
aWRvdzsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgT3duUHRyPEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CisgICAgICAgIE93blB0cjxTaGFwZUlu
c2lkZUluZm8+IG1fc2hhcGVJbnNpZGVJbmZvOwogI2VuZGlmCiAgICAgICAgIGJvb2wgbV9zaG91
bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdyA6IDE7CiAgICAgICAgIGJvb2wgbV9kaXNjYXJkTWFy
Z2luQmVmb3JlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAKaW5kZXggMTdmNDMxYTc1ZDQ5YmY5OTQyYmY3MDRkMDMyMGE0YWY2
YmZhNmIzMy4uZmI5NWU2NDY5ZTM5YmU5ZWIxNjRiMGVmYzYzN2MxMDEwMTc0ZTU3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
QEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShTVkcpCkBAIC03NywxNiArNzcsMTYgQEAgc3RhdGljIExheW91dFVuaXQgbG9naWNhbEhl
aWdodEZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sIGlzRmlyc3RMaW4KIH0K
IAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBSZW5k
ZXJCbG9jazo6bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKK1NoYXBlSW5z
aWRlSW5mbyogUmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiB7Ci0g
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB2aWV3KCktPmxh
eW91dFN0YXRlKCktPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5zaGFwZUluc2lk
ZUluZm8oKTsKIAotICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYmIGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKSAmJiBhbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpIHsK
KyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbyAmJiBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkg
JiYgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKSB7CiAgICAgICAgIC8vIHJlZ2lvbkF0
QmxvY2tPZmZzZXQgcmV0dXJucyByZWdpb25zIGxpa2UgYW4gYXJyYXkgZmlyc3Q9ezAsTi0xfSwg
c2Vjb25kPXtOLE0tMX0sIC4uLgogICAgICAgICBMYXlvdXRVbml0IG9mZnNldCA9IGxvZ2ljYWxI
ZWlnaHQoKSArIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKHRoaXMsIGZhbHNlKSAtIExheW91dFVuaXQo
MSk7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChv
ZmZzZXQpOwogICAgICAgICBpZiAocmVnaW9uKQotICAgICAgICAgICAgc2hhcGVJbnNpZGVJbmZv
ID0gcmVnaW9uLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgICAgIHNoYXBl
SW5zaWRlSW5mbyA9IHJlZ2lvbi0+c2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHNoYXBlSW5zaWRlSW5mbzsKQEAgLTExNCw5ICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBBU1NFUlQoYmxvY2spOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IG1fYmxv
Y2stPmxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgICAgICBpZiAoZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKQotICAgICAgICAgICAgbV9zZWdtZW50ID0gZXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOworICAgICAgICBTaGFwZUluc2lkZUluZm8q
IHNoYXBlSW5zaWRlSW5mbyA9IG1fYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOworICAg
ICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKQorICAgICAgICAgICAgbV9zZWdtZW50ID0gc2hhcGVJ
bnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOwogI2VuZGlmCiAgICAgICAgIHVwZGF0ZUF2YWls
YWJsZVdpZHRoKCk7CiAgICAgfQpAQCAtMTk2LDIxICsxOTYsMjEgQEAgaW5saW5lIHZvaWQgTGlu
ZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoUmVuZGVyQmxv
Y2s6OkZsb2EKICAgICAvLyB3aGVuIHdlIGFkZCBhIHN1YnNlcXVlbnQgZmxvYXQgb24gdGhlIHNh
bWUgbGluZSwgd2UgbmVlZCB0byB1bmRvIHRoZSBzaGFwZSBkZWx0YSBpbiBvcmRlciB0byBwb3Np
dGlvbgogICAgIC8vIGJhc2VkIG9uIHRoZSBib3VuZGluZyBib3guIEluIG9yZGVyIHRvIGRvIHRo
aXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0
IHRvIGZpbmQKICAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUg
c2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZv
KiBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CisgICAgU2hhcGVPdXRzaWRlSW5mbyogbGFzdFNo
YXBlT3V0c2lkZUluZm8gPSAwOwogICAgIGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CiAgICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yICgtLWl0
OyBpdCAhPSBiZWdpbjsgLS1pdCkgewogICAgICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3QqIGxhc3RGbG9hdCA9ICppdDsKICAgICAgICAgaWYgKGxhc3RGbG9hdCAhPSBuZXdGbG9hdCAm
JiBsYXN0RmxvYXQtPnR5cGUoKSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBs
YXN0U2hhcGVPdXRzaWRlSW5mbyA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbygpOworICAgICAgICAgICAgbGFzdFNoYXBlT3V0c2lkZUluZm8gPSBsYXN0
RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgICAgIGlmIChs
YXN0U2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgICAgICBsYXN0U2hhcGVPdXRzaWRlSW5m
by0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkgLSBtX2Js
b2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSArIGxhc3RTaGFwZU91dHNpZGVJbmZv
LT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0Zp
cnN0TGluZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJl
bmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAgICBTaGFwZU91dHNpZGVJ
bmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lk
ZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgc2hhcGVPdXRzaWRl
SW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkgLSBt
X2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpICsgc2hhcGVPdXRzaWRlSW5mby0+
c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKG1fYmxvY2ssIG1faXNGaXJz
dExpbmUpKTsKICNlbmRpZgpAQCAtMTAzNSwxMCArMTAzNSwxMCBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBs
aW5lQm94LAogICAgIHVwZGF0ZUxvZ2ljYWxJbmxpbmVQb3NpdGlvbnModGhpcywgbGluZUxvZ2lj
YWxMZWZ0LCBsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGlzRmlyc3RM
aW5lLCBzaG91bGRJbmRlbnRUZXh0LCAwKTsKICAgICBib29sIG5lZWRzV29yZFNwYWNpbmc7CiAj
aWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNs
dXNpb25TaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsK
LSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJ
bmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAm
JiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAgICAgICAgQmlkaVJ1biogc2Vn
bWVudFN0YXJ0ID0gZmlyc3RSdW47Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50
cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsKKyAgICAgICAgY29uc3Qg
U2VnbWVudExpc3QmIHNlZ21lbnRzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOwogICAg
ICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1heDxmbG9hdD4ocm91bmRUb0ludChzZWdtZW50c1sw
XS5sb2dpY2FsTGVmdCksIGxpbmVMb2dpY2FsTGVmdCk7CiAgICAgICAgIGZsb2F0IGxvZ2ljYWxS
aWdodCA9IG1pbjxmbG9hdD4oZmxvb3JUb0ludChzZWdtZW50c1swXS5sb2dpY2FsUmlnaHQpLCBs
aW5lTG9naWNhbFJpZ2h0KTsKICAgICAgICAgZmxvYXQgc3RhcnRMb2dpY2FsTGVmdCA9IGxvZ2lj
YWxMZWZ0OwpAQCAtMTM1OSwxMyArMTM1OSwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3Ry
dWN0QmlkaVJ1bnNGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgSW5saW5lQmlkaQog
ICAgIFVOVVNFRF9QQVJBTShibG9jayk7CiAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50
KHRvcFJlc29sdmVyLCBiaWRpUnVucywgZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5KTsKICNlbHNlCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNs
dXNpb25TaGFwZUluc2lkZUluZm8gPSBibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCk7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgIWV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hh
cGVJbnNpZGVJbmZvID0gYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOworICAgIGlmICgh
c2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAg
ICAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KHRvcFJlc29sdmVyLCBiaWRpUnVucywg
ZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5n
ZXMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5nZXMoKTsKKyAgICBjb25z
dCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdt
ZW50UmFuZ2VzKCk7CiAgICAgQVNTRVJUKHNlZ21lbnRSYW5nZXMuc2l6ZSgpKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudFJhbmdlcy5zaXplKCk7IGkrKykgewpAQCAtMTYz
MSwyNiArMTYzMSwyNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGZpcnN0UG9zaXRpdmVXaWR0aChj
b25zdCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogICAgIHJldHVybiAwOwog
fQogCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0TG9naWNhbExpbmVUb3AoRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIElubGluZUl0ZXJh
dG9yIHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdv
cmRNZWFzdXJlbWVudHMpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0TG9naWNhbExp
bmVUb3AoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8sIElubGluZUl0ZXJhdG9yIHN0
YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFz
dXJlbWVudHMpCiB7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgZW5kICE9
IHN0YXJ0KQorICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8IGVuZCAhPSBzdGFydCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBmbG9hdCBtaW5XaWR0aCA9IGZpcnN0UG9zaXRpdmVXaWR0aCh3
b3JkTWVhc3VyZW1lbnRzKTsKICAgICBBU1NFUlQobWluV2lkdGggfHwgd29yZE1lYXN1cmVtZW50
cy5pc0VtcHR5KCkpOwotICAgIGlmIChtaW5XaWR0aCA+IDAgJiYgZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLT5hZGp1c3RMb2dpY2FsTGluZVRvcChtaW5XaWR0aCkpCi0gICAgICAgIHJldHVybiBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxvZ2ljYWxMaW5lVG9wKCk7CisgICAgaWYgKG1pbldp
ZHRoID4gMCAmJiBzaGFwZUluc2lkZUluZm8tPmFkanVzdExvZ2ljYWxMaW5lVG9wKG1pbldpZHRo
KSkKKyAgICAgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVUb3AoKTsKIAot
ICAgIHJldHVybiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbEJvdHRvbSgp
OworICAgIHJldHVybiBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbEJvdHRvbSgpOwogfQog
Ci12b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVudExpbmUo
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIExheW91
dFVuaXQmIGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwg
Ym9vbCYgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnVw
ZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShTaGFwZUluc2lkZUluZm8qIHNoYXBl
SW5zaWRlSW5mbywgTGF5b3V0VW5pdCYgYWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBib29sJiBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKQogewog
ICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IHRoaXMtPmxvZ2ljYWxIZWlnaHQoKTsKICAg
ICBSZW5kZXJSZWdpb24qIGN1cnJlbnRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2lj
YWxIZWlnaHQpOwogICAgIGlmIChjdXJyZW50UmVnaW9uKQotICAgICAgICBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAgICBpZiAo
IWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvID0gbGF5
b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8pCiAgICAgICAg
IHJldHVybjsKIAogICAgIExheW91dFVuaXQgbGluZVRvcCA9IGxvZ2ljYWxIZWlnaHQgKyBhYnNv
bHV0ZUxvZ2ljYWxUb3A7CkBAIC0xNjU4LDE4ICsxNjU4LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8qCiAKICAgICBpZiAobGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKSB7CiAgICAgICAgIFJl
bmRlclJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNhbEhlaWdo
dCArIGxpbmVIZWlnaHQgLSBMYXlvdXRVbml0KDEpKTsKLSAgICAgICAgbGluZVRvcCArPSBleGNs
dXNpb25TaGFwZUluc2lkZUluZm8tPm93bmVyKCktPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsK
KyAgICAgICAgbGluZVRvcCArPSBzaGFwZUluc2lkZUluZm8tPm93bmVyKCktPmJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUoKTsKICAgICAgICAgLy8gQ29udGVudCBpbiBhIGZsb3cgdGhyZWFkIGlzIHJl
bGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRocmVhZCwgYnV0IHRoZSBzaGFwZSBjYWxj
dWxhdGlvbiBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcmVnaW9uLgogICAgICAg
ICBpZiAoY3VycmVudFJlZ2lvbiA9PSBuZXh0UmVnaW9uKQogICAgICAgICAgICAgbGluZVRvcCAt
PSBjdXJyZW50UmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKTsKICAgICB9
CiAKICAgICAvLyBGSVhNRTogQnVnIDk1MzYxOiBJdCBpcyBwb3NzaWJsZSBmb3IgYSBsaW5lIHRv
IGdyb3cgYmV5b25kIGxpbmVIZWlnaHQsIGluIHdoaWNoIGNhc2UgdGhlc2Ugc2VnbWVudHMgbWF5
IGJlIGluY29ycmVjdC4KLSAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNvbXB1dGVTZWdt
ZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CisgICAgc2hhcGVJbnNpZGVJbmZvLT5j
b21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpOwogCiAgICAgLy8gVGhl
IG92ZXJmbG93IHNob3VsZCBiZSBwdXNoZWQgYmVsb3cgdGhlIGNvbnRlbnQgYm94Ci0gICAgTGF5
b3V0VW5pdCBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby0+c2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKTsKLSAgICBpZiAoIWV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby0+bGluZVdpdGhpblNoYXBlQm91bmRzKCkgJiYgIWxpbmVPdmVyZmxvd3NG
cm9tU2hhcGVJbnNpZGUgJiYgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQpIHsKKyAgICBMYXlv
dXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gc2hhcGVJbnNpZGVJbmZvLT5zaGFw
ZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpOworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvLT5saW5l
V2l0aGluU2hhcGVCb3VuZHMoKSAmJiAhbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSAmJiBz
aGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCkgewogICAgICAgICBsaW5lT3ZlcmZsb3dzRnJvbVNo
YXBlSW5zaWRlID0gdHJ1ZTsKICAgICAgICAgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0ID0g
c2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQ7CiAKQEAgLTE2ODEsOSArMTY4MSw5IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8qCiAgICAgICAgICAgICBuZXdMb2dpY2FsSGVpZ2h0ID0gbG9naWNh
bEhlaWdodCArIHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gbGluZVRvcCAtIGN1cnJlbnRS
ZWdpb24tPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKIAogICAgICAgICAgICAgUmVuZGVyUmVn
aW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChuZXdMb2dpY2FsSGVpZ2h0KTsK
LSAgICAgICAgICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogbmV4dFNoYXBlSW5mbyA9IDA7
CisgICAgICAgICAgICBTaGFwZUluc2lkZUluZm8qIG5leHRTaGFwZUluZm8gPSAwOwogICAgICAg
ICAgICAgaWYgKG5leHRSZWdpb24pCi0gICAgICAgICAgICAgICAgbmV4dFNoYXBlSW5mbyA9IG5l
eHRSZWdpb24tPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICAgICAgICAgIG5l
eHRTaGFwZUluZm8gPSBuZXh0UmVnaW9uLT5zaGFwZUluc2lkZUluZm8oKTsKIAogICAgICAgICAg
ICAgLy8gVGhlIG92ZXJmbG93IGZsb3dzIGludG8gYW5vdGhlciByZWdpb24gd2l0aCBzaGFwZS1p
bnNpZGUKICAgICAgICAgICAgIGlmIChjdXJyZW50UmVnaW9uICE9IG5leHRSZWdpb24gJiYgbmV4
dFNoYXBlSW5mbykgewpAQCAtMTY5Miw3ICsxNjkyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBk
YXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byoKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldCA9IG5leHRTaGFwZUluZm8tPnNo
YXBlTG9naWNhbFRvcCgpIC0gbmV4dFJlZ2lvbi0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwog
ICAgICAgICAgICAgICAgIG5leHRTaGFwZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckxpbmUob2Zm
c2V0LCBsaW5lSGVpZ2h0KTsKIAotICAgICAgICAgICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyA9IG5leHRTaGFwZUluZm87CisgICAgICAgICAgICAgICAgc2hhcGVJbnNpZGVJbmZvID0g
bmV4dFNoYXBlSW5mbzsKICAgICAgICAgICAgICAgICBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5z
aWRlID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDAsOSArMTcwMCw5
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGlu
ZShFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qCiAgICAgfQogfQogCi1ib29sIFJlbmRlckJsb2Nr
OjphZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgTGF5b3V0VW5pdCBhYnNv
bHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lLCBJbmxpbmVJdGVyYXRvciYgZW5kLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1l
bnRzKQorYm9vbCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVp
Z2h0SWZOZWVkZWQoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8sIExheW91dFVuaXQg
YWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sdmVyLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSwgSW5saW5lSXRlcmF0b3ImIGVuZCwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1
cmVtZW50cykKIHsKLSAgICBMYXlvdXRVbml0IGFkanVzdGVkTG9naWNhbExpbmVUb3AgPSBhZGp1
c3RMb2dpY2FsTGluZVRvcChleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIHJlc29sdmVyLnBvc2l0
aW9uKCksIGVuZCwgd29yZE1lYXN1cmVtZW50cyk7CisgICAgTGF5b3V0VW5pdCBhZGp1c3RlZExv
Z2ljYWxMaW5lVG9wID0gYWRqdXN0TG9naWNhbExpbmVUb3Aoc2hhcGVJbnNpZGVJbmZvLCByZXNv
bHZlci5wb3NpdGlvbigpLCBlbmQsIHdvcmRNZWFzdXJlbWVudHMpOwogICAgIGlmICghYWRqdXN0
ZWRMb2dpY2FsTGluZVRvcCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNzI5LDE5ICsx
NzI5LDE5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluCiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKICAgICBMYXlvdXRVbml0IGFic29sdXRlTG9naWNhbFRvcDsKLSAgICBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbygpOwotICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lkZUluZm8pIHsKLSAg
ICAgICAgQVNTRVJUKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+b3duZXIoKSA9PSB0aGlzIHx8
IGFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSk7Ci0gICAgICAgIGlmIChl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8gIT0gdGhpcy0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KCkpIHsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGxheW91dFNoYXBl
SW5zaWRlSW5mbygpOworICAgIGlmIChzaGFwZUluc2lkZUluZm8pIHsKKyAgICAgICAgQVNTRVJU
KHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKSA9PSB0aGlzIHx8IGFsbG93c1NoYXBlSW5zaWRlSW5m
b1NoYXJpbmcoKSk7CisgICAgICAgIGlmIChzaGFwZUluc2lkZUluZm8gIT0gdGhpcy0+c2hhcGVJ
bnNpZGVJbmZvKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDAyODQ6IElmIHN1YnNl
cXVlbnQgTGF5b3V0U3RhdGVzIGFyZSBwdXNoZWQsIHdlIHdpbGwgaGF2ZSB0byBhZGQKICAgICAg
ICAgICAgIC8vIHRoZWlyIG9mZnNldHMgZnJvbSB0aGUgb3JpZ2luYWwgc2hhcGUtaW5zaWRlIGNv
bnRhaW5lci4KICAgICAgICAgICAgIGFic29sdXRlTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3AoKTsK
ICAgICAgICAgfQogICAgICAgICAvLyBCZWdpbiBsYXlvdXQgYXQgdGhlIGxvZ2ljYWwgdG9wIG9m
IG91ciBzaGFwZSBpbnNpZGUuCi0gICAgICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgKyBhYnNvbHV0
ZUxvZ2ljYWxUb3AgPCBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgp
KSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpIC0gYWJzb2x1dGVMb2dpY2FsVG9wOworICAg
ICAgICBpZiAobG9naWNhbEhlaWdodCgpICsgYWJzb2x1dGVMb2dpY2FsVG9wIDwgc2hhcGVJbnNp
ZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSkgeworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0ID0gc2hhcGVJbnNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSAtIGFic29sdXRl
TG9naWNhbFRvcDsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpCi0g
ICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8t
Pm93bmVyKCktPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAgICAgICAgICAgICAgICBsb2dp
Y2FsSGVpZ2h0IC09IHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSgpOwogICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTE3NjksNyArMTc2OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElu
bGluCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0g
KGNvbnRhaW5zRmxvYXRzKCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7
CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgdXBkYXRlU2hhcGVBbmRTZWdtZW50
c0ZvckN1cnJlbnRMaW5lKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dpY2Fs
VG9wLCBsYXlvdXRTdGF0ZSwgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSk7CisgICAgICAg
IHVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShzaGFwZUluc2lkZUluZm8sIGFi
c29sdXRlTG9naWNhbFRvcCwgbGF5b3V0U3RhdGUsIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNp
ZGUpOwogI2VuZGlmCiAgICAgICAgIFdvcmRNZWFzdXJlbWVudHMgd29yZE1lYXN1cmVtZW50czsK
ICAgICAgICAgZW5kID0gbGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhyZXNvbHZlciwgbGF5b3V0
U3RhdGUubGluZUluZm8oKSwgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKQEAgLTE3
ODUsNyArMTc4NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJh
bmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluCiAgICAgICAgIH0KIAogI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBpZiAoYWRqdXN0TG9naWNhbExpbmVUb3BBbmRM
b2dpY2FsSGVpZ2h0SWZOZWVkZWQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxv
Z2ljYWxUb3AsIGxheW91dFN0YXRlLCByZXNvbHZlciwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKSkKKyAgICAgICAgaWYgKGFkanVzdExvZ2ljYWxMaW5l
VG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKHNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dp
Y2FsVG9wLCBsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUs
IGVuZCwgd29yZE1lYXN1cmVtZW50cykpCiAgICAgICAgICAgICBjb250aW51ZTsKICNlbmRpZgog
ICAgICAgICBBU1NFUlQoZW5kICE9IHJlc29sdmVyLnBvc2l0aW9uKCkpOwpAQCAtMjczOCwyOSAr
MjczOCwyOSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRM
aW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbAogI2lmICFFTkFCTEUoQ1NTX1NIQVBF
UykKICAgICByZXR1cm4gbmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRl
clRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0
ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CiAjZWxzZQotICAgIEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUlu
Zm8gPSBtX2Jsb2NrLT5sYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKIAotICAgIGlmICghZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvIHx8ICFleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxpbmVPdmVy
bGFwc1NoYXBlQm91bmRzKCkpCisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8gfHwgIXNoYXBlSW5z
aWRlSW5mby0+bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkKICAgICAgICAgcmV0dXJuIG5leHRT
ZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0
RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJl
bWVudHMpOwogCiAgICAgLy8gSW4gbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2Ugd2UgaGF2ZSB0
byB1c2UgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSB0byBkZXRlcm1pbmUgdGhlIGxpbmUgc2Vn
bWVudHMgc2luY2Ugc2hhcGUtb3V0c2lkZSdzIGNvZGVwYXRocyB1c2VzIHRoZSBzYW1lIGNvZGUg
dG8gZGV0ZXJtaW5lIGl0cyBzZWdtZW50cy4gVGhlIGxpbmUgY29udGFpbmluZyBpcyBub3QgYSBy
ZXF1aXJlbWVudCBmb3Igc2hhcGUtb3V0c2lkZSwKICAgICAvLyBzbyBpbiB0aGlzIGNhc2Ugd2Ug
Y2FuIGVuZCB1cCB3aXRoIHNvbWUgZXh0cmEgc2VnbWVudHMgZm9yIHRoZSBvdmVyZmxvd2luZyBj
b250ZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBhcHBseSB0aGUgc2VnbWVudHMgZm9yIHRoZSBv
dmVyZmxvd2luZyBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIHJlc2V0IGl0LgotICAgIGlmICghbV9i
bG9jay0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpICYmICFleGNsdXNpb25TaGFwZUluc2lk
ZUluZm8tPmxpbmVXaXRoaW5TaGFwZUJvdW5kcygpKSB7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+Y2xlYXJTZWdtZW50cygpOworICAgIGlmICghbV9ibG9jay0+Zmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpICYmICFzaGFwZUluc2lkZUluZm8tPmxpbmVXaXRoaW5TaGFwZUJv
dW5kcygpKSB7CisgICAgICAgIHNoYXBlSW5zaWRlSW5mby0+Y2xlYXJTZWdtZW50cygpOwogICAg
ICAgICByZXR1cm4gbmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRl
eHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRM
aW5lcywgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgfQogCiAgICAgSW5saW5lSXRlcmF0b3IgZW5k
ID0gcmVzb2x2ZXIucG9zaXRpb24oKTsKICAgICBJbmxpbmVJdGVyYXRvciBvbGRFbmQgPSBlbmQ7
CiAKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgewor
ICAgIGlmICghc2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CiAgICAgICAgIGVuZCA9
IG5leHRTZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRN
ZWFzdXJlbWVudHMpOwogICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVk
SXNvbGF0ZXMob2xkRW5kKTsKICAgICAgICAgcmV0dXJuIG9sZEVuZDsKICAgICB9CiAKLSAgICBj
b25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNl
Z21lbnRzKCk7Ci0gICAgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdlcyA9IGV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOworICAgIGNvbnN0IFNlZ21lbnRMaXN0
JiBzZWdtZW50cyA9IHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsKKyAgICBTZWdtZW50UmFu
Z2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50UmFuZ2VzKCk7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudHMuc2l6ZSgpICYmICFlbmQu
YXRFbmQoKTsgaSsrKSB7CiAgICAgICAgIElubGluZUl0ZXJhdG9yIHNlZ21lbnRTdGFydCA9IHJl
c29sdmVyLnBvc2l0aW9uKCk7CkBAIC0zMzk4LDcgKzMzOTgsNyBAQCBJbmxpbmVJdGVyYXRvciBS
ZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRTZWdtZW50QnJlYWsoSW5saW5lQmlkaVJlc29s
dmVyJiByZQogCiAgZW5kOgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyogc2hhcGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluZm8gPSBtX2Jsb2NrLT5s
YXlvdXRTaGFwZUluc2lkZUluZm8oKTsKICAgICBib29sIHNlZ21lbnRBbGxvd3NPdmVyZmxvdyA9
ICFzaGFwZUluZm8gfHwgIXNoYXBlSW5mby0+aGFzU2VnbWVudHMoKTsKICNlbHNlCiAgICAgYm9v
bCBzZWdtZW50QWxsb3dzT3ZlcmZsb3cgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAppbmRleCAxMTRkZjViMGIyNjI3OTJmMWI5M2Q3Njk0OTE5YWI1NmEyZjI1MTFl
Li4yN2M0NmVmMDE0MGMyNzQ1M2ZjNmM2NjY2MTY4MGE0YWUyNWJiMTk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgUmVuZGVy
Qm94Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVp
Z2h0RGVzY2VuZGFudElmTmVlZGVkKHRoaXMpOwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0g
ICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKKyAgICBTaGFw
ZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOwogI2VuZGlmCiAKICAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCk7CkBAIC0zMTUsMjIgKzMxNSwyMiBAQCB2b2lk
IFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAg
IHVwZGF0ZUV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKHN0eWxlKCkt
PnNoYXBlT3V0c2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5zaGFwZU91dHNpZGUoKSA6IDAp
OworICAgIHVwZGF0ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKHN0eWxlKCktPnNo
YXBlT3V0c2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5zaGFwZU91dHNpZGUoKSA6IDApOwog
I2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyQm94Ojp1cGRh
dGVFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNsdXNp
b25TaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9s
ZFNoYXBlT3V0c2lkZSkKK3ZvaWQgUmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0
ZXJTdHlsZUNoYW5nZShjb25zdCBTaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNvbnN0IFNoYXBl
VmFsdWUqIG9sZFNoYXBlT3V0c2lkZSkKIHsKICAgICAvLyBGSVhNRTogQSBmdXR1cmUgb3B0aW1p
emF0aW9uIHdvdWxkIGRvIGEgZGVlcCBjb21wYXJpc29uIGZvciBlcXVhbGl0eS4gKGJ1ZyAxMDA4
MTEpCiAgICAgaWYgKHNoYXBlT3V0c2lkZSA9PSBvbGRTaGFwZU91dHNpZGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChzaGFwZU91dHNpZGUpIHsKLSAgICAgICAgRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyA9IEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm86OmVuc3VyZUluZm8odGhpcyk7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlT3V0c2lk
ZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CisgICAgICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBl
T3V0c2lkZUluZm8gPSBTaGFwZU91dHNpZGVJbmZvOjplbnN1cmVJbmZvKHRoaXMpOworICAgICAg
ICBzaGFwZU91dHNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOwogICAgIH0gZWxzZQotICAgICAg
ICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOworICAgICAgICBT
aGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCA5YWJmNmI0ODBhZjdlMzhmNmE4N2JkNDQ1YzBh
NzM5MGM0MDQwN2Y4Li5hN2ZjMWVjZWNmZDNjODA2MWNhMWI2ZGYwYzAzZDc0Yzk4YjY2OTFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyT3ZlcmZsb3cuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIK
KyNpbmNsdWRlICJTaGFwZU91dHNpZGVJbmZvLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTc3LDkgKzU3Nyw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1NhbWVEaXJlY3Rp
b25Bcyhjb25zdCBSZW5kZXJCb3gqIG9iamVjdCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gb2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKTsgfQogCiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogZXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbygpIGNvbnN0CisgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRl
SW5mbygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaXNGbG9hdGluZ1dpdGhTaGFwZU91
dHNpZGUoKSAmJiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IodGhpcykg
PyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjppbmZvKHRoaXMpIDogMDsKKyAgICAgICAgcmV0
dXJuIGlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYgU2hhcGVPdXRzaWRlSW5mbzo6aXNF
bmFibGVkRm9yKHRoaXMpID8gU2hhcGVPdXRzaWRlSW5mbzo6aW5mbyh0aGlzKSA6IDA7CiAgICAg
fQogI2VuZGlmCiAKQEAgLTYyNCw3ICs2MjQsNyBAQCBwcm90ZWN0ZWQ6CiAgCiBwcml2YXRlOgog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIHZvaWQgdXBkYXRlRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVP
dXRzaWRlLCBjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUpOworICAg
IHZvaWQgdXBkYXRlU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgU2hhcGVW
YWx1ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUpOwog
I2VuZGlmCiAKICAgICBib29sIGZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoRnJh
bWUqLCBGcmFtZVZpZXcqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDYxYmIxYzYzNzBjMDljOGVkNmVhNTVmZDFl
MmE0NjQyMjVmNzIzOTUuLmFiYWQ1YjcyYTM5NDI3YTMwNDhlNTFiZjQ5YWZjZmE1M2YwNDFlNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcApAQCAtNjI3LDcgKzYyNyw3IEBAIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50T2Zmc2V0KCkgY29uc3QKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlmIChp
c0JveCgpICYmIGlzRmxvYXRpbmcoKSkKLSAgICAgICAgaWYgKEV4Y2x1c2lvblNoYXBlT3V0c2lk
ZUluZm8qIHNoYXBlT3V0c2lkZSA9IHRvUmVuZGVyQm94KHRoaXMpLT5leGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvKCkpCisgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUg
PSB0b1JlbmRlckJveCh0aGlzKS0+c2hhcGVPdXRzaWRlSW5mbygpKQogICAgICAgICAgICAgb2Zm
c2V0IC09IHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsT2Zmc2V0KCk7CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggODhhMDhiODhhMzU2ZGQ3OTc0MGU2
YWRhZDc5MzUzNWVlMjFlZDk2NS4uYWU1NDM0ZmM1OTdlOGE0YmZkNjkwNGMzNDEzYjA2YmJjNTZk
NmRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yNDksOCArMjQ5
LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgbV9sYXlv
dXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IHJlbmRl
cmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAgICAgIHx8IG1fbGF5b3V0
U3RhdGUtPmxpbmVHcmlkKCkgfHwgKHJlbmRlcmVyLT5zdHlsZSgpLT5saW5lR3JpZCgpICE9IFJl
bmRlclN0eWxlOjppbml0aWFsTGluZUdyaWQoKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgICAgIHx8IChyZW5kZXJlci0+aXNSZW5k
ZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5leGNsdXNpb25TaGFwZUluc2lk
ZUluZm8oKSkKLSAgICAgICAgICAgIHx8IChtX2xheW91dFN0YXRlLT5leGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKSAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICF0b1JlbmRlckJsb2Nr
KHJlbmRlcmVyKS0+YWxsb3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQorICAg
ICAgICAgICAgfHwgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhy
ZW5kZXJlciktPnNoYXBlSW5zaWRlSW5mbygpKQorICAgICAgICAgICAgfHwgKG1fbGF5b3V0U3Rh
dGUtPnNoYXBlSW5zaWRlSW5mbygpICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRv
UmVuZGVyQmxvY2socmVuZGVyZXIpLT5hbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpCiAj
ZW5kaWYKICAgICAgICAgICAgICkgewogICAgICAgICAgICAgcHVzaExheW91dFN0YXRlRm9yQ3Vy
cmVudEZsb3dUaHJlYWQocmVuZGVyZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyMTI0ZmQ1NjA3MzM1NjNiNGEw
Yzg3OGEzODZmZDQ0MGNhNTI4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAKQEAgLTAsMCArMSw1MTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICog
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
CisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCisKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRWRn
ZUludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCwKKyAgICBWZXJ0ZXhNaW5ZLAorICAgIFZl
cnRleE1heFksCisgICAgVmVydGV4WUJvdGgKK307CisKK3N0cnVjdCBFZGdlSW50ZXJzZWN0aW9u
IHsKKyAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlOworICAgIEZsb2F0UG9pbnQgcG9p
bnQ7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKK307CisKK3N0YXRpYyBpbmxpbmUg
ZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuICgocG9p
bnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgo
dmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIGlzUmVmbGV4VmVydGV4KGNvbnN0IEZsb2F0UG9pbnQm
IHByZXZWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYg
bmV4dFZlcnRleCkKK3sKKyAgICByZXR1cm4gbGVmdFNpZGUocHJldlZlcnRleCwgbmV4dFZlcnRl
eCwgdmVydGV4KSA8IDA7Cit9CisKK3N0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0
aW9uJiByZXN1bHQpCit7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICplZGdl
UG9pbnRlcjsKKworICAgIGlmIChlZGdlLm1pblkoKSA+IHkgfHwgZWRnZS5tYXhZKCkgPCB5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0g
ZWRnZS52ZXJ0ZXgxKCk7CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVy
dGV4MigpOworICAgIGZsb2F0IGR5ID0gdmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKTsKKworICAg
IGZsb2F0IGludGVyc2VjdGlvblg7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgaW50ZXJzZWN0
aW9uVHlwZTsKKworICAgIGlmICghZHkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZl
cnRleFlCb3RoOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gZWRnZS5taW5YKCk7CisgICAgfSBl
bHNlIGlmICh5ID09IGVkZ2UubWluWSgpKSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBW
ZXJ0ZXhNaW5ZOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpIDwgdmVydGV4
Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKKyAgICB9IGVsc2UgaWYgKHkgPT0g
ZWRnZS5tYXhZKCkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1heFk7Cisg
ICAgICAgIGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPiB2ZXJ0ZXgyLnkoKSkgPyB2ZXJ0
ZXgxLngoKSA6IHZlcnRleDIueCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludGVyc2VjdGlv
blR5cGUgPSBOb3JtYWw7CisgICAgICAgIGludGVyc2VjdGlvblggPSAoKHkgLSB2ZXJ0ZXgxLnko
KSkgKiAodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgLyBkeSkgKyB2ZXJ0ZXgxLngoKTsKKyAg
ICB9CisKKyAgICByZXN1bHQuZWRnZSA9IGVkZ2VQb2ludGVyOworICAgIHJlc3VsdC50eXBlID0g
aW50ZXJzZWN0aW9uVHlwZTsKKyAgICByZXN1bHQucG9pbnQuc2V0KGludGVyc2VjdGlvblgsIHkp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRTaXplIGlud2Fy
ZEVkZ2VOb3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKK3sKKyAgICBGbG9hdFNp
emUgZWRnZURlbHRhID0gZWRnZS52ZXJ0ZXgyKCkgLSBlZGdlLnZlcnRleDEoKTsKKyAgICBpZiAo
IWVkZ2VEZWx0YS53aWR0aCgpKQorICAgICAgICByZXR1cm4gRmxvYXRTaXplKChlZGdlRGVsdGEu
aGVpZ2h0KCkgPiAwID8gLTEgOiAxKSwgMCk7CisgICAgaWYgKCFlZGdlRGVsdGEuaGVpZ2h0KCkp
CisgICAgICAgIHJldHVybiBGbG9hdFNpemUoMCwgKGVkZ2VEZWx0YS53aWR0aCgpID4gMCA/IDEg
OiAtMSkpOworICAgIGZsb2F0IGVkZ2VMZW5ndGggPSBlZGdlRGVsdGEuZGlhZ29uYWxMZW5ndGgo
KTsKKyAgICByZXR1cm4gRmxvYXRTaXplKC1lZGdlRGVsdGEuaGVpZ2h0KCkgLyBlZGdlTGVuZ3Ro
LCBlZGdlRGVsdGEud2lkdGgoKSAvIGVkZ2VMZW5ndGgpOworfQorCitzdGF0aWMgaW5saW5lIEZs
b2F0U2l6ZSBvdXR3YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlKQor
eworICAgIHJldHVybiAtaW53YXJkRWRnZU5vcm1hbChlZGdlKTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGVuZEFyYyhWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzLCBjb25zdCBGbG9h
dFBvaW50JiBhcmNDZW50ZXIsIGZsb2F0IGFyY1JhZGl1cywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRBcmNWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZEFyY1ZlcnRleCwgYm9vbCBwYWRkaW5n
KQoreworICAgIGZsb2F0IHN0YXJ0QW5nbGUgPSBhdGFuMihzdGFydEFyY1ZlcnRleC55KCkgLSBh
cmNDZW50ZXIueSgpLCBzdGFydEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKKyAgICBm
bG9hdCBlbmRBbmdsZSA9IGF0YW4yKGVuZEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgpLCBl
bmRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7CisgICAgY29uc3QgZmxvYXQgdHdvUEkg
PSBwaUZsb2F0ICogMjsKKyAgICBpZiAoc3RhcnRBbmdsZSA8IDApCisgICAgICAgIHN0YXJ0QW5n
bGUgKz0gdHdvUEk7CisgICAgaWYgKGVuZEFuZ2xlIDwgMCkKKyAgICAgICAgZW5kQW5nbGUgKz0g
dHdvUEk7CisgICAgZmxvYXQgYW5nbGUgPSAoc3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSA/IChzdGFy
dEFuZ2xlIC0gZW5kQW5nbGUpIDogKHN0YXJ0QW5nbGUgKyB0d29QSSAtIGVuZEFuZ2xlKTsKKyAg
ICBjb25zdCBmbG9hdCBhcmNTZWdtZW50Q291bnQgPSA2OyAvLyBBbiBldmVuIG51bWJlciBzbyB0
aGF0IG9uZSBhcmMgdmVydGV4IHdpbGwgYmUgZWFjdGx5IGFyY1JhZGl1cyBmcm9tIGFyY0NlbnRl
ci4KKyAgICBmbG9hdCBhcmNTZWdtZW50QW5nbGUgPSAgKChwYWRkaW5nKSA/IC1hbmdsZSA6IHR3
b1BJIC0gYW5nbGUpIC8gYXJjU2VnbWVudENvdW50OworCisgICAgdmVydGljZXMuYXBwZW5kKHN0
YXJ0QXJjVmVydGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJjU2VnbWVudENv
dW50OyArK2kpIHsKKyAgICAgICAgZmxvYXQgYW5nbGUgPSBzdGFydEFuZ2xlICsgYXJjU2VnbWVu
dEFuZ2xlICogaTsKKyAgICAgICAgdmVydGljZXMuYXBwZW5kKGFyY0NlbnRlciArIEZsb2F0UG9p
bnQoY29zKGFuZ2xlKSAqIGFyY1JhZGl1cywgc2luKGFuZ2xlKSAqIGFyY1JhZGl1cykpOworICAg
IH0KKyAgICB2ZXJ0aWNlcy5hcHBlbmQoZW5kQXJjVmVydGV4KTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2
ZXJ0aWNlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVydGljZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIHZlcnRpY2VzW2ldLnNldChMYXlvdXRVbml0KHZlcnRpY2VzW2ldLngo
KSkudG9GbG9hdCgpLCBMYXlvdXRVbml0KHZlcnRpY2VzW2ldLnkoKSkudG9GbG9hdCgpKTsKK30K
Kworc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBlUGFk
ZGluZ0JvdW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHBhZGRpbmcsIFdp
bmRSdWxlIGZpbGxSdWxlKQoreworICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBwYWRk
ZWRWZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKSk7CisgICAgRmxv
YXRQb2ludCBpbnRlcnNlY3Rpb247CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9s
eWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkgeworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25F
ZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRnZUF0KGkpOworICAgICAgICBjb25zdCBGbG9hdFBv
bHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpOworICAgICAgICBP
ZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRnZSwgaW53YXJkRWRnZU5vcm1h
bCh0aGlzRWRnZSkgKiBwYWRkaW5nKTsKKyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9m
ZnNldEVkZ2UocHJldkVkZ2UsIGlud2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogcGFkZGluZyk7
CisKKyAgICAgICAgaWYgKHByZXZPZmZzZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRn
ZSwgaW50ZXJzZWN0aW9uKSkKKyAgICAgICAgICAgIHBhZGRlZFZlcnRpY2VzLT5hcHBlbmQoaW50
ZXJzZWN0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAoaXNSZWZsZXhWZXJ0ZXgocHJldkVkZ2UudmVy
dGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDIoKSkpCisgICAgICAg
ICAgICBhcHBlbmRBcmMoKnBhZGRlZFZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHBhZGRp
bmcsIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4MSgpLCB0
cnVlKTsKKyAgICB9CisKKyAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCpwYWRkZWRW
ZXJ0aWNlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24ocGFkZGVkVmVy
dGljZXMucmVsZWFzZSgpLCBmaWxsUnVsZSkpOworfQorCitzdGF0aWMgaW5saW5lIFBhc3NPd25Q
dHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMoY29uc3QgRmxvYXRQb2x5
Z29uJiBwb2x5Z29uLCBmbG9hdCBtYXJnaW4sIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIE93
blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtYXJnaW5WZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBW
ZWN0b3I8RmxvYXRQb2ludD4oKSk7CisgICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb247CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkg
eworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRn
ZUF0KGkpOworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNF
ZGdlLnByZXZpb3VzRWRnZSgpOworICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0
RWRnZSh0aGlzRWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogbWFyZ2luKTsKKyAg
ICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9mZnNldEVkZ2UocHJldkVkZ2UsIG91dHdhcmRF
ZGdlTm9ybWFsKHByZXZFZGdlKSAqIG1hcmdpbik7CisKKyAgICAgICAgaWYgKHByZXZPZmZzZXRF
ZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9uKSkKKyAgICAgICAg
ICAgIG1hcmdpblZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYXBwZW5kQXJjKCptYXJnaW5WZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgp
LCBtYXJnaW4sIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4
MSgpLCBmYWxzZSk7CisgICAgfQorCisgICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgq
bWFyZ2luVmVydGljZXMpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKG1h
cmdpblZlcnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKK30KKworY29uc3QgRmxvYXRQb2x5
Z29uJiBQb2x5Z29uU2hhcGU6OnNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHNoYXBlUGFkZGluZygpID49IDApOworICAgIGlmICghc2hhcGVQYWRkaW5nKCkpCisgICAg
ICAgIHJldHVybiBtX3BvbHlnb247CisKKyAgICBpZiAoIW1fcGFkZGluZ0JvdW5kcykKKyAgICAg
ICAgbV9wYWRkaW5nQm91bmRzID0gY29tcHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyhtX3BvbHlnb24s
IHNoYXBlUGFkZGluZygpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7CisKKyAgICByZXR1cm4gKm1f
cGFkZGluZ0JvdW5kczsKK30KKworY29uc3QgRmxvYXRQb2x5Z29uJiBQb2x5Z29uU2hhcGU6OnNo
YXBlTWFyZ2luQm91bmRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2hhcGVNYXJnaW4oKSA+PSAw
KTsKKyAgICBpZiAoIXNoYXBlTWFyZ2luKCkpCisgICAgICAgIHJldHVybiBtX3BvbHlnb247CisK
KyAgICBpZiAoIW1fbWFyZ2luQm91bmRzKQorICAgICAgICBtX21hcmdpbkJvdW5kcyA9IGNvbXB1
dGVTaGFwZU1hcmdpbkJvdW5kcyhtX3BvbHlnb24sIHNoYXBlTWFyZ2luKCksIG1fcG9seWdvbi5m
aWxsUnVsZSgpKTsKKworICAgIHJldHVybiAqbV9tYXJnaW5Cb3VuZHM7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyhjb25zdCBFZGdlSW50ZXJz
ZWN0aW9uJiBpbnRlcnNlY3Rpb24sIEZsb2F0UG9pbnQmIHByZXZWZXJ0ZXgsIEZsb2F0UG9pbnQm
IHRoaXNWZXJ0ZXgsIEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCit7CisgICAgaWYgKGludGVyc2Vj
dGlvbi50eXBlICE9IFZlcnRleE1pblkgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWF4
WSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGludGVyc2VjdGlvbi5lZGdl
ICYmIGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0IEZsb2F0UG9seWdv
biYgcG9seWdvbiA9ICooaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKKworICAg
IGlmICgoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4
MSgpLnkoKSA8IHRoaXNFZGdlLnZlcnRleDIoKS55KCkpKQorICAgICAgICB8fCAoaW50ZXJzZWN0
aW9uLnR5cGUgPT0gVmVydGV4TWF4WSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNF
ZGdlLnZlcnRleDIoKS55KCkpKSkgeworICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0
ZXhBdCh0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAgIHRo
aXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsKKyAg
ICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgy
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0
KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsKKyAgICAgICAgdGhpc1ZlcnRleCA9IHBvbHlnb24u
dmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgyKCkpOworICAgICAgICBuZXh0VmVydGV4ID0g
cG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS5uZXh0RWRnZSgpLnZlcnRleEluZGV4MigpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFwcGVuZElu
dGVydmFsWChmbG9hdCB4LCBib29sIGluc2lkZSwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiByZXN1
bHQpCit7CisgICAgaWYgKCFpbnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU2hhcGVJbnRl
cnZhbCh4KSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUoKSAtIDFdLngy
ID0geDsKKworICAgIHJldHVybiAhaW5zaWRlOworfQorCitzdGF0aWMgYm9vbCBjb21wYXJlRWRn
ZUludGVyc2VjdGlvblgoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMSwgY29u
c3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMikKK3sKKyAgICBmbG9hdCB4MSA9IGlu
dGVyc2VjdGlvbjEucG9pbnQueCgpOworICAgIGZsb2F0IHgyID0gaW50ZXJzZWN0aW9uMi5wb2lu
dC54KCk7CisgICAgcmV0dXJuICh4MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5cGUgPCBpbnRl
cnNlY3Rpb24yLnR5cGUgOiB4MSA8IHgyOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlWEludGVy
c2VjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWlu
WSwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgVmVjdG9yPGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdl
cyh5LCB5LCBlZGdlcykpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxFZGdlSW50ZXJz
ZWN0aW9uPiBpbnRlcnNlY3Rpb25zOworICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9u
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZXNbaV0sIHksIGludGVyc2VjdGlvbikg
JiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4WUJvdGgpCisgICAgICAgICAgICBpbnRlcnNl
Y3Rpb25zLmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAgIH0KKworICAgIGlmIChpbnRlcnNlY3Rp
b25zLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6c29ydChpbnRlcnNl
Y3Rpb25zLmJlZ2luKCksIGludGVyc2VjdGlvbnMuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVFZGdl
SW50ZXJzZWN0aW9uWCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgaW50IHdpbmRD
b3VudCA9IDA7CisgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKKworICAgIHdoaWxlIChpbmRleCA8
IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24m
IHRoaXNJbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4XTsKKyAgICAgICAgaWYgKGlu
ZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBFZGdl
SW50ZXJzZWN0aW9uJiBuZXh0SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCArIDFd
OworICAgICAgICAgICAgaWYgKCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSA9PSBuZXh0SW50
ZXJzZWN0aW9uLnBvaW50LngoKSkgJiYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhN
aW5ZIHx8IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKSkgeworICAgICAgICAg
ICAgICAgIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gbmV4dEludGVyc2VjdGlvbi50eXBl
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgcGFpcnMgb2YgaW50ZXJzZWN0aW9ucyB3
aG9zZSB0eXBlcyBhcmUgVmVydGV4TWF4WSxWZXJ0ZXhNYXhZIGFuZCBWZXJ0ZXhNaW5ZLFZlcnRl
eE1pblkuCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwYWlycyBvZiBpbnRlcnNl
Y3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNaW5ZLFZlcnRleE1heFkgb3IgVmVydGV4TWF4
WSxWZXJ0ZXhNaW5ZIHdpdGggb25lIGludGVyc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdl
JiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7CisgICAgICAgIGJvb2wgZXZlbk9k
ZENyb3NzaW5nID0gIXdpbmRDb3VudDsKKworICAgICAgICBpZiAocG9seWdvbi5maWxsUnVsZSgp
ID09IFJVTEVfRVZFTk9ERCkgeworICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52
ZXJ0ZXgyKCkueSgpID4gdGhpc0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7CisgICAgICAg
ICAgICBldmVuT2RkQ3Jvc3NpbmcgPSBldmVuT2RkQ3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChldmVuT2RkQ3Jvc3NpbmcpIHsKKyAgICAgICAgICAgIGJv
b2wgZWRnZUNyb3NzaW5nID0gdGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbDsKKyAgICAg
ICAgICAgIGlmICghZWRnZUNyb3NzaW5nKSB7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBw
cmV2VmVydGV4OworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgdGhpc1ZlcnRleDsKKyAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50IG5leHRWZXJ0ZXg7CisKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXModGhpc0ludGVyc2VjdGlvbiwgcHJldlZlcnRl
eCwgdGhpc1ZlcnRleCwgbmV4dFZlcnRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5l
eHRWZXJ0ZXgueSgpID09IHkpCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3Npbmcg
PSAoaXNNaW5ZKSA/IHByZXZWZXJ0ZXgueSgpID4geSA6IHByZXZWZXJ0ZXgueSgpIDwgeTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJldlZlcnRleC55KCkgPT0geSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gbmV4dFZlcnRleC55KCkg
PiB5IDogbmV4dFZlcnRleC55KCkgPCB5OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlZGdlQ3Jvc3NpbmcpCisgICAgICAg
ICAgICAgICAgaW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQu
eCgpLCBpbnNpZGUsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICArK2luZGV4OworICAg
IH0KK30KKworc3RhdGljIHZvaWQgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhj
b25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFNo
YXBlSW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5MSwgeTIsIGVk
Z2VzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rp
b247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tpXTsKKyAgICAgICAg
ZmxvYXQgeDE7CisgICAgICAgIGZsb2F0IHgyOworCisgICAgICAgIGlmIChlZGdlLT5taW5ZKCkg
PCB5MSkgeworICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwgeTEsIGludGVy
c2VjdGlvbik7CisgICAgICAgICAgICB4MSA9IGludGVyc2VjdGlvbi5wb2ludC54KCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgeDEgPSAoZWRnZS0+dmVydGV4MSgpLnkoKSA8IGVkZ2Ut
PnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2UtPnZlcnRleDIoKS54
KCk7CisKKyAgICAgICAgaWYgKGVkZ2UtPm1heFkoKSA+IHkyKSB7CisgICAgICAgICAgICBjb21w
dXRlWEludGVyc2VjdGlvbihlZGdlLCB5MiwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgy
ID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4
MiA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpID4gZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52
ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsKKworICAgICAgICBpZiAoeDEgPiB4
MikKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIpOworCisgICAgICAgIGlmICh4MiA+IHgx
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChTaGFwZUludGVydmFsKHgxLCB4MikpOworICAg
IH0KKworICAgIHNvcnRTaGFwZUludGVydmFscyhyZXN1bHQpOworfQorCit2b2lkIFBvbHlnb25T
aGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgY29u
c3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKKyAgICBpZiAo
cG9seWdvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9n
aWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisg
ICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOworICAg
IGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsK
KyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRlcnZh
bHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IG1lcmdlZEludGVydmFsczsKKyAgICBt
ZXJnZVNoYXBlSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRl
cnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAg
Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJ
bnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGV4Y2x1ZGVkSW50ZXJ2YWxz
OworICAgIG1lcmdlU2hhcGVJbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxz
LCBleGNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhj
bHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU2hhcGVJbnRlcnZhbCBpbnRl
cnZhbCA9IGV4Y2x1ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVT
ZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBQb2x5
Z29uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAg
IGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOworICAg
IGlmIChwb2x5Z29uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeTEg
PSBsb2dpY2FsVG9wOworICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7
CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7
CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZh
bHMpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHkyWElu
dGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gY29tbW9uSW50ZXJ2YWxzOwor
ICAgIGludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBj
b21tb25JbnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGVkZ2VJbnRlcnZh
bHM7CisgICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwg
eTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGluY2x1ZGVk
SW50ZXJ2YWxzOworICAgIHN1YnRyYWN0U2hhcGVJbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxzLCBl
ZGdlSW50ZXJ2YWxzLCBpbmNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5jbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU2hhcGVJ
bnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1bHQu
YXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOworICAgIH0KK30K
Kworc3RhdGljIGlubGluZSBib29sIGZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFBv
bHlnb24mIHBvbHlnb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5zaWduZWQgb2Zmc2V0RWRn
ZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MikKK3sKKyAgICBWZWN0b3I8Y29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0Vk
Z2VzKHJlY3QueSgpLCByZWN0Lm1heFkoKSwgZWRnZXMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAgIGlm
IChlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJbmRl
eCgpICE9IG9mZnNldEVkZ2VJbmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgYWJvdmVPclRvVGhlTGVmdChjb25zdCBGbG9hdFJlY3QmIHIxLCBj
b25zdCBGbG9hdFJlY3QmIHIyKQoreworICAgIGlmIChyMS55KCkgPCByMi55KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChyMS55KCkgPT0gcjIueSgpKQorICAgICAgICByZXR1cm4g
cjEueCgpIDwgcjIueCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5Z29uU2hh
cGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2Fs
SW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExh
eW91dFVuaXQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1p
bkxvZ2ljYWxJbnRlcnZhbFRvcDsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxv
Z2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9
IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsKKworICAgIGNvbnN0IEZsb2F0UG9seWdv
biYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOworICAgIGNvbnN0IEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHBvbHlnb24uYm91bmRpbmdCb3goKTsKKyAgICBpZiAobWluSW50ZXJ2YWxX
aWR0aCA+IGJvdW5kaW5nQm94LndpZHRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZGluZ0JveC55KCksIG1pbkludGVydmFsVG9wKTsK
KyAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0OworCisgICAgaWYgKG1h
eFkgPiBib3VuZGluZ0JveC5tYXhZKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZl
Y3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgcG9seWdvbi5vdmVybGFw
cGluZ0VkZ2VzKG1pbkludGVydmFsVG9wLCBib3VuZGluZ0JveC5tYXhZKCksIGVkZ2VzKTsKKwor
ICAgIGZsb2F0IGR4ID0gbWluSW50ZXJ2YWxXaWR0aCAvIDI7CisgICAgZmxvYXQgZHkgPSBtaW5J
bnRlcnZhbEhlaWdodCAvIDI7CisgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRF
ZGdlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkg
eworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKihlZGdlc1tpXSk7Cisg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDAgPSBlZGdlLnByZXZpb3VzRWRnZSgpLnZl
cnRleDEoKTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4
MSgpOworICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7
CisgICAgICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZUJ1ZmZlcjsKKwor
ICAgICAgICBpZiAodmVydGV4Mi55KCkgPiB2ZXJ0ZXgxLnkoKSA/IHZlcnRleDIueCgpID49IHZl
cnRleDEueCgpIDogdmVydGV4MS54KCkgPj0gdmVydGV4Mi54KCkpIHsKKyAgICAgICAgICAgIG9m
ZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZShk
eCwgLWR5KSkpOworICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9s
eWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgZHkpKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdl
LCBGbG9hdFNpemUoZHgsIGR5KSkpOworICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBl
bmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgLWR5KSkpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzUmVmbGV4VmVydGV4KHZlcnRleDAsIHZlcnRleDEsIHZlcnRl
eDIpKSB7CisgICAgICAgICAgICBpZiAodmVydGV4Mi54KCkgPD0gdmVydGV4MS54KCkgJiYgdmVy
dGV4MC54KCkgPD0gdmVydGV4MS54KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZl
ci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKGR4LCAtZHkpLCBG
bG9hdFNpemUoZHgsIGR5KSkpOworICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi54KCkgPj0g
dmVydGV4MS54KCkgJiYgdmVydGV4MC54KCkgPj0gdmVydGV4MS54KCkpCisgICAgICAgICAgICAg
ICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxv
YXRTaXplKC1keCwgLWR5KSwgRmxvYXRTaXplKC1keCwgZHkpKSk7CisgICAgICAgICAgICBpZiAo
dmVydGV4Mi55KCkgPD0gdmVydGV4MS55KCkgJiYgdmVydGV4MC55KCkgPD0gdmVydGV4MS55KCkp
CisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVk
Z2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgZHkpLCBGbG9hdFNpemUoZHgsIGR5KSkpOworICAg
ICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi55KCkgPj0gdmVydGV4MS55KCkgJiYgdmVydGV4MC55
KCkgPj0gdmVydGV4MS55KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBl
bmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgLWR5KSwgRmxvYXRT
aXplKGR4LCAtZHkpKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgb2Zmc2V0RWRnZUJ1ZmZlci5zaXplKCk7ICsraikKKyAgICAgICAgICAgIGlmIChvZmZz
ZXRFZGdlQnVmZmVyW2pdLm1heFkoKSA+PSBtaW5ZKQorICAgICAgICAgICAgICAgIG9mZnNldEVk
Z2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pdKTsKKyAgICB9CisKKyAgICBvZmZzZXRFZGdl
cy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UocG9seWdvbiwgbWluSW50ZXJ2YWxUb3AsIEZsb2F0
U2l6ZSgwLCBkeSkpKTsKKworICAgIEZsb2F0UG9pbnQgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb247
CisgICAgRmxvYXRSZWN0IGZpcnN0Rml0UmVjdDsKKyAgICBib29sIGZpcnN0Rml0Rm91bmQgPSBm
YWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvZmZzZXRFZGdlcy5zaXplKCkg
LSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBvZmZzZXRF
ZGdlcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKG9mZnNldEVkZ2VzW2ldLmludGVy
c2VjdGlvbihvZmZzZXRFZGdlc1tqXSwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pKSB7CisgICAg
ICAgICAgICAgICAgRmxvYXRQb2ludCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uKG9mZnNldEVk
Z2VzSW50ZXJzZWN0aW9uLngoKSAtIGR4LCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbi55KCkgLSBk
eSk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZpcnN0Rml0UmVjdChwb3Rl
bnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplKTsKKyAgICAgICAg
ICAgICAgICBpZiAoKG9mZnNldEVkZ2VzW2ldLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6
OkxpbmVUb3AKKyAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0RWRnZXNbal0uYmFzaXMoKSA9
PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGluZVRvcAorICAgICAgICAgICAgICAgICAgICB8fCBwb3Rl
bnRpYWxGaXJzdEZpdExvY2F0aW9uLnkoKSA+PSBtaW5JbnRlcnZhbFRvcCkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgKCFmaXJzdEZpdEZvdW5kIHx8IGFib3ZlT3JUb1RoZUxlZnQocG90ZW50aWFs
Rmlyc3RGaXRSZWN0LCBmaXJzdEZpdFJlY3QpKQorICAgICAgICAgICAgICAgICAgICAmJiBwb2x5
Z29uLmNvbnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKQorICAgICAgICAgICAgICAgICAg
ICAmJiBmaXJzdEZpdFJlY3RJblBvbHlnb24ocG9seWdvbiwgcG90ZW50aWFsRmlyc3RGaXRSZWN0
LCBvZmZzZXRFZGdlc1tpXS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0uZWRnZUluZGV4KCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0Rm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBmaXJzdEZpdFJlY3QgPSBwb3RlbnRpYWxGaXJzdEZpdFJlY3Q7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZp
cnN0Rml0Rm91bmQpCisgICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQoZmlyc3RGaXRS
ZWN0LnkoKSk7CisgICAgcmV0dXJuIGZpcnN0Rml0Rm91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9s
eWdvblNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFw
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjYyOGFjM2FkZDA2NTZkNjczYjEyN2Q2ODg4YmYwZTg2MDJiNjE4MGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHln
b25TaGFwZS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQb2x5Z29uU2hhcGVf
aAorI2RlZmluZSBQb2x5Z29uU2hhcGVfaAorCisjaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgiCisj
aW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgT2Zmc2V0UG9seWdvbkVkZ2UgOiBwdWJsaWMgVmVydGV4UGFp
ciB7CitwdWJsaWM6CisgICAgZW51bSBCYXNpcyB7CisgICAgICAgIEVkZ2UsCisgICAgICAgIFZl
cnRleCwKKyAgICAgICAgTGluZVRvcAorICAgIH07CisKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShj
b25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKKyAg
ICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgxKCkgKyBvZmZzZXQpCisgICAgICAgICwgbV92
ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0KQorICAgICAgICAsIG1fZWRnZUluZGV4KGVk
Z2UuZWRnZUluZGV4KCkpCisgICAgICAgICwgbV9iYXNpcyhFZGdlKQorICAgIHsKKyAgICB9CisK
KyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvaW50JiByZWZsZXhWZXJ0ZXgsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQyKQorICAgICAg
ICA6IG1fdmVydGV4MShyZWZsZXhWZXJ0ZXggKyBvZmZzZXQxKQorICAgICAgICAsIG1fdmVydGV4
MihyZWZsZXhWZXJ0ZXggKyBvZmZzZXQyKQorICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQorICAg
ICAgICAsIG1fYmFzaXMoVmVydGV4KQorICAgIHsKKyAgICB9CisKKyAgICBPZmZzZXRQb2x5Z29u
RWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZh
bFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0
UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLngoKSwgbWluTG9naWNhbEludGVydmFsVG9wKSAr
IG9mZnNldCkKKyAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5n
Qm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQorICAgICAgICAs
IG1fZWRnZUluZGV4KC0xKQorICAgICAgICAsIG1fYmFzaXMoTGluZVRvcCkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV92ZXJ0ZXgxOyB9CisgICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2
ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgyOyB9CisgICAgaW50IGVk
Z2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9CisgICAgQmFzaXMgYmFzaXMo
KSBjb25zdCB7IHJldHVybiBtX2Jhc2lzOyB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRQb2ludCBt
X3ZlcnRleDE7CisgICAgRmxvYXRQb2ludCBtX3ZlcnRleDI7CisgICAgaW50IG1fZWRnZUluZGV4
OworICAgIEJhc2lzIG1fYmFzaXM7Cit9OworCitjbGFzcyBQb2x5Z29uU2hhcGUgOiBwdWJsaWMg
U2hhcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHlnb25TaGFwZSk7CitwdWJsaWM6
CisgICAgUG9seWdvblNoYXBlKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGlj
ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQorICAgICAgICA6IFNoYXBlKCkKKyAgICAgICAgLCBtX3Bv
bHlnb24odmVydGljZXMsIGZpbGxSdWxlKQorICAgICAgICAsIG1fbWFyZ2luQm91bmRzKG51bGxw
dHIpCisgICAgICAgICwgbV9wYWRkaW5nQm91bmRzKG51bGxwdHIpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2lu
Qm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQ
YWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9s
eWdvbi5pc0VtcHR5KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMo
TGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRM
aXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2
YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVk
SW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25z
dCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3Qg
T1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZU1hcmdp
bkJvdW5kcygpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVQYWRkaW5nQm91
bmRzKCkgY29uc3Q7CisKKyAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOworICAgIG11dGFibGUg
T3duUHRyPEZsb2F0UG9seWdvbj4gbV9tYXJnaW5Cb3VuZHM7CisgICAgbXV0YWJsZSBPd25QdHI8
RmxvYXRQb2x5Z29uPiBtX3BhZGRpbmdCb3VuZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBQb2x5Z29uU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTI3ZmNmYTcy
YWYzYzkzMDA1NWU1OTNiOWY1NGM3NDdhNDE3MGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAKQEAgLTAsMCArMSwy
MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENP
UFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwK
KyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK
KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVjdGFuZ2xlU2hh
cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5LCBmbG9h
dCByeCwgZmxvYXQgcnkpCit7CisgICAgQVNTRVJUKHJ5ID4gMCk7CisgICAgcmV0dXJuIHJ4ICog
c3FydCgxIC0gKHkgKiB5KSAvIChyeSAqIHJ5KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
ZWxsaXBzZVlJbnRlcmNlcHQoZmxvYXQgeCwgZmxvYXQgcngsIGZsb2F0IHJ5KQoreworICAgIEFT
U0VSVChyeCA+IDApOworICAgIHJldHVybiByeSAqIHNxcnQoMSAtICh4ICogeCkgLyAocnggKiBy
eCkpOworfQorCitGbG9hdFJvdW5kZWRSZWN0IEZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdCb3Vu
ZHMoZmxvYXQgcGFkZGluZykgY29uc3QKK3sKKyAgICBBU1NFUlQocGFkZGluZyA+PSAwKTsKKyAg
ICBpZiAoIXBhZGRpbmcgfHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAg
ICBmbG9hdCBib3VuZHNYID0geCgpICsgc3RkOjptaW4od2lkdGgoKSAvIDIsIHBhZGRpbmcpOwor
ICAgIGZsb2F0IGJvdW5kc1kgPSB5KCkgKyBzdGQ6Om1pbihoZWlnaHQoKSAvIDIsIHBhZGRpbmcp
OworICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gc3RkOjptYXgoMC4wZiwgd2lkdGgoKSAtIHBhZGRp
bmcgKiAyKTsKKyAgICBmbG9hdCBib3VuZHNIZWlnaHQgPSBzdGQ6Om1heCgwLjBmLCBoZWlnaHQo
KSAtIHBhZGRpbmcgKiAyKTsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gc3RkOjptYXgoMC4w
ZiwgcngoKSAtIHBhZGRpbmcpOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1kgPSBzdGQ6Om1heCgw
LjBmLCByeSgpIC0gcGFkZGluZyk7CisgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxvYXRS
ZWN0KGJvdW5kc1gsIGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9hdFNp
emUoYm91bmRzUmFkaXVzWCwgYm91bmRzUmFkaXVzWSkpOworfQorCitGbG9hdFJvdW5kZWRSZWN0
IEZsb2F0Um91bmRlZFJlY3Q6Om1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1hcmdpbiA+PSAwKTsKKyAgICBpZiAoIW1hcmdpbikKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworCisgICAgZmxvYXQgYm91bmRzWCA9IHgoKSAtIG1hcmdpbjsKKyAgICBmbG9hdCBi
b3VuZHNZID0geSgpIC0gbWFyZ2luOworICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gd2lkdGgoKSAr
IG1hcmdpbiAqIDI7CisgICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gaGVpZ2h0KCkgKyBtYXJnaW4g
KiAyOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1ggPSByeCgpICsgbWFyZ2luOworICAgIGZsb2F0
IGJvdW5kc1JhZGl1c1kgPSByeSgpICsgbWFyZ2luOworICAgIHJldHVybiBGbG9hdFJvdW5kZWRS
ZWN0KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVpZ2h0
KSwgRmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKK30KKworRmxvYXRQ
b2ludCBGbG9hdFJvdW5kZWRSZWN0Ojpjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3aWR0
aEF0SW50ZXJjZXB0KSBjb25zdAoreworICAgIGZsb2F0IHhpID0gKHdpZHRoKCkgLSB3aWR0aEF0
SW50ZXJjZXB0KSAvIDI7CisgICAgZmxvYXQgeWkgPSByeSgpIC0gZWxsaXBzZVlJbnRlcmNlcHQo
cngoKSAtIHhpLCByeCgpLCByeSgpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludCh4aSwgeWkpOwor
fQorCitGbG9hdFJvdW5kZWRSZWN0IFJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRpbmdCb3VuZHMo
KSBjb25zdAoreworICAgIGlmICghbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKSB7Cisg
ICAgICAgIG1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcyA9IHRydWU7CisgICAgICAgIG1f
cGFkZGluZ0JvdW5kcyA9IG1fYm91bmRzLnBhZGRpbmdCb3VuZHMoc2hhcGVQYWRkaW5nKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gbV9wYWRkaW5nQm91bmRzOworfQorCitGbG9hdFJvdW5kZWRSZWN0
IFJlY3RhbmdsZVNoYXBlOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcykgeworICAgICAgICBtX2hhdmVJbml0aWFsaXpl
ZE1hcmdpbkJvdW5kcyA9IHRydWU7CisgICAgICAgIG1fbWFyZ2luQm91bmRzID0gbV9ib3VuZHMu
bWFyZ2luQm91bmRzKHNoYXBlTWFyZ2luKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9tYXJnaW5C
b3VuZHM7Cit9CisKK3ZvaWQgUmVjdGFuZ2xlU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlz
dCYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9
IHNoYXBlTWFyZ2luQm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxv
Z2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgaWYgKHkyIDwgYm91bmRzLnkoKSB8fCB5
MSA+PSBib3VuZHMubWF4WSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB4MSA9IGJv
dW5kcy54KCk7CisgICAgZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOworCisgICAgaWYgKGJvdW5k
cy5yeSgpID4gMCkgeworICAgICAgICBpZiAoeTIgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCkp
IHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0geTIgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7
CisgICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngo
KSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRzLnJ4
KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgpICsg
eGk7CisgICAgICAgIH0gZWxzZSBpZiAoeTEgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkp
IHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0gIHkxIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMu
cnkoKSk7CisgICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3Vu
ZHMucngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91
bmRzLnJ4KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5y
eCgpICsgeGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdt
ZW50KHgxLCB4MikpOworfQorCit2b2lkIFJlY3RhbmdsZVNoYXBlOjpnZXRJbmNsdWRlZEludGVy
dmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBi
b3VuZHMgPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOworICAgIGZsb2F0
IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7CisKKyAgICBpZiAoeTEgPCBib3VuZHMu
eSgpIHx8IHkyID4gYm91bmRzLm1heFkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQg
eDEgPSBib3VuZHMueCgpOworICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKKworICAgIGlm
IChib3VuZHMucnkoKSA+IDApIHsKKyAgICAgICAgYm9vbCB5MUludGVyY2VwdHNDb3JuZXIgPSB5
MSA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKTsKKyAgICAgICAgYm9vbCB5MkludGVyY2VwdHND
b3JuZXIgPSB5MiA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKKyAgICAgICAgZmxvYXQg
eGkgPSAwOworCisgICAgICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgJiYgeTJJbnRlcmNlcHRz
Q29ybmVyKSB7CisgICAgICAgICAgICBpZiAgKHkxIDwgYm91bmRzLmhlaWdodCgpICsgMiAqIGJv
dW5kcy55KCkgLSB5MikgeworICAgICAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMu
eSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2Vw
dCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5y
eSgpKTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMu
cngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHkx
SW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJvdW5kcy55
KCkgLSBib3VuZHMucnkoKTsKKyAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWks
IGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoeTJJbnRlcmNl
cHRzQ29ybmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4WSgp
IC0gYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwg
Ym91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh5MUlu
dGVyY2VwdHNDb3JuZXIgfHwgeTJJbnRlcmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICB4MSA9
IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAtIHhpOworICAgICAgICAgICAgeDIgPSBib3VuZHMu
bWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3Vs
dC5hcHBlbmQoTGluZVNlZ21lbnQoeDEsIHgyKSk7Cit9CisKK2Jvb2wgUmVjdGFuZ2xlU2hhcGU6
OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50
ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91
dFVuaXQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxv
Z2ljYWxJbnRlcnZhbFRvcDsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2lj
YWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1p
bkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsKKworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOworICAgIGlmIChib3VuZHMuaXNFbXB0
eSgpIHx8IG1pbkludGVydmFsV2lkdGggPiBib3VuZHMud2lkdGgoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kcy55KCksIG1pbkludGVy
dmFsVG9wKTsKKyAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0OworCisg
ICAgaWYgKG1heFkgPiBib3VuZHMubWF4WSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBib29sIGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgPSBtaW5ZIDwgYm91bmRzLnkoKSArIGJv
dW5kcy5yeSgpOworICAgIGJvb2wgaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciA9IG1heFkgPiBi
b3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCk7CisKKyAgICBpZiAoIWludGVydmFsT3ZlcmxhcHNN
aW5Db3JuZXIgJiYgIWludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIpIHsKKyAgICAgICAgcmVzdWx0
ID0gbWluWTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZmxvYXQgY2VudGVy
WSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0KCkgLyAyOworICAgIGJvb2wgbWluQ29ybmVy
RGVmaW5lc1ggPSBmYWJzKGNlbnRlclkgLSBtaW5ZKSA+IGZhYnMoY2VudGVyWSAtIG1heFkpOwor
ICAgIGJvb2wgaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyA9IG1pbkludGVydmFsV2lkdGggKyAy
ICogYm91bmRzLnJ4KCkgPD0gYm91bmRzLndpZHRoKCk7CisgICAgRmxvYXRQb2ludCBjb3JuZXJJ
bnRlcmNlcHQgPSBib3VuZHMuY29ybmVySW50ZXJjZXB0Rm9yV2lkdGgobWluSW50ZXJ2YWxXaWR0
aCk7CisKKyAgICBpZiAoaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciAmJiAoIWludGVydmFsT3Zl
cmxhcHNNYXhDb3JuZXIgfHwgbWluQ29ybmVyRGVmaW5lc1gpKSB7CisgICAgICAgIGlmIChpbnRl
cnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8IGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgp
IDwgbWluWSkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChtaW5JbnRlcnZhbEhlaWdodCA8IGJvdW5k
cy5oZWlnaHQoKSAtICgyICogY29ybmVySW50ZXJjZXB0LnkoKSkpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGNlaWxlZExheW91dFVuaXQoYm91bmRzLnkoKSArIGNvcm5lckludGVyY2VwdC55KCkp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
aW50ZXJ2YWxPdmVybGFwc01heENvcm5lciAmJiAoIWludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIg
fHwgIW1pbkNvcm5lckRlZmluZXNYKSkgeworICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGlu
Q29ybmVycyB8fCBtaW5ZIDw9ICBib3VuZHMubWF4WSgpIC0gY29ybmVySW50ZXJjZXB0LnkoKSAt
IG1pbkludGVydmFsSGVpZ2h0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtaW5ZOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWVjZjA1MDRiYjk5M2M5
MTEwMzkwNjM0OTM0NWVlNDI5NDQ2ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFJlY3RhbmdsZVNoYXBlX2gKKyNkZWZpbmUgUmVjdGFuZ2xlU2hhcGVfaAor
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRmxvYXRSb3VuZGVkUmVjdCA6IHB1YmxpYyBGbG9hdFJlY3QgeworcHVibGljOgor
ICAgIEZsb2F0Um91bmRlZFJlY3QoKSB7IH0KKyAgICBGbG9hdFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQorICAgICAgICA6IEZsb2F0
UmVjdChib3VuZHMpCisgICAgICAgICwgbV9yYWRpaShyYWRpaSkKKyAgICB7CisgICAgfQorCisg
ICAgZmxvYXQgcngoKSBjb25zdCB7IHJldHVybiBtX3JhZGlpLndpZHRoKCk7IH0KKyAgICBmbG9h
dCByeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWkuaGVpZ2h0KCk7IH0KKyAgICBGbG9hdFJvdW5k
ZWRSZWN0IG1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0OworICAgIEZsb2F0Um91bmRl
ZFJlY3QgcGFkZGluZ0JvdW5kcyhmbG9hdCBwYWRkaW5nKSBjb25zdDsKKyAgICBGbG9hdFBvaW50
IGNvcm5lckludGVyY2VwdEZvcldpZHRoKGZsb2F0IHdpZHRoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBGbG9hdFNpemUgbV9yYWRpaTsKK307CisKK2NsYXNzIFJlY3RhbmdsZVNoYXBlIDogcHVi
bGljIFNoYXBlIHsKK3B1YmxpYzoKKyAgICBSZWN0YW5nbGVTaGFwZShjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKKyAgICAgICAgOiBTaGFwZSgpCisgICAg
ICAgICwgbV9ib3VuZHMoYm91bmRzLCByYWRpaSkKKyAgICAgICAgLCBtX2hhdmVJbml0aWFsaXpl
ZE1hcmdpbkJvdW5kcyhmYWxzZSkKKyAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdC
b3VuZHMoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFw
ZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2luQm91bmRzKCkpOyB9CisgICAgdmlydHVhbCBM
YXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9i
b3VuZHMuaXNFbXB0eSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxz
KExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50
TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVy
dmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRl
ZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29u
c3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0
IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVNYXJnaW5C
b3VuZHMoKSBjb25zdDsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlUGFkZGluZ0JvdW5kcygp
IGNvbnN0OworCisgICAgRmxvYXRSb3VuZGVkUmVjdCBtX2JvdW5kczsKKyAgICBtdXRhYmxlIEZs
b2F0Um91bmRlZFJlY3QgbV9tYXJnaW5Cb3VuZHM7CisgICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRS
ZWN0IG1fcGFkZGluZ0JvdW5kczsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRN
YXJnaW5Cb3VuZHMgOiAxOworICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZFBhZGRp
bmdCb3VuZHMgOiAxOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
UmVjdGFuZ2xlU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNzkyMGNjOWU0ODgxMzY4OTE3NDg1Y2IwMzM3OGU5ZjQwMDAyZjNiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwor
ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2hhcGUuaCIKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJQ
b2x5Z29uU2hhcGUuaCIKKyNpbmNsdWRlICJSZWN0YW5nbGVTaGFwZS5oIgorI2luY2x1ZGUgIldp
bmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRlUmVjdGFuZ2xlU2hhcGUoY29uc3Qg
RmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCit7CisgICAgQVNTRVJU
KGJvdW5kcy53aWR0aCgpID49IDAgJiYgYm91bmRzLmhlaWdodCgpID49IDAgJiYgcmFkaWkud2lk
dGgoKSA+PSAwICYmIHJhZGlpLmhlaWdodCgpID49IDApOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUmVjdGFuZ2xlU2hhcGUoYm91bmRzLCByYWRpaSkpOworfQorCitzdGF0aWMgUGFzc093blB0
cjxTaGFwZT4gY3JlYXRlU2hhcGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBmbG9h
dCByYWRpdXMpCit7CisgICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFJlY3RhbmdsZVNoYXBlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaXVzLCBjZW50
ZXIueSgpIC0gcmFkaXVzLCByYWRpdXMqMiwgcmFkaXVzKjIpLCBGbG9hdFNpemUocmFkaXVzLCBy
YWRpdXMpKSk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVTaGFwZUVsbGlw
c2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQorewor
ICAgIEFTU0VSVChyYWRpaS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWN0YW5nbGVTaGFwZShGbG9hdFJlY3QoY2VudGVyLngo
KSAtIHJhZGlpLndpZHRoKCksIGNlbnRlci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWkud2lk
dGgoKSoyLCByYWRpaS5oZWlnaHQoKSoyKSwgcmFkaWkpKTsKK30KKworc3RhdGljIFBhc3NPd25Q
dHI8U2hhcGU+IGNyZWF0ZVBvbHlnb25TaGFwZShQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50
PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFBvbHlnb25TaGFwZSh2ZXJ0aWNlcywgZmlsbFJ1bGUpKTsKK30KKworc3RhdGljIGlubGlu
ZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJu
IHJlY3Q7CisgICAgaWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkK
KyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LnkoKSwgbG9naWNhbEJveEhlaWdodCAtIHJl
Y3QubWF4WCgpLCByZWN0LmhlaWdodCgpLCByZWN0LndpZHRoKCkpOworICAgIHJldHVybiByZWN0
LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBwaHlzaWNh
bFBvaW50VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBsb2dpY2FsQm94
SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgaWYg
KGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UG9pbnQocG9pbnQueSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0gcG9pbnQueCgpKTsKKyAg
ICByZXR1cm4gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxv
YXRTaXplIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb25zdCBGbG9hdFNpemUmIHNpemUsIFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3
cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBzaXplLnRyYW5z
cG9zZWRTaXplKCk7Cit9CisKK1Bhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShj
b25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94
U2l6ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRk
aW5nKQoreworICAgIEFTU0VSVChiYXNpY1NoYXBlKTsKKworICAgIGJvb2wgaG9yaXpvbnRhbFdy
aXRpbmdNb2RlID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOworICAgIGZs
b2F0IGJveFdpZHRoID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUud2lk
dGgoKSA6IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpOworICAgIGZsb2F0IGJveEhlaWdodCA9IGhv
cml6b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpIDogbG9naWNhbEJv
eFNpemUud2lkdGgoKTsKKyAgICBPd25QdHI8U2hhcGU+IHNoYXBlOworCisgICAgc3dpdGNoIChi
YXNpY1NoYXBlLT50eXBlKCkpIHsKKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVJl
Y3RhbmdsZVR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdGFu
Z2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSo+KGJhc2ljU2hhcGUp
OworICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxl
bmd0aChyZWN0YW5nbGUtPngoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZv
ckxlbmd0aChyZWN0YW5nbGUtPnkoKSwgYm94SGVpZ2h0KSwKKyAgICAgICAgICAgIGZsb2F0VmFs
dWVGb3JMZW5ndGgocmVjdGFuZ2xlLT53aWR0aCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBm
bG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+aGVpZ2h0KCksIGJveEhlaWdodCkpOworICAg
ICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgpOwor
ICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWSgp
OworICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCisgICAgICAgICAgICByYWRpdXNYTGVu
Z3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNYTGVuZ3Ro
LCBib3hXaWR0aCksCisgICAgICAgICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAw
IDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQpKTsKKyAgICAg
ICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91bmRz
LCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNoYXBl
ID0gY3JlYXRlUmVjdGFuZ2xlU2hhcGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9Mb2dp
Y2FsKGNvcm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVDaXJjbGVUeXBlOiB7CisgICAgICAgIGNv
bnN0IEJhc2ljU2hhcGVDaXJjbGUqIGNpcmNsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hh
cGVDaXJjbGUqPihiYXNpY1NoYXBlKTsKKyAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0VmFs
dWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxvYXQg
Y2VudGVyWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhlaWdo
dCk7CisgICAgICAgIGZsb2F0IHJhZGl1cyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5y
YWRpdXMoKSwgc3RkOjptaW4oYm94SGVpZ2h0LCBib3hXaWR0aCkpOworICAgICAgICBGbG9hdFBv
aW50IGxvZ2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQoY2Vu
dGVyWCwgY2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7CisK
KyAgICAgICAgc2hhcGUgPSBjcmVhdGVTaGFwZUNpcmNsZShsb2dpY2FsQ2VudGVyLCByYWRpdXMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hh
cGVFbGxpcHNlVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBz
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4oYmFzaWNTaGFwZSk7Cisg
ICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRl
clgoKSwgYm94V2lkdGgpOworICAgICAgICBmbG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChlbGxpcHNlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7CisgICAgICAgIGZsb2F0IHJhZGl1
c1ggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1goKSwgYm94V2lkdGgpOwor
ICAgICAgICBmbG9hdCByYWRpdXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRp
dXNZKCksIGJveEhlaWdodCk7CisgICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRlciA9IHBo
eXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgbG9naWNh
bEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKyAgICAgICAgRmxvYXRTaXplIGxvZ2lj
YWxSYWRpaSA9IHBoeXNpY2FsU2l6ZVRvTG9naWNhbChGbG9hdFNpemUocmFkaXVzWCwgcmFkaXVz
WSksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVNoYXBlRWxsaXBzZShs
b2dpY2FsQ2VudGVyLCBsb2dpY2FsUmFkaWkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVQb2x5Z29uVHlwZTogeworICAgICAgICBjb25z
dCBCYXNpY1NoYXBlUG9seWdvbiogcG9seWdvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hh
cGVQb2x5Z29uKj4oYmFzaWNTaGFwZSk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxMZW5ndGg+JiB2
YWx1ZXMgPSBwb2x5Z29uLT52YWx1ZXMoKTsKKyAgICAgICAgc2l6ZV90IHZhbHVlc1NpemUgPSB2
YWx1ZXMuc2l6ZSgpOworICAgICAgICBBU1NFUlQoISh2YWx1ZXNTaXplICUgMikpOworICAgICAg
ICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVj
dG9yPEZsb2F0UG9pbnQ+KHZhbHVlc1NpemUgLyAyKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB2YWx1ZXNTaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
dmVydGV4KAorICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkp
LCBib3hXaWR0aCksCisgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMu
YXQoaSArIDEpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgICAgICgqdmVydGljZXMpW2kgLyAyXSA9
IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwodmVydGV4LCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwg
d3JpdGluZ01vZGUpOworICAgICAgICB9CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVQb2x5Z29u
U2hhcGUodmVydGljZXMucmVsZWFzZSgpLCBwb2x5Z29uLT53aW5kUnVsZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRSZWN0
YW5nbGVUeXBlOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSogcmVj
dGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKj4oYmFz
aWNTaGFwZSk7CisgICAgICAgIGZsb2F0IGxlZnQgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3Rh
bmdsZS0+bGVmdCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZsb2F0IHRvcCA9IGZsb2F0VmFsdWVG
b3JMZW5ndGgocmVjdGFuZ2xlLT50b3AoKSwgYm94SGVpZ2h0KTsKKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcygKKyAgICAgICAgICAgIGxlZnQsCisgICAgICAgICAgICB0b3AsCisgICAgICAgICAg
ICBib3hXaWR0aCAtIGxlZnQgLSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+cmlnaHQo
KSwgYm94V2lkdGgpLAorICAgICAgICAgICAgYm94SGVpZ2h0IC0gdG9wIC0gZmxvYXRWYWx1ZUZv
ckxlbmd0aChyZWN0YW5nbGUtPmJvdHRvbSgpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgTGVuZ3Ro
IHJhZGl1c1hMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKKyAgICAgICAgTGVu
Z3RoIHJhZGl1c1lMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKKyAgICAgICAg
RmxvYXRTaXplIGNvcm5lclJhZGlpKAorICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1VuZGVm
aW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lkdGgp
LAorICAgICAgICAgICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFs
dWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7CisgICAgICAgIEZsb2F0UmVj
dCBsb2dpY2FsQm91bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNhbEJv
eFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVJl
Y3RhbmdsZVNoYXBlKGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJS
YWRpaSwgd3JpdGluZ01vZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc2hhcGUtPm1f
d3JpdGluZ01vZGUgPSB3cml0aW5nTW9kZTsKKyAgICBzaGFwZS0+bV9tYXJnaW4gPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKG1hcmdpbiwgMCk7CisgICAgc2hhcGUtPm1fcGFkZGluZyA9IGZsb2F0VmFs
dWVGb3JMZW5ndGgocGFkZGluZywgMCk7CisKKyAgICByZXR1cm4gc2hhcGUucmVsZWFzZSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ5ZWNmZDcyMGJkMGRkNTM4MDQxMzE4Yzk4MjViZjMzNzEx
ZTU4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGUuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZV9oCisjZGVmaW5l
IFNoYXBlX2gKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgorI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IExpbmVTZWdtZW50IHsKKyAgICBMaW5lU2VnbWVudChmbG9hdCBsb2dpY2FsTGVmdCwgZmxv
YXQgbG9naWNhbFJpZ2h0KQorICAgICAgICA6IGxvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQorICAg
ICAgICAsIGxvZ2ljYWxSaWdodChsb2dpY2FsUmlnaHQpCisgICAgeworICAgIH0KKworICAgIExh
eW91dFVuaXQgbG9naWNhbExlZnQ7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQ7Cit9Owor
Cit0eXBlZGVmIFZlY3RvcjxMaW5lU2VnbWVudD4gU2VnbWVudExpc3Q7CisKKworLy8gQSByZXBy
ZXNlbnRhdGlvbiBvZiBhIEJhc2ljU2hhcGUgdGhhdCBlbmFibGVzIGxheW91dCBjb2RlIHRvIGRl
dGVybWluZSBob3cgdG8gYnJlYWsgYSBsaW5lIHVwIGludG8gc2VnbWVudHMKKy8vIHRoYXQgd2ls
bCBmaXQgd2l0aGluIG9yIGFyb3VuZCBhIHNoYXBlLiBUaGUgbGluZSBpcyBkZWZpbmVkIGJ5IGEg
cGFpciBvZiBsb2dpY2FsIFkgY29vcmRpbmF0ZXMgYW5kIHRoZQorLy8gY29tcHV0ZWQgc2VnbWVu
dHMgYXJlIHJldHVybmVkIGFzIHBhaXJzIG9mIGxvZ2ljYWwgWCBjb29yZGluYXRlcy4gVGhlIEJh
c2ljU2hhcGUgaXRzZWxmIGlzIGRlZmluZWQgaW4KKy8vIHBoeXNpY2FsIGNvb3JkaW5hdGVzLgor
CitjbGFzcyBTaGFwZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNy
ZWF0ZVNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94
U2l6ZSwgV3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKTsKKworICAg
IHZpcnR1YWwgflNoYXBlKCkgeyB9CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJn
aW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0
IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJ
bnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZElu
dGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2VnbWVudExpc3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJ
bnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0
IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkg
Y29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgZmxvYXQgc2hhcGVNYXJnaW4oKSBjb25zdCB7
IHJldHVybiBtX21hcmdpbjsgfQorICAgIGZsb2F0IHNoYXBlUGFkZGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fcGFkZGluZzsgfQorCitwcml2YXRlOgorICAgIFdyaXRpbmdNb2RlIG1fd3JpdGluZ01v
ZGU7CisgICAgZmxvYXQgbV9tYXJnaW47CisgICAgZmxvYXQgbV9wYWRkaW5nOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMTU1ODMyMWNj
ZjhmZTBjMjgwMjdhNDVmYzdiMjM2YTU3NTdmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAKQEAgLTAsMCArMSw4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK
KyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2hhcGVJbmZvLmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyUmVn
aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7Cit0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZhbHVl
KiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoU2hhcGU6OippbnRl
cnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4K
K2NvbnN0IFNoYXBlKiBTaGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVydmFs
R2V0dGVyPjo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0Cit7CisgICAgaWYgKFNoYXBlKiBzaGFwZSA9
IG1fc2hhcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBzaGFwZTsKKworICAgIFNoYXBlVmFsdWUq
IHNoYXBlVmFsdWUgPSAobV9yZW5kZXJlci0+c3R5bGUoKS0+KnNoYXBlR2V0dGVyKSgpOworICAg
IEJhc2ljU2hhcGUqIHNoYXBlID0gKHNoYXBlVmFsdWUgJiYgc2hhcGVWYWx1ZS0+dHlwZSgpID09
IFNoYXBlVmFsdWU6OlNoYXBlKSA/IHNoYXBlVmFsdWUtPnNoYXBlKCkgOiAwOworCisgICAgQVNT
RVJUKHNoYXBlKTsKKworICAgIG1fc2hhcGUgPSBTaGFwZTo6Y3JlYXRlU2hhcGUoc2hhcGUsIExh
eW91dFNpemUobV9zaGFwZUxvZ2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWlnaHQpLCBtX3Jl
bmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFw
ZU1hcmdpbigpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7CisgICAgQVNT
RVJUKG1fc2hhcGUpOworICAgIHJldHVybiBtX3NoYXBlLmdldCgpOworfQorCit0ZW1wbGF0ZTxj
bGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlciko
KSBjb25zdCwgdm9pZCAoU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0
VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KK2Jvb2wgU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNo
YXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0
VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCit7CisgICAgQVNTRVJUKGxpbmVI
ZWlnaHQgPj0gMCk7CisgICAgbV9zaGFwZUxpbmVUb3AgPSBsaW5lVG9wIC0gbG9naWNhbFRvcE9m
ZnNldCgpOworICAgIG1fbGluZUhlaWdodCA9IGxpbmVIZWlnaHQ7CisgICAgbV9zZWdtZW50cy5j
bGVhcigpOworCisgICAgaWYgKGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkpCisgICAgICAgIChj
b21wdXRlZFNoYXBlKCktPippbnRlcnZhbEdldHRlcikobV9zaGFwZUxpbmVUb3AsIHN0ZDo6bWlu
KG1fbGluZUhlaWdodCwgc2hhcGVMb2dpY2FsQm90dG9tKCkgLSBsaW5lVG9wKSwgbV9zZWdtZW50
cyk7CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gdGhpcy0+bG9naWNhbExl
ZnRPZmZzZXQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2VnbWVudHMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsTGVmdCArPSBsb2dpY2FsTGVm
dE9mZnNldDsKKyAgICAgICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsUmlnaHQgKz0gbG9naWNhbExl
ZnRPZmZzZXQ7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOworfQorCit0
ZW1wbGF0ZSBjbGFzcyBTaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2
ZWRTaGFwZUluc2lkZSwgJlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz47Cit0ZW1wbGF0ZSBj
bGFzcyBTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlNo
YXBlOjpnZXRFeGNsdWRlZEludGVydmFscz47Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlMTNkMzJhNWQ2MDk1ZjVk
MmYwOThlOGZiMDkwYTYxMmM1NGUzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworKiAgICBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworKiAgICBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKKyogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GCisqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5k
ZWYgU2hhcGVJbmZvX2gKKyNkZWZpbmUgU2hhcGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgor
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlICJT
aGFwZVZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBj
bGFzcyBJbmZvVHlwZT4KK2NsYXNzIE1hcHBlZEluZm8geworcHVibGljOgorICAgIHN0YXRpYyBJ
bmZvVHlwZSogZW5zdXJlSW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpCisgICAgeworICAgICAgICBJ
bmZvTWFwJiBpbmZvTWFwID0gTWFwcGVkSW5mbzxLZXlUeXBlLCBJbmZvVHlwZT46OmluZm9NYXAo
KTsKKyAgICAgICAgaWYgKEluZm9UeXBlKiBpbmZvID0gaW5mb01hcC5nZXQoa2V5KSkKKyAgICAg
ICAgICAgIHJldHVybiBpbmZvOworICAgICAgICB0eXBlbmFtZSBJbmZvTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gaW5mb01hcC5hZGQoa2V5LCBJbmZvVHlwZTo6Y3JlYXRlSW5mbyhrZXkpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgfQorICAgIHN0
YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IGluZm9NYXAoKS5yZW1v
dmUoa2V5KTsgfQorICAgIHN0YXRpYyBJbmZvVHlwZSogaW5mbyhjb25zdCBLZXlUeXBlKiBrZXkp
IHsgcmV0dXJuIGluZm9NYXAoKS5nZXQoa2V5KTsgfQorcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhh
c2hNYXA8Y29uc3QgS2V5VHlwZSosIE93blB0cjxJbmZvVHlwZT4gPiBJbmZvTWFwOworICAgIHN0
YXRpYyBJbmZvTWFwJiBpbmZvTWFwKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSW5mb01hcCwgc3RhdGljSW5mb01hcCwgKCkpOworICAgICAgICByZXR1cm4gc3RhdGljSW5m
b01hcDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZhbHVl
KiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoU2hhcGU6OippbnRl
cnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4K
K2NsYXNzIFNoYXBlSW5mbyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+U2hhcGVJbmZvKCkgeyB9CisKKyAgICB2b2lkIHNldFNoYXBlU2l6ZShM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQorICAgIHsK
KyAgICAgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRf
Qk9YKSB7CisgICAgICAgICAgICBsb2dpY2FsV2lkdGggLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxXaWR0aCgpOworICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBtX3Jl
bmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1fc2hhcGVMb2dpY2FsV2lkdGggPT0gbG9naWNhbFdpZHRoICYmIG1fc2hhcGVM
b2dpY2FsSGVpZ2h0ID09IGxvZ2ljYWxIZWlnaHQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGRpcnR5U2hhcGVTaXplKCk7CisgICAgICAgIG1fc2hhcGVMb2dpY2FsV2lkdGggPSBsb2dp
Y2FsV2lkdGg7CisgICAgICAgIG1fc2hhcGVMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodDsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCk7CisgICAgdm9pZCBjbGVhclNlZ21l
bnRzKCkgeyBtX3NlZ21lbnRzLmNsZWFyKCk7IH0KKworICAgIExheW91dFVuaXQgc2hhcGVMb2dp
Y2FsVG9wKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgp
LnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2Fs
Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgp
Lm1heFkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dp
Y2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3go
KS54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2lj
YWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3go
KS5tYXhYKCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxv
Z2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdC
b3goKS53aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0K
KworICAgIExheW91dFVuaXQgbG9naWNhbExpbmVUb3AoKSBjb25zdCB7IHJldHVybiBtX3NoYXBl
TGluZVRvcCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExp
bmVCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX3NoYXBlTGluZVRvcCArIG1fbGluZUhlaWdodCAr
IGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorCisgICAgTGF5b3V0VW5pdCBzaGFwZUNvbnRhaW5pbmdC
bG9ja0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXpp
bmcoKSA9PSBDT05URU5UX0JPWCkgPyAobV9zaGFwZUxvZ2ljYWxIZWlnaHQgKyBtX3JlbmRlcmVy
LT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKSA6IG1fc2hhcGVMb2dpY2FsSGVpZ2h0
OyB9CisKKyAgICBib29sIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
bG9naWNhbExpbmVUb3AoKSA8IHNoYXBlTG9naWNhbEJvdHRvbSgpICYmIHNoYXBlTG9naWNhbFRv
cCgpIDw9IGxvZ2ljYWxMaW5lQm90dG9tKCk7IH0KKyAgICBib29sIGxpbmVXaXRoaW5TaGFwZUJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgJiYgKGxvZ2lj
YWxMaW5lQm90dG9tKCkgPD0gc2hhcGVMb2dpY2FsQm90dG9tKCkpOyB9CisKKyAgICB2b2lkIGRp
cnR5U2hhcGVTaXplKCkgeyBtX3NoYXBlLmNsZWFyKCk7IH0KKyAgICBib29sIHNoYXBlU2l6ZURp
cnR5KCkgeyByZXR1cm4gIW1fc2hhcGUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZW5kZXJUeXBlKiBv
d25lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KKworcHJvdGVjdGVkOgorICAgIFNo
YXBlSW5mbyhjb25zdCBSZW5kZXJUeXBlKiByZW5kZXJlcik6IG1fcmVuZGVyZXIocmVuZGVyZXIp
IHsgfQorCisgICAgY29uc3QgU2hhcGUqIGNvbXB1dGVkU2hhcGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0g
MDsKKworICAgIExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gbV9yZW5kZXJl
ci0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpIDogTGF5b3V0VW5pdCgpOyB9OworICAgIExheW91
dFVuaXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiAobV9yZW5kZXJlci0+c3R5
bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggJiYgIW1fcmVuZGVyZXItPmlzUmVuZGVy
UmVnaW9uKCkpID8gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1N0YXJ0KCkgOiBMYXlvdXRV
bml0KCk7IH0KKworICAgIExheW91dFVuaXQgbV9zaGFwZUxpbmVUb3A7CisgICAgTGF5b3V0VW5p
dCBtX2xpbmVIZWlnaHQ7CisgICAgU2VnbWVudExpc3QgbV9zZWdtZW50czsKKworcHJpdmF0ZToK
KyAgICBtdXRhYmxlIE93blB0cjxTaGFwZT4gbV9zaGFwZTsKKworICAgIExheW91dFVuaXQgbV9z
aGFwZUxvZ2ljYWxXaWR0aDsKKyAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2FsSGVpZ2h0Owor
ICAgIGNvbnN0IFJlbmRlclR5cGUqIG1fcmVuZGVyZXI7Cit9OworfQorI2VuZGlmCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJ
bmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZv
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMTI5NWQwM2VkYjI3M2ZhZTdiYWJlY2QxYzRiYWUwOWVhYWNlMGRk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZUluc2lkZUluZm8uY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUluZm8u
aCIKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xp
bmVTZWdtZW50UmFuZ2U6OkxpbmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIHN0
YXJ0LCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kKQorICAgIDogc3RhcnQoc3RhcnQucm9vdCgp
LCBzdGFydC5vYmplY3QoKSwgc3RhcnQub2Zmc2V0KCkpCisgICAgLCBlbmQoZW5kLnJvb3QoKSwg
ZW5kLm9iamVjdCgpLCBlbmQub2Zmc2V0KCkpCisgICAgeworICAgIH0KKworYm9vbCBTaGFwZUlu
c2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCit7Cisg
ICAgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5yZXNvbHZlZFNo
YXBlSW5zaWRlKCk7CisgICAgaWYgKCFzaGFwZVZhbHVlIHx8IHNoYXBlVmFsdWUtPnR5cGUoKSAh
PSBTaGFwZVZhbHVlOjpTaGFwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQmFzaWNT
aGFwZSogc2hhcGUgPSBzaGFwZVZhbHVlLT5zaGFwZSgpOworICAgIHJldHVybiBzaGFwZSAmJiBz
aGFwZS0+dHlwZSgpICE9IEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZVR5cGU7
Cit9CisKK2Jvb2wgU2hhcGVJbnNpZGVJbmZvOjphZGp1c3RMb2dpY2FsTGluZVRvcChmbG9hdCBt
aW5TZWdtZW50V2lkdGgpCit7CisgICAgY29uc3QgU2hhcGUqIHNoYXBlID0gY29tcHV0ZWRTaGFw
ZSgpOworICAgIGlmICghc2hhcGUgfHwgbV9saW5lSGVpZ2h0IDw9IDAgfHwgbG9naWNhbExpbmVU
b3AoKSA+IHNoYXBlTG9naWNhbEJvdHRvbSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBMYXlvdXRVbml0IG5ld0xpbmVUb3A7CisgICAgaWYgKHNoYXBlLT5maXJzdEluY2x1ZGVkSW50
ZXJ2YWxMb2dpY2FsVG9wKG1fc2hhcGVMaW5lVG9wLCBMYXlvdXRTaXplKG1pblNlZ21lbnRXaWR0
aCwgbV9saW5lSGVpZ2h0KSwgbmV3TGluZVRvcCkpIHsKKyAgICAgICAgaWYgKG5ld0xpbmVUb3Ag
PiBtX3NoYXBlTGluZVRvcCkgeworICAgICAgICAgICAgbV9zaGFwZUxpbmVUb3AgPSBuZXdMaW5l
VG9wOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzAwNmIzNjQ1NGI5ZGFi
MWMyMDI2NTc3MDVlZDQ5NzE4OWJjN2U3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmgKQEAgLTAsMCArMSwxMTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
CisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZUluc2lkZUluZm9faAor
I2RlZmluZSBTaGFwZUluc2lkZUluZm9faAorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNp
bmNsdWRlICJTaGFwZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmxpbmVJ
dGVyYXRvcjsKK2NsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyT2JqZWN0OworCitzdHJ1
Y3QgTGluZVNlZ21lbnRJdGVyYXRvciB7CisgICAgUmVuZGVyT2JqZWN0KiByb290OworICAgIFJl
bmRlck9iamVjdCogb2JqZWN0OworICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBMaW5lU2VnbWVu
dEl0ZXJhdG9yKFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVuc2ln
bmVkIG9mZnNldCkKKyAgICAgICAgOiByb290KHJvb3QpCisgICAgICAgICwgb2JqZWN0KG9iamVj
dCkKKyAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
TGluZVNlZ21lbnRSYW5nZSB7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvciBzdGFydDsKKyAgICBM
aW5lU2VnbWVudEl0ZXJhdG9yIGVuZDsKKyAgICBMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGlu
ZUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Cit9OworCit0eXBl
ZGVmIFZlY3RvcjxMaW5lU2VnbWVudFJhbmdlPiBTZWdtZW50UmFuZ2VMaXN0OworCitjbGFzcyBT
aGFwZUluc2lkZUluZm8gOiBwdWJsaWMgU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5
bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTaGFwZUluc2lkZUluZm8+IGNyZWF0ZUlu
Zm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgU2hh
cGVJbnNpZGVJbmZvKHJlbmRlcmVyKSk7IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZv
cihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpOworCisgICAgdmlydHVhbCBib29sIGNvbXB1
dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWln
aHQpIE9WRVJSSURFCisgICAgeworICAgICAgICBtX3NlZ21lbnRSYW5nZXMuY2xlYXIoKTsKKyAg
ICAgICAgcmV0dXJuIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZl
ZFNoYXBlSW5zaWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21l
bnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKKyAgICB9CisKKyAgICBib29sIGhhc1Nl
Z21lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsaW5lT3ZlcmxhcHNTaGFwZUJv
dW5kcygpICYmIG1fc2VnbWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBjb25zdCBTZWdtZW50TGlz
dCYgc2VnbWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1NlZ21lbnRzKCkp
OworICAgICAgICByZXR1cm4gbV9zZWdtZW50czsKKyAgICB9CisgICAgU2VnbWVudFJhbmdlTGlz
dCYgc2VnbWVudFJhbmdlcygpIHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQorICAgIGNvbnN0
IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3NlZ21l
bnRSYW5nZXM7IH0KKyAgICBjb25zdCBMaW5lU2VnbWVudCogY3VycmVudFNlZ21lbnQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNTZWdtZW50cygpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIEFTU0VSVChtX3NlZ21lbnRSYW5nZXMuc2l6ZSgpIDwgbV9zZWdtZW50cy5z
aXplKCkpOworICAgICAgICByZXR1cm4gJm1fc2VnbWVudHNbbV9zZWdtZW50UmFuZ2VzLnNpemUo
KV07CisgICAgfQorICAgIGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2VnbWVu
dFdpZHRoKTsKKworICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCB2YWx1ZSkgeyBtX25lZWRz
TGF5b3V0ID0gdmFsdWU7IH0KKyAgICBib29sIG5lZWRzTGF5b3V0KCkgeyByZXR1cm4gbV9uZWVk
c0xheW91dDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVk
U2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21wdXRl
ZFNoYXBlKCktPnNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpOyB9CisKK3ByaXZhdGU6
CisgICAgU2hhcGVJbnNpZGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKKyAgICA6
IFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRl
LCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiAocmVuZGVyZXIpCisgICAgLCBtX25lZWRz
TGF5b3V0KGZhbHNlKQorICAgIHsgfQorCisgICAgU2VnbWVudFJhbmdlTGlzdCBtX3NlZ21lbnRS
YW5nZXM7CisgICAgYm9vbCBtX25lZWRzTGF5b3V0OjE7Cit9OworCit9CisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVy
dmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjU1ODAzOGIyNDdjM2M4NzU3MmU1ODYwZjA4YzgxOTJiMjFiYTQ1MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJ
bnRlcnZhbC5jcHAKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSW50ZXJ2YWxYMUNvbXBhcmF0b3Ig
eworICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgU2hhcGVJbnRlcnZhbCYgaTEsIGNvbnN0IFNo
YXBlSW50ZXJ2YWwmIGkyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkxLngxIDwgaTIu
eDE7CisgICAgfQorfTsKKworYm9vbCBTaGFwZUludGVydmFsOjppbnRlcnNlY3QoY29uc3QgU2hh
cGVJbnRlcnZhbCYgaSwgU2hhcGVJbnRlcnZhbCYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHgyIDwg
aS54MSB8fCB4MSA+IGkueDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBydi54MSA9IHN0
ZDo6bWF4KHgxLCBpLngxKTsKKyAgICBydi54MiA9IHN0ZDo6bWluKHgyLCBpLngyKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBzb3J0U2hhcGVJbnRlcnZhbHMoVmVjdG9yPFNoYXBlSW50
ZXJ2YWw+JiB2KQoreworICAgIHN0ZDo6c29ydCh2LmJlZ2luKCksIHYuZW5kKCksIEludGVydmFs
WDFDb21wYXJhdG9yKCkpOworfQorCit2b2lkIG1lcmdlU2hhcGVJbnRlcnZhbHMoY29uc3QgVmVj
dG9yPFNoYXBlSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2Miwg
VmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBydikKK3sKKyAgICBpZiAoIXYxLnNpemUoKSkKKyAgICAg
ICAgcnYuYXBwZW5kUmFuZ2UodjIuYmVnaW4oKSwgdjIuZW5kKCkpOworICAgIGVsc2UgaWYgKCF2
Mi5zaXplKCkpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IHYodjEuc2l6ZSgpICsg
djIuc2l6ZSgpKTsKKyAgICAgICAgU2hhcGVJbnRlcnZhbCogaW50ZXJ2YWwgPSAwOworCisgICAg
ICAgIHN0ZDo6bWVyZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCksIHYyLmJlZ2luKCksIHYyLmVuZCgp
LCB2LmJlZ2luKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOworCisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFpbnRlcnZh
bCkKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2W2ldOworICAgICAgICAgICAgZWxzZSBp
ZiAodltpXS54MSA+PSBpbnRlcnZhbC0+eDEgJiYgdltpXS54MSA8PSBpbnRlcnZhbC0+eDIpIC8v
IEZJWE1FOiAxc3QgPD0gdGVzdCBub3QgbmVlZGVkPworICAgICAgICAgICAgICAgIGludGVydmFs
LT54MiA9IHN0ZDo6bWF4KGludGVydmFsLT54MiwgdltpXS54Mik7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKKyAgICAgICAgICAgICAg
ICBpbnRlcnZhbCA9ICZ2W2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGludGVydmFsKQorICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7CisgICAgfQor
fQorCit2b2lkIGludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVy
dmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYgcnYpCit7CisgICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKKyAgICBzaXpl
X3QgdjJTaXplID0gdjIuc2l6ZSgpOworCisgICAgaWYgKCF2MVNpemUgfHwgIXYyU2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU2hhcGVJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBib29sIG92
ZXJsYXAgPSBmYWxzZTsKKyAgICBzaXplX3QgaTEgPSAwOworICAgIHNpemVfdCBpMiA9IDA7CisK
KyAgICB3aGlsZSAoaTEgPCB2MVNpemUgJiYgaTIgPCB2MlNpemUpIHsKKyAgICAgICAgU2hhcGVJ
bnRlcnZhbCB2MTI7CisgICAgICAgIGlmICh2MVtpMV0uaW50ZXJzZWN0KHYyW2kyXSwgdjEyKSkg
eworICAgICAgICAgICAgaWYgKCFvdmVybGFwIHx8ICF2MTIuaW50ZXJzZWN0KGludGVydmFsLCBp
bnRlcnZhbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgICAgICAg
ICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9IHYx
MjsKKyAgICAgICAgICAgICAgICBvdmVybGFwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh2MVtpMV0ueDIgPCB2MltpMl0ueDIpCisgICAgICAgICAgICAgICAgaTErKzsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpMisrOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKGlu
dGVydmFsKTsKKyAgICAgICAgICAgIG92ZXJsYXAgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2
MVtpMV0ueDEgPCB2MltpMl0ueDEpCisgICAgICAgICAgICAgICAgaTErKzsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpMisrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG92ZXJsYXApCisgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Cit9CisKK3ZvaWQgc3VidHJh
Y3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYxLCBjb25zdCBW
ZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYyLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJ2KQorewor
ICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNp
emUoKTsKKworICAgIGlmICghdjFTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXYy
U2l6ZSkKKyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworICAg
IGVsc2UgeworICAgICAgICBzaXplX3QgaTEgPSAwLCBpMiA9IDA7CisgICAgICAgIHJ2LmFwcGVu
ZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKworICAgICAgICB3aGlsZSAoaTEgPCBydi5z
aXplKCkgJiYgaTIgPCB2MlNpemUpIHsKKyAgICAgICAgICAgIFNoYXBlSW50ZXJ2YWwmIGludGVy
dmFsMSA9IHJ2W2kxXTsKKyAgICAgICAgICAgIGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGludGVydmFs
MiA9IHYyW2kyXTsKKworICAgICAgICAgICAgaWYgKGludGVydmFsMi54MSA8PSBpbnRlcnZhbDEu
eDEgJiYgaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAgICBydi5y
ZW1vdmUoaTEpOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwx
LngxKQorICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpbnRl
cnZhbDIueDEgPiBpbnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgaTEgKz0gMTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGludGVydmFsMS54MSAmJiBpbnRlcnZhbDIu
eDIgPCBpbnRlcnZhbDEueDIpIHsKKyAgICAgICAgICAgICAgICBydi5pbnNlcnQoaTEsIFNoYXBl
SW50ZXJ2YWwoaW50ZXJ2YWwxLngxLCBpbnRlcnZhbDIueDEpKTsKKyAgICAgICAgICAgICAgICBp
bnRlcnZhbDEueDEgPSBpbnRlcnZhbDIueDI7CisgICAgICAgICAgICAgICAgaTIgKz0gMTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSkgeworICAg
ICAgICAgICAgICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54MjsKKyAgICAgICAgICAgICAg
ICBpMiArPSAxOworICAgICAgICAgICAgfSBlbHNlICB7IC8vIChpbnRlcnZhbDIueDIgPj0gaW50
ZXJ2YWwxLngyKQorICAgICAgICAgICAgICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54MTsK
KyAgICAgICAgICAgICAgICBpMSArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZjE0ZDhhNWE3MjMyZDky
ZWRhM2RmZDkzNzc4YTkyY2Q2OTU0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaApAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTaGFwZUludGVydmFsX2gKKyNkZWZpbmUgU2hhcGVJbnRlcnZhbF9oCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNo
YXBlSW50ZXJ2YWwgeworcHVibGljOgorICAgIGZsb2F0IHgxOworICAgIGZsb2F0IHgyOworCisg
ICAgU2hhcGVJbnRlcnZhbChmbG9hdCB4MSA9IDAsIGZsb2F0IHgyID0gMCkKKyAgICAgICAgOiB4
MSh4MSkKKyAgICAgICAgLCB4Mih4MikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpbnRlcnNl
Y3QoY29uc3QgU2hhcGVJbnRlcnZhbCYsIFNoYXBlSW50ZXJ2YWwmKSBjb25zdDsKK307CisKK3Zv
aWQgc29ydFNoYXBlSW50ZXJ2YWxzKFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBtZXJn
ZVNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIGNvbnN0IFZlY3Rv
cjxTaGFwZUludGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBpbnRlcnNl
Y3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBWZWN0
b3I8U2hhcGVJbnRlcnZhbD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgc3VidHJh
Y3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBWZWN0
b3I8U2hhcGVJbnRlcnZhbD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2hhcGVJbnRlcnZhbF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMTkyZjY1MDVkODIxMjgzOTI4MmZhZDkzZTZlMjYzYjBkYWQyMWY0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZv
LmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUg
IlNoYXBlT3V0c2lkZUluZm8uaCIKKworI2luY2x1ZGUgIlJlbmRlckJveC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7Citib29sIFNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBS
ZW5kZXJCb3gqIGJveCkKK3sKKyAgICBTaGFwZVZhbHVlKiB2YWx1ZSA9IGJveC0+c3R5bGUoKS0+
c2hhcGVPdXRzaWRlKCk7CisgICAgcmV0dXJuIGJveC0+aXNGbG9hdGluZ1dpdGhTaGFwZU91dHNp
ZGUoKSAmJiB2YWx1ZS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlNoYXBlICYmIHZhbHVlLT5zaGFw
ZSgpOworfQorCitib29sIFNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUo
TGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCit7CisgICAgaWYgKHNo
YXBlU2l6ZURpcnR5KCkgfHwgbV9saW5lVG9wICE9IGxpbmVUb3AgfHwgbV9saW5lSGVpZ2h0ICE9
IGxpbmVIZWlnaHQpIHsKKyAgICAgICAgaWYgKFNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJT
dHlsZTo6c2hhcGVPdXRzaWRlLCAmU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0
ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KSkgeworICAgICAgICAgICAgbV9s
ZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbMF0ubG9naWNhbExl
ZnQgLSBzaGFwZUxvZ2ljYWxMZWZ0KCk7CisgICAgICAgICAgICBtX3JpZ2h0U2VnbWVudFNoYXBl
Qm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbbV9zZWdtZW50cy5zaXplKCktMV0ubG9naWNh
bFJpZ2h0IC0gc2hhcGVMb2dpY2FsUmlnaHQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOworICAgICAgICAgICAg
bV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOworICAgICAgICB9CisgICAg
ICAgIG1fbGluZVRvcCA9IGxpbmVUb3A7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2VnbWVudHMu
c2l6ZSgpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JlNTkwNTZjYzFlZDdkMDI0
NjJlZjRhNDcxNmNkMzk3YmJlYTNkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVPdXRzaWRlSW5mb19o
CisjZGVmaW5lIFNoYXBlT3V0c2lkZUluZm9faAorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisK
KyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAiU2hhcGVJbmZvLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQm94OworCitjbGFzcyBTaGFwZU91dHNpZGVJ
bmZvIDogcHVibGljIFNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRz
aWRlLCAmU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPiwgcHVibGljIE1hcHBlZEluZm88UmVu
ZGVyQm94LCBTaGFwZU91dHNpZGVJbmZvPiB7CitwdWJsaWM6CisgICAgTGF5b3V0U2l6ZSBzaGFw
ZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKHNoYXBlTG9naWNhbExl
ZnQoKSwgc2hhcGVMb2dpY2FsVG9wKCkpOyB9CisKKyAgICBMYXlvdXRVbml0IGxlZnRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0U2VnbWVudFNoYXBl
Qm91bmRpbmdCb3hEZWx0YTsgfQorICAgIExheW91dFVuaXQgcmlnaHRTZWdtZW50U2hhcGVCb3Vu
ZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5n
Qm94RGVsdGE7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklERTsKKworICAg
IHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlT3V0c2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3QgUmVu
ZGVyQm94KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNoYXBlT3V0c2lkZUluZm8o
cmVuZGVyZXIpKTsgfQorICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJC
b3gqKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBl
TG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFw
ZSgpLT5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpOyB9CisKK3ByaXZhdGU6CisgICAg
U2hhcGVPdXRzaWRlSW5mbyhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSA6IFNoYXBlSW5mbzxS
ZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmU2hhcGU6OmdldEV4Y2x1ZGVk
SW50ZXJ2YWxzPihyZW5kZXJlcikgeyB9CisKKyAgICBMYXlvdXRVbml0IG1fbGVmdFNlZ21lbnRT
aGFwZUJvdW5kaW5nQm94RGVsdGE7CisgICAgTGF5b3V0VW5pdCBtX3JpZ2h0U2VnbWVudFNoYXBl
Qm91bmRpbmdCb3hEZWx0YTsKKyAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKK307CisKK30KKyNl
bmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
RXhjbHVzaW9uU2hhcGVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4
Y2x1c2lvblNoYXBlVmFsdWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5ZDM5
NTczMjM4MmYzYjI3NmFjNTY3NmE2MmRiMTZmMDdmZWNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
RXhjbHVzaW9uU2hhcGVWYWx1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAq
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
Ci0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlVmFsdWVfaAot
I2RlZmluZSBFeGNsdXNpb25TaGFwZVZhbHVlX2gKLQotI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgi
Ci0jaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRXhjbHVzaW9uU2hhcGVWYWx1ZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHsKLXB1YmxpYzoKLSAgICBlbnVtIEV4
Y2x1c2lvblNoYXBlVmFsdWVUeXBlIHsKLSAgICAgICAgLy8gVGhlIEF1dG8gdmFsdWUgaXMgZGVm
aW5lZCBieSBhIG51bGwgRXhjbHVzaW9uU2hhcGVWYWx1ZSoKLSAgICAgICAgU2hhcGUsCi0gICAg
ICAgIE91dHNpZGUsCi0gICAgICAgIEltYWdlCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGNyZWF0ZVNoYXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNp
Y1NoYXBlPiBzaGFwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhjbHVz
aW9uU2hhcGVWYWx1ZShzaGFwZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4
Y2x1c2lvblNoYXBlVmFsdWU+IGNyZWF0ZU91dHNpZGVWYWx1ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEV4Y2x1c2lvblNoYXBlVmFsdWUoT3V0c2lkZSkpOwotICAgIH0K
LQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGNyZWF0ZUltYWdl
VmFsdWUoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRXhjbHVzaW9uU2hhcGVWYWx1ZShpbWFnZSkpOwotICAgIH0KLQotICAg
IEV4Y2x1c2lvblNoYXBlVmFsdWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LSAgICBCYXNpY1NoYXBlKiBzaGFwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7IH0K
LSAgICBTdHlsZUltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCi0gICAgewot
ICAgICAgICBpZiAobV9pbWFnZSAhPSBpbWFnZSkKLSAgICAgICAgICAgIG1faW1hZ2UgPSBpbWFn
ZTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUm
IG90aGVyKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBl
KQotICAgICAgICA6IG1fdHlwZShTaGFwZSkKLSAgICAgICAgLCBtX3NoYXBlKHNoYXBlKQotICAg
IHsKLSAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZShFeGNsdXNpb25TaGFwZVZhbHVlVHlw
ZSB0eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0gICAgRXhjbHVz
aW9uU2hhcGVWYWx1ZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgICAgICA6IG1f
dHlwZShJbWFnZSkKLSAgICAgICAgLCBtX2ltYWdlKGltYWdlKQotICAgIHsKLSAgICB9Ci0gICAg
RXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgbV90eXBlOwotICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBt
X3NoYXBlOwotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBtX2ltYWdlOwotfTsKLQotfQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmlu
ZGV4IGI4YjIyMGFiNmMxNDQxOWQyMDk5MGJlMjA4YWUzNjg1Zjc1YzdiOTAuLmE0MDM3YzI1OTIx
MDU5MGRjNDQwYTI4YmRlZGM4YzQwOGZiYjBmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtMTczMyw5ICsxNzMzLDkgQEAgdm9pZCBS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQoTGVuZ3RoQm94IG91dHNldCkKICAgICBz
dXJyb3VuZC5hY2Nlc3MoKS0+Ym9yZGVyLm1faW1hZ2Uuc2V0T3V0c2V0KG91dHNldCk7CiB9CiAK
LUV4Y2x1c2lvblNoYXBlVmFsdWUqIFJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGUoKQor
U2hhcGVWYWx1ZSogUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZSgpCiB7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4sIHNPdXRzaWRlVmFs
dWUsIChFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSkpOworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFNoYXBlVmFsdWU+LCBzT3V0c2lkZVZhbHVlLCAoU2hh
cGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpKTsKICAgICByZXR1cm4gc091dHNpZGVWYWx1
ZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAppbmRleCA2OTIyMGYzMDdhNzY1YmRkNTAyZmQ5ODFiYjE3NzhhZjJkNzYzMTllLi44M2Zl
MDIzOGQyNGE1YmI1MWZhNGI0NWUyZmEwNGM1ODNkOTM4M2M4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1
ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb3VudGVyRGlyZWN0aXZlcy5oIgogI2luY2x1
ZGUgIkRhdGFSZWYuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiRm9udEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0
eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJTaGFk
b3dEYXRhLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgIlN0eWxlQmFja2dy
b3VuZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZUJveERhdGEuaCIKICNpbmNsdWRlICJTdHlsZURl
cHJlY2F0ZWRGbGV4aWJsZUJveERhdGEuaCIKQEAgLTE0NzAsMzEgKzE0NzAsMzEgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0S2VybmluZyhTVkdMZW5ndGggaykgeyBhY2Nlc3NTVkdTdHlsZSgpLT5z
ZXRLZXJuaW5nKGspOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0U2hhcGVJbnNpZGUoUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFNoYXBlSW5zaWRl
KFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBpZiAocmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fc2hhcGVJbnNpZGUgPT0gdmFsdWUpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3NoYXBlSW5zaWRl
ID0gdmFsdWU7CiAgICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlKCkg
Y29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVJbnNpZGUuZ2V0KCk7
IH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiByZXNvbHZlZFNoYXBlSW5zaWRlKCkgY29uc3QK
KyAgICBTaGFwZVZhbHVlKiBzaGFwZUluc2lkZSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX3NoYXBlSW5zaWRlLmdldCgpOyB9CisgICAgU2hhcGVWYWx1ZSogcmVzb2x2
ZWRTaGFwZUluc2lkZSgpIGNvbnN0CiAgICAgewotICAgICAgICBFeGNsdXNpb25TaGFwZVZhbHVl
KiBzaGFwZUluc2lkZSA9IHRoaXMtPnNoYXBlSW5zaWRlKCk7Ci0gICAgICAgIGlmIChzaGFwZUlu
c2lkZSAmJiBzaGFwZUluc2lkZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6Ok91dHNp
ZGUpCisgICAgICAgIFNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlID0gdGhpcy0+c2hhcGVJbnNpZGUo
KTsKKyAgICAgICAgaWYgKHNoYXBlSW5zaWRlICYmIHNoYXBlSW5zaWRlLT50eXBlKCkgPT0gU2hh
cGVWYWx1ZTo6T3V0c2lkZSkKICAgICAgICAgICAgIHJldHVybiBzaGFwZU91dHNpZGUoKTsKICAg
ICAgICAgcmV0dXJuIHNoYXBlSW5zaWRlOwogICAgIH0KIAotICAgIHZvaWQgc2V0U2hhcGVPdXRz
aWRlKFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRT
aGFwZU91dHNpZGUoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZU91dHNpZGUgPT0gdmFsdWUpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5t
X3NoYXBlT3V0c2lkZSA9IHZhbHVlOwogICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBz
aGFwZU91dHNpZGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFw
ZU91dHNpZGUuZ2V0KCk7IH0KKyAgICBTaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUoKSBjb25zdCB7
IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZU91dHNpZGUuZ2V0KCk7IH0KIAot
ICAgIHN0YXRpYyBFeGNsdXNpb25TaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVJbnNpZGUoKTsKLSAg
ICBzdGF0aWMgRXhjbHVzaW9uU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlT3V0c2lkZSgpIHsgcmV0
dXJuIDA7IH0KKyAgICBzdGF0aWMgU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlSW5zaWRlKCk7Cisg
ICAgc3RhdGljIFNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZU91dHNpZGUoKSB7IHJldHVybiAwOyB9
CiAKICAgICB2b2lkIHNldENsaXBQYXRoKFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IG9w
ZXJhdGlvbikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU2hhcGVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFs
dWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NzRhZWViMjlmODI1Y2JhNTkzODU3YjEwOWE5ZDFhYjQ0NDljYjBk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBl
VmFsdWUuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2hhcGVWYWx1ZV9oCisjZGVmaW5lIFNoYXBlVmFsdWVfaAorCisjaW5jbHVkZSAiQmFz
aWNTaGFwZXMuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFwZVZhbHVlIDogcHVi
bGljIFJlZkNvdW50ZWQ8U2hhcGVWYWx1ZT4geworcHVibGljOgorICAgIGVudW0gU2hhcGVWYWx1
ZVR5cGUgeworICAgICAgICAvLyBUaGUgQXV0byB2YWx1ZSBpcyBkZWZpbmVkIGJ5IGEgbnVsbCBT
aGFwZVZhbHVlKgorICAgICAgICBTaGFwZSwKKyAgICAgICAgT3V0c2lkZSwKKyAgICAgICAgSW1h
Z2UKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRlU2hh
cGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTaGFwZVZhbHVlKHNoYXBlKSk7CisgICAgfQorCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRlT3V0c2lkZVZhbHVlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcGVWYWx1ZShPdXRzaWRlKSk7CisgICAgfQorCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRlSW1hZ2VWYWx1ZShQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTaGFwZVZhbHVlKGltYWdlKSk7CisgICAgfQorCisgICAgU2hhcGVWYWx1ZVR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEJhc2ljU2hhcGUqIHNoYXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFwZS5nZXQoKTsgfQorICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBpbWFnZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ltYWdlICE9IGltYWdlKQor
ICAgICAgICAgICAgbV9pbWFnZSA9IGltYWdlOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU2hhcGVWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50
eXBlKCk7IH0KKworcHJpdmF0ZToKKyAgICBTaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNTaGFw
ZT4gc2hhcGUpCisgICAgICAgIDogbV90eXBlKFNoYXBlKQorICAgICAgICAsIG1fc2hhcGUoc2hh
cGUpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlKFNoYXBlVmFsdWVUeXBlIHR5cGUpCisg
ICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlKFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCisgICAgICAgIDogbV90eXBlKEltYWdlKQorICAgICAg
ICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlVHlwZSBtX3R5
cGU7CisgICAgUmVmUHRyPEJhc2ljU2hhcGU+IG1fc2hhcGU7CisgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IG1faW1hZ2U7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKaW5kZXgg
MGEzYzdhOGNhYzFiYzIwYTBlNDQ1ZDk3MzNkNzA1YTYwNWJkMTFjYy4uMDc2N2FkOGMzMWZjN2Rm
OGRmYWQ5YzhhZGE5NDk5YmUwYzlmNDlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCkBAIC0zMCwx
MCArMzAsMTAgQEAKICNpbmNsdWRlICJDb3VudGVyRGlyZWN0aXZlcy5oIgogI2luY2x1ZGUgIkN1
cnNvckRhdGEuaCIKICNpbmNsdWRlICJEYXRhUmVmLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hh
cGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZpbGxMYXllci5oIgogI2luY2x1ZGUgIkxpbmVDbGFtcFZh
bHVlLmgiCiAjaW5jbHVkZSAiTmluZVBpZWNlSW1hZ2UuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVl
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTM2LDggKzEzNiw4IEBAIHB1YmxpYzoKIAog
ICAgIExlbmd0aFNpemUgbV9wYWdlU2l6ZTsKIAotICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZh
bHVlPiBtX3NoYXBlSW5zaWRlOwotICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBtX3No
YXBlT3V0c2lkZTsKKyAgICBSZWZQdHI8U2hhcGVWYWx1ZT4gbV9zaGFwZUluc2lkZTsKKyAgICBS
ZWZQdHI8U2hhcGVWYWx1ZT4gbV9zaGFwZU91dHNpZGU7CiAgICAgTGVuZ3RoIG1fc2hhcGVNYXJn
aW47CiAgICAgTGVuZ3RoIG1fc2hhcGVQYWRkaW5nOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204056</attachid>
            <date>2013-06-07 11:13:10 -0700</date>
            <delta_ts>2013-06-10 11:51:22 -0700</delta_ts>
            <desc>cmakelists additions</desc>
            <filename>bug-117162-20130607111137.patch</filename>
            <type>text/plain</type>
            <size>290710</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ1YWZmMjU5YWVlNDZk
YWE3MWVhODI5YzUwNWQ2NmEzN2M5ZGFkZS4uNmRhZTIzYzg4MGI2ODk2ZWZmMzdhMDcyMjQ3YzE1
ZDM3OTI5YzNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNCBAQAorMjAxMy0wNi0wNiAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSBz
cGxpdCBiZXR3ZWVuIHRoZSBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9ucywKKyAgICAgICAgc29tZSByZW5hbWluZyBpcyBuZWNlc3NhcnkuIEluIGdlbmVyYWwsIHRo
aXMgcGF0Y2ggcmVtb3ZlcyAnRXhjbHVzaW9uJyBmcm9tCisgICAgICAgIGFueSBTaGFwZXMgY29k
ZSwgbW9zdGx5IHJlbmFtaW5nIEV4Y2x1c2lvblNoYXBlIC0+IFNoYXBlLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVy
dHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAgICog
Y3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eVNoYXBlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
U2hhcGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVNoYXBl
OjpjcmVhdGVIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFwZTo6UHJvcGVydHlXcmFwcGVyU2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmVuc3VyZVByb3Bl
cnR5TWFwKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6c2hhcGVJbnNpZGVJbmZvKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVTaGFwZVNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0ZXJDaGls
ZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9j
YXRpb25Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25O
ZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5zdXJlU2hhcGVJbnNpZGVJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaGFwZUluc2lkZUluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNldFNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6YWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5n
TWFyZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRTaGFwZUluc2lkZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3Np
dGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5zRm9yTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMb2dpY2FsTGluZVRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlTGluZUJvdW5kYXJpZXNGb3JTaGFwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNh
bEhlaWdodElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGlu
ZUJyZWFrZXI6Om5leHRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6d2lsbEJlRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzaGFwZU91dHNpZGVJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50T2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JlZmxleFZlcnRleCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppbndh
cmRFZGdlTm9ybWFsKToKKyAgICAgICAgKFdlYkNvcmU6Om91dHdhcmRFZGdlTm9ybWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGVuZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpzbmFwVmVydGlj
ZXNUb0xheW91dFVuaXRHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTaGFwZVBhZGRp
bmdCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5Cb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVFZGdlSW50
ZXJzZWN0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6
OmFib3ZlT3JUb1RoZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpmaXJz
dEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1BvbHlnb25TaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpP
ZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29uRWRnZTo6
ZWRnZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpiYXNpcyk6
CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OlBvbHlnb25TaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2VZSW50
ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2VwdEZvcldp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRpbmdCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBlTWFyZ2luQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZh
bHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OmZpcnN0SW5jbHVkZWRJbnRl
cnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hh
cGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0
YW5nbGUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OkZsb2F0Um91bmRl
ZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cngpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVj
dGFuZ2xlU2hhcGU6OlJlY3RhbmdsZVNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWN0YW5nbGVTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9seWdvblNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUmVjdFRvTG9naWNhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNp
Y2FsU2l6ZVRvTG9naWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlU2hhcGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oLgorICAgICAgICAoV2ViQ29yZTo6
TGluZVNlZ21lbnQ6OkxpbmVTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjp+U2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlOjpzaGFwZVBhZGRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wdXRlZFNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcHBl
ZEluZm86OmVuc3VyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6cmVtb3Zl
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjppbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcHBlZEluZm86OmluZm9NYXApOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZv
Ojp+U2hhcGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2V0U2hhcGVTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6Y2xlYXJTZWdtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86OnNoYXBlTG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluZm86OnNoYXBlTG9naWNhbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpz
aGFwZUxvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlTG9n
aWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExpbmVUb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGluZUJvdHRvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluZm86OnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlSW5mbzo6bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVJbmZvOjpsaW5lV2l0aGluU2hhcGVCb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcGVJbmZvOjpkaXJ0eVNoYXBlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluZm86OnNoYXBlU2l6ZURpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6b3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpTaGFwZUluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsVG9wT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFw
ZXMvU2hhcGVJbnNpZGVJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lk
ZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6TGluZVNlZ21l
bnRJdGVyYXRvcjo6TGluZVNlZ21lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUluc2lkZUluZm86OmNyZWF0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJ
bmZvOjpoYXNTZWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OnNl
Z21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2VnbWVudFJhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OmN1cnJlbnRTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6c2V0TmVlZHNMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpuZWVkc0xheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OlNoYXBlSW5zaWRlSW5mbyk6CisgICAgICAgICogcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZUludGVydmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFNoYXBlSW50ZXJ2
YWxzKToKKyAgICAgICAgKFdlYkNvcmU6Om1lcmdlU2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAo
V2ViQ29yZTo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6c3Vi
dHJhY3RTaGFwZUludGVydmFscyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
dGVydmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
SW50ZXJ2YWwuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW50ZXJ2YWw6OlNoYXBlSW50ZXJ2
YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRG
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRz
Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mby5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hhcGVMb2dp
Y2FsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OmxlZnRTZWdt
ZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lk
ZUluZm86OnJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXBlT3V0c2lkZUluZm86OlNoYXBlT3V0c2lkZUluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5p
dGlhbFNoYXBlSW5zaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVWYWx1ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpzaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFwZVZhbHVlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OlNoYXBlVmFsdWUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6CisKIDIw
MTMtMDYtMDYgIFJ1dGggRm9uZyAgPHJ1dGhfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRXhw
b3NlIEhUTUxDYW52YXNFbGVtZW50IHN1cHBvcnRzQ29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxNGY1M2Rm
ZmFkMTM1NmZlMmM3MTA3ZTU2OGVkMWE5YmIwNWIxNDNkLi40N2U3NWU0ZTEwOGYyMTdmYjJjZTVj
OWViNGI0OTlmY2RhMThmZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA2LTA3
ICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIFNoYXBl
c11bQ1NTIEV4Y2x1c2lvbnNdIFNwbGl0IENTUyBFeGNsdXNpb25zIGFuZCBDU1MgU2hhcGVzIGNv
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzE2
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGlu
ZyB0aGUgcmVuZGVyaW5nL3NoYXBlcyBkaXJlY3RvcnkKKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorCiAyMDEzLTA2LTA1ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLiBBdHRlbXB0aW5nIGEgYnVpbGQgZml4IGZvciB0aGUgQXBw
bGVXaW4gcG9ydCBhZnRlciByMTUxMTk5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDJjMDRmNDZiZDIyMzgzYTY3
MjRjNTg5ODk3MzBkOTgxOThlZTY0OWEuLjliZTg5OWI4N2VhNDQwNjhkOWY0MTVjMDkzOGFlM2Iy
N2I4ZjBjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wNi0wNyAgQmVhciBU
cmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NTUyBF
eGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgdGhlIHJl
bmRlcmluZy9zaGFwZXMgZGlyZWN0b3J5CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKwog
MjAxMy0wNi0wNiAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVuYm9zc2Eub3JnPgog
CiAgICAgICAgIFtHdGtdIENvbm5lY3Rpb24gaXMgbGVha2luZyB3aGVuIFdlYlByb2Nlc3MgaXMg
dGVybWluYXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4ZTgzNzM1OWM5MzU2NmRjNTU2YTRl
M2YyODc5Y2M2Yjc5NzIxZWZkLi43ODVhNmE3MWI3ZTFiOTkwMzlmZGU4NzJkNTM1ZTNhMjMyMTA2
NGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNzYsNiArNzYsNyBAQCBzZXQoV2ViQ29yZV9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3JlbmRlcmluZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL21h
dGhtbCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3NoYXBlcyIKICAgICAiJHtXRUJD
T1JFX0RJUn0vcmVuZGVyaW5nL3N0eWxlIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcv
c3ZnIgogICAgICIke1dFQkNPUkVfRElSfS9zdG9yYWdlIgpAQCAtMjA5MywxMyArMjA5NCw2IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvQmlkaVJ1bi5jcHAKICAgICByZW5k
ZXJpbmcvQ291bnRlck5vZGUuY3BwCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAotICAg
IHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9u
UG9seWdvbi5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAotICAgIHJl
bmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bmZvLmNwcAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCi0gICAg
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwCiAgICAgcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcAogICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNw
cAogICAgIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKQEAgLTIyMTQsNiArMjIw
OCwxNCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxTdWJTdXAuY3BwCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92
ZXIuY3BwCiAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAKKyAgICByZW5k
ZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCisgICAgcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
dGVydmFsLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKKwog
ICAgIHJlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUv
Q29udGVudERhdGEuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAwYTUyODgzN2U3MjM0NzIxMDdjMDhiMmRiMDMwZDQ4
N2NlZjgyMGJiLi4yM2FkZjRlZWU3OTEwMGFiODJhNTc3MDJmMTUzNWMzM2I5NmVjMzllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQpAQCAtOTAsNiArOTAsNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwK
IAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbiBcCiAJLUkkKHNyY2Rpcikv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUgXAog
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggODQxYTU0MTk1MDRiODYwN2VjMjRhYTQzZjE3Yzk2MTkyNmY1Y2JmMS4uOTRkZmU2YzlmMmUy
NzkzMWZlMzIyZWYxMmZmOTE5N2I5OGY1MDY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC00Mzg1LDIwICs0Mzg1LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uUmVjdGFuZ2xlLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXApAQCAtNDYzMyw2ICs0NjE5LDIwIEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxTdWJTdXAuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1BvbHlnb25TaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvUG9seWdvblNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmVj
dGFuZ2xlU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3Rh
bmdsZVNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW50ZXJ2YWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW50ZXJ2YWwuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZU91dHNpZGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1No
YXBlcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oIFwKQEAgLTQ2
NDYsNyArNDY0Niw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0N1cnNvckRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0N1cnNvckxpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0RhdGFS
ZWYuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFs
dWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oIFwKQEAgLTQ2NjMsNiArNDY2Miw3
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dE
YXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuaCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRhLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpp
bmRleCAwYjRhNGZkOWQwNmRkZDg1M2YyMDZjMTUyYjA3ZGMwMmMyZjJhNjc5Li4wN2JhOGJkOTc3
YWY3ODNmZDExNWYzMGNkNjFkYzRlZjI0ZDg0YjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTExNDUsMTMg
KzExNDUsNiBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvQmlkaVJ1bi5jcHAgXAogICAg
IHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAotICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3Rhbmds
ZS5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAgXAotICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluZm8uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8u
Y3BwIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIFwKICAgICByZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXAogICAgIHJlbmRlcmluZy9GbG93VGhyZWFkQ29u
dHJvbGxlci5jcHAgXApAQCAtMTI0NSw2ICsxMjM4LDEzIEBAIFNPVVJDRVMgKz0gXAogICAgIHJl
bmRlcmluZy9SZW5kZXJXb3JkQnJlYWsuY3BwIFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAgXAorICAgIHJlbmRlcmlu
Zy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5n
bGVTaGFwZS5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIFwKKyAgICByZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJ
bnNpZGVJbmZvLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcCBc
CisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBcCiAgICAgcmVuZGVy
aW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvbnRlbnRE
YXRhLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmNwcCBcCkBA
IC0yNDAzLDEzICsyNDAzLDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL2JyZWFrX2xp
bmVzLmggXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5oIFwKICAgICByZW5kZXJpbmcvRWxs
aXBzaXNCb3guaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAotICAgIHJl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0
YW5nbGUuaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggXAotICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluZm8uaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIFwK
ICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBcCiAgICAgcmVuZGVyaW5nL0Zp
eGVkVGFibGVMYXlvdXQuaCBcCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZS5oIFwKQEAgLTI1MTMsMTggKzI1MDYsMjUgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlcldvcmRCcmVhay5oIFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5oIFwKICAg
ICByZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9Qb2x5
Z29uU2hhcGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oIFwKKyAg
ICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJ
bmZvLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmggXAorICAgIHJl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1No
YXBlT3V0c2lkZUluZm8uaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmggXAog
ICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUv
Q291bnRlckRpcmVjdGl2ZXMuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1cnNvckRhdGEuaCBc
CiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3QuaCBcCi0gICAgcmVuZGVyaW5nL3N0eWxl
L0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5o
IFwKICAgICByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmggXAogICAgIHJlbmRlcmluZy9z
dHlsZS9OaW5lUGllY2VJbWFnZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5o
IFwKICAgICByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBcCiAgICAgcmVuZGVyaW5nL3N0
eWxlL1NoYWRvd0RhdGEuaCBcCisgICAgcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuaCBcCiAg
ICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaCBcCiAgICAgcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQm94RGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJ
bWFnZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggNTMwMmM0Y2UzZGZhODZlNGVlZWI3YjcxYzI0YTY2
NzI4M2Y3YTA2Zi4uYjVlMzM0YjBiMGM1NGQyYzgxMTk3ZDM0NjM1ZTVjMDEyMDM0ZmFkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcmkKQEAgLTg1LDYgKzg1LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09V
UkNFX0RJUi9wbHVnaW5zIFwKICAgICAkJFNPVVJDRV9ESVIvcmVuZGVyaW5nIFwKICAgICAkJFNP
VVJDRV9ESVIvcmVuZGVyaW5nL21hdGhtbCBcCisgICAgJCRTT1VSQ0VfRElSL3JlbmRlcmluZy9z
aGFwZXMgXAogICAgICQkU09VUkNFX0RJUi9yZW5kZXJpbmcvc3R5bGUgXAogICAgICQkU09VUkNF
X0RJUi9yZW5kZXJpbmcvc3ZnIFwKICAgICAkJFNPVVJDRV9ESVIvc3RvcmFnZSBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCBlODA3MjAx
YjQxMTBiOWNhY2U3NWYwZTE2MDc0ZDMyZDJlYzBkNzY5Li4wZDk1YTIyOTJjZjUwZTBhN2NlNTU3
Zjk2ZTJiYjIwNGI0NDYyMDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKQEAgLTU0MjIsMTIgKzU0MjIsNiBAQAogICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbklu
dGVydmFsLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25Qb2x5Z29uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xFeGNsdXNpb25SZWN0YW5nbGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KQEAgLTYzMDYsNiArNjMwMCwxMiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9X
aW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJv
ZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxl
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hh
cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xS
ZWN0YW5nbGVTaGFwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc2hhcGVzXFNoYXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnRlcnZhbC5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUluZm8uY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdQYXRoRGF0YS5j
cHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CkBAIC0xMjEwOSwxMSArMTIxMDksNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXGJyZWFrX2xpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcQ291bnRlck5vZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xFbGxpcHNpc0JveC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXEV4Y2x1c2lvbkludGVydmFsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVmZmVjdFJl
bmRlcmVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRml4ZWRU
YWJsZUxheW91dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZs
b3dUaHJlYWRDb250cm9sbGVyLmgiIC8+CkBAIC0xMjE5Nyw2ICsxMjE5MiwxMiBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclNlbGVjdGlvbkluZm8uaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTbGlkZXIuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTbmFwc2hvdHRlZFBs
dWdJbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQ
b2x5Z29uU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcUmVjdGFuZ2xlU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzaGFwZXNcU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVPdXRzaWRlSW5mby5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdCbG9jay5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdD
b250YWluZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiIC8+CkBAIC0xMjI2OSw3ICsxMjI3MCw2IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcQ3Vyc29yRGF0YS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEN1cnNvckxpc3QuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxEYXRhUmVmLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRXhjbHVzaW9u
U2hhcGVWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0
eWxlXEZpbGxMYXllci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHN0eWxlXEdyaWRQb3NpdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXHN0eWxlXEdyaWRUcmFja1NpemUuaCIgLz4KQEAgLTEyMjgwLDYgKzEyMjgwLDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxSZW5kZXJTdHlsZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFJlbmRlclN0
eWxlQ29uc3RhbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdc
c3R5bGVcU2hhZG93RGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXHN0eWxlXFNoYXBlVmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzdHlsZVxTdHlsZUJhY2tncm91bmREYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVCb3hEYXRhLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVDYWNoZWRJbWFnZS5oIiAvPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCmluZGV4IGY1ZTg3MjM4YzdmMjA4Yjc1OGEwZmQ3MTYxOGQwMmY0ZDIyZGM3MDMu
LjVlMmNlMDllYTRmNGMzZjg1MzJhOGIyY2RhMzFhZDJlNjQwODNhMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMK
QEAgLTI0MzIsMjMgKzI0MzIsMjMgQEAKICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFbGxpcHNpc0JveC5jcHAiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5jcHAiPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hhcGUuY3BwIj4KICAgICAgIDxG
aWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5jcHAiPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5jcHAiPgog
ICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0YW5nbGUuY3BwIj4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGUuY3BwIj4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZv
LmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby5jcHAiPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUludGVydmFsLmNwcCI+CiAgICAgICA8RmlsdGVyPnJl
bmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIj4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVPdXRzaWRlSW5mby5jcHAi
PgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5j
cHAiPgpAQCAtOTEyMCwxOSArOTEyMCwyMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXEVsbGlwc2lzQm94LmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xFeGNsdXNpb25JbnRlcnZhbC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzaGFwZXNcUG9seWdvblNoYXBlLmgiPgorICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0Zp
bHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xFeGNsdXNpb25TaGFwZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuaCI+CiAgICAgICA8RmlsdGVyPnJl
bmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCI+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUluZm8uaCI+CiAg
ICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVmZmVjdFJlbmRlcmVyLmgiPgpA
QCAtOTU4OCw5ICs5NTkxLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzdHlsZVxEYXRhUmVmLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzdHlsZVxFeGNsdXNpb25TaGFwZVZhbHVlLmgiPgotICAgICAgPEZpbHRlcj5yZW5kZXJpbmdc
c3R5bGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xzdHlsZVxGaWxsTGF5ZXIuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmlu
Z1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtOTYyMSw2ICs5NjIxLDkgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFkb3dEYXRhLmgi
PgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFwZVZhbHVl
LmgiPgorICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KKyAgICA8L0NsSW5j
bHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTdHlsZUJh
Y2tncm91bmREYXRhLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KQEAgLTE1MTg0LDQgKzE1MTg3LDQgQEAKICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAgIDwvSXRlbUdyb3Vw
PgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA0NTBmMmM1ZjViZDY0MDRjZmZjZDc5OTVlNjZhN2ZkZjkzNTRmOTg3Li40YzQ4N2VhNTNhMTUz
OWQwZDhhZDhlMzUzN2FjN2U5NzExMWUyOGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODM1LDE0ICsxODM1LDYgQEAKIAkJ
NkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNDEyODBFOEE0
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLzsgfTsKIAkJNkU2N0QyQTcxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRE9wZW5HTC5oICovOyB9OwogCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi87IH07Ci0J
CTZFODc5OEJBMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNDE1RjgxRTRB
MDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwICovOyB9OwotCQk2RTg3OThCQjE1Rjgx
RTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI1MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNs
dXNpb25JbnRlcnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTZFODc5OEJDMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4
QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi87IH07Ci0JCTZF
ODc5OEJEMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI3MTVGODFFNEEwMEJG
RTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLzsgfTsKLQkJNkU4Nzk4QkUxNUY4MUU0QTAw
QkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25T
aGFwZS5jcHAgKi87IH07Ci0JCTZFODc5OEJGMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25T
aGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4
Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkVBRjM0MEYxNjEzODY5QTAwODU5
NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBv
bHlnb24uY3BwICovOyB9OwotCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9u
UG9seWdvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLzsgfTsKIAkJ
NkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07CiAJCTZFQkM1RUIwMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBF
NDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi87IH07CkBAIC0zMjYz
LDggKzMyNTUsNiBAQAogCQk5OENFNDMyQTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xvYWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThDRTQzMjkx
MjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLzsgfTsKIAkJOThFQjFGOTUxMzEzRkUw
NTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVt
ZW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5QTFCNkY5NzE1ODg2OUM4MDAxMUE4QzQgLyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBMUI2Rjk2MTU4
ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwICovOyB9OwotCQk5QTlD
RUY4RDE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTlDRUY4QjE2M0Iz
RUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgKi87IH07Ci0JCTlB
OUNFRjhFMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTlDRUY4QzE2M0Iz
RUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMUFCMDdDMTY0OEM3QzQwMDUx
RjNGMiAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMUFCMDdCMTY0OEM3QzQwMDUx
RjNGMiAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKIAkJ
OUIyNERFOEUxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI0REU4QzE1MTk0Qjk1MDBDNTlD
MjcgLyogSFRNTEJESUVsZW1lbnQuaCAqLzsgfTsKIAkJOUIyRDhBNzkxNDk5N0NDRjAwRUNFRjNF
IC8qIFVuZG9TdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTczOSw3ICs1NzI5LDcgQEAK
IAkJRkQwNkRGQTUxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA2
REZBMzEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAq
LzsgfTsKIAkJRkQwNkRGQTYxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQwNkRGQTQxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
ICovOyB9OwogCQlGRDE2NjBBNTEzNzg3QzZEMDAxRkZBN0IgLyogRGVub3JtYWxEaXNhYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQxNjYwQTQx
Mzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCAqLzsgfTsKLQkJRkQxQUYxNTAx
NjU2RjE1MTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAv
KiBFeGNsdXNpb25TaGFwZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMUFGMTRF
MTY1NkYxMjEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkQyM0ExMjUxM0Y1RkE1OTAwRjY3MDAxIC8qIEpT
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMjNBMTIzMTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgKi87IH07CiAJCUZEMjNBMTI2MTNGNUZBNTkwMEY2
NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyM0ExMjQxM0Y1RkE1OTAwRjY3MDAxIC8q
IEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi87IH07CiAJCUZEMkRCRjEyMTJCMDQ4
QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBB
Y2NlbGVyYXRlLmZyYW1ld29yayAqLzsgfTsKQEAgLTU4NTYsNiArNTg0NiwyMCBAQAogCQlGRDMx
NjBDMDEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzMTYwQkExMkIwMjcyQTAwQzFBMzU5IC8q
IEZGVEZyYW1lTWFjLmNwcCAqLzsgfTsKIAkJRkQzNTkxOEYxMzhEQjIyMDAwRTFFQkVDIC8qIEF1
ZGlvUGFyYW1UaW1lbGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRDM1OTE4RDEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5l
LmNwcCAqLzsgfTsKIAkJRkQzNTkxOTAxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1l
bGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQz
NTkxOEUxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oICovOyB9OworCQlG
RDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZE
NDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgxMTc1RDM5MjYwMDJDRDM2MCAvKiBT
aGFwZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlGRDQ1QTk1MTE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4MzE3NUQzOTI2
MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBl
T3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMDhBODg3MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTMxNzVE
M0ZCODAwQzIxRUM4IC8qIFNoYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZEMDhBODdFMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi87
IH07CisJCUZENDVBOTU0MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODAxNzVEMzkyNjAw
MkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi87IH07CisJCUZENDVBOTU1MTc1RDNGQjgwMEMyMUVD
OCAvKiBTaGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkQwOEE4ODIxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5m
by5jcHAgKi87IH07CisJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
MDhBODg2MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCAqLzsgfTsKKwkJ
RkQ0NUE5NTcxNzVENDE0QzAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0IxNzVEMzkyNjAwMkNEMzYw
IC8qIFBvbHlnb25TaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZENDVBOTU4MTc1RDQxNEMwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0Qx
NzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTkxNzVENDE3MTAwQzIxRUM4IC8q
IFBvbHlnb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDA4QTg3QTE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmNwcCAqLzsg
fTsKKwkJRkQ0NUE5NUExNzVENDE3MTAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdDMTc1RDM5
MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgKi87IH07CisJCUZENDVBOTVCMTc1RDQx
RUUwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4NTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRl
cnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZENDVBOTVDMTc1RDQyMEQwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODg0MTc1RDM5MjYwMDJD
RDM2MCAvKiBTaGFwZUludGVydmFsLmNwcCAqLzsgfTsKIAkJRkQ1MzczNTIxMzdCNjUxODAwMDA4
RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZENTM3MzUwMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgKi87IH07
CiAJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTExMzdCNjUxODAwMDA4RENF
IC8qIFplcm9Qb2xlLmggKi87IH07CiAJCUZENTM3MzU2MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5h
bWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkQ1MzczNTQxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJl
c3Nvcktlcm5lbC5jcHAgKi87IH07CkBAIC01ODc4LDggKzU4ODIsNiBAQAogCQlGRDZFRDJDODEz
NkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZFRDJDNjEzNkI4RTY2MDAzQ0YwNzIgLyog
RHluYW1pY3NDb21wcmVzc29yLmggKi87IH07CiAJCUZENkYyNTJDMTNGNUVGMEUwMDY1MTY1RiAv
KiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ2RjI1MjkxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgKi87IH07CiAJCUZENkYyNTJEMTNGNUVGMEUwMDY1
MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkYyNTJBMTNGNUVGMEUwMDY1MTY1RiAvKiBN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLzsgfTsKLQkJRkQ3NDhBQkYxNUJGNzRFRDAw
NTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc0OEFCRDE1QkY3NEVEMDA1OUNGMEQgLyog
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCAqLzsgfTsKLQkJRkQ3NDhBQzAxNUJGNzRFRDAw
NTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3NDhBQkUxNUJGNzRFRDAwNTlDRjBEIC8qIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZENzg2OEI5MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNz
Q29tcHJlc3Nvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQ3ODY4QjcxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29y
Tm9kZS5jcHAgKi87IH07CiAJCUZENzg2OEJBMTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNz
Q29tcHJlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuaCAqLzsgfTsKIAkJRkQ3RjI5OTExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJEU1BL
ZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQ3RjI5OEExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwICovOyB9
OwpAQCAtNTk0MCw4ICs1OTQyLDYgQEAKIAkJRkRCMDUyRTAxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1
ZGlvU3VtbWluZ0p1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGREIwNTJERTE1NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rp
b24uaCAqLzsgfTsKIAkJRkRCMTcwMDUxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJl
c2FtcGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGREIxNzAwMzE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCAq
LzsgfTsKIAkJRkRCMTcwMDYxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCMTcw
MDQxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oICovOyB9OwotCQlG
REI4RDFEQTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREI4RDFEOTE2QjBDMEQ3MDAz
NDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkRCOEQxRTUxNkIwQ0M5NzAwMzQwRjEwIC8qIEV4Y2x1
c2lvblNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGREI4RDFEQjE2QjBDMEY2MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNw
cCAqLzsgfTsKIAkJRkRCRDFERkMxNjdGRTI3RDAwNTFBMTFFIC8qIEpTT3NjaWxsYXRvck5vZGVD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRCRDFERkIxNjdGRTI3RDAwNTFBMTFFIC8qIEpTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwICov
OyB9OwogCQlGREJENDgwQzE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291
cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGREJENDgwQTE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5jcHAgKi87IH07CiAJCUZEQkQ0ODBEMTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFt
QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGREJENDgwQjE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291
cmNlTm9kZS5oICovOyB9OwpAQCAtODIyOCwxNCArODIyOCw2IEBACiAJCTZFNjdEMkE0MTI4MEU4
QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVu
R0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTgxMjgwRThCRDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eHRlbnNpb25zM0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjQxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvbkludGVydmFsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVy
dmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvbkludGVydmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI2MTVGODFFNEEwMEJGRTRB
QSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25SZWN0YW5nbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
Y2x1c2lvblNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4Qjkx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyog
RXhjbHVzaW9uUG9seWdvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNs
dXNpb25Qb2x5Z29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RDgwMTM4
QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2NEFycmF5LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxv
YXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxv
YXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUUxMzhC
NTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NzA2LDggKzk2OTgsNiBAQAogCQk5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xv
YWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rTG9hZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBO
b3RJbXBsZW1lbnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RJbXBs
ZW1lbnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QTFCNkY5NjE1ODg2OUM4
MDAxMUE4QzQgLyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTlBOUNFRjhCMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5QTlDRUY4QzE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMUFCMDc5MTY0OEM2OUQw
MDUxRjNGMiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTEZvcm1D
b250cm9sc0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFB
QjA3QjE2NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxCRElFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjU4MCw4ICsxMjU3MCwyMiBAQAogCQlGRDAwRDdBMzE0QTNGNjE5MDA3
MzQwMTEgLyogU2luY1Jlc2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW5jUmVzYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMDZERkEz
MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwNkRGQTQxMzRBNERFRjAw
NkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0ExNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25T
aGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5Z29uU2hh
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3QjE3NUQzOTI2MDAy
Q0QzNjAgLyogUG9seWdvblNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvbHlnb25TaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3QzE3
NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVjdGFuZ2xlU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdGFuZ2xlU2hhcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0YxNzVEMzkyNjAwMkNEMzYwIC8qIFNo
YXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgwMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUlu
Zm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGVJbmZvLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODExNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZUlu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODIxNzVEMzkyNjAwMkNE
MzYwIC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaGFwZUluc2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRDA4QTg4MzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlSW5zaWRlSW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRDA4QTg4NDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZh
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZUludGVydmFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODUxNzVEMzkyNjAwMkNE
MzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2hhcGVJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4NjE3
NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUlu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVPdXRzaWRlSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDE2NjBBNDEzNzg3QzZEMDAxRkZBN0Ig
LyogRGVub3JtYWxEaXNhYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
ZW5vcm1hbERpc2FibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEMUFGMTRF
MTY1NkYxMjEwMEM2RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWUuaDsgcGF0aCA9IHN0eWxlL0V4
Y2x1c2lvblNoYXBlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQxQUYx
NEUxNjU2RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU2hhcGVWYWx1ZS5oOyBwYXRoID0gc3R5bGUvU2hhcGVWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDIzQTEyMzEzRjVGQTU5MDBGNjcwMDEgLyogSlNN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRDIzQTEyNDEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkQyREJGMEUxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IG5hbWUgPSBBY2NlbGVyYXRlLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OwpAQCAtMTI3NDIsOCArMTI3NDYsNiBAQAogCQlGRDZGMjUyOTEzRjVFRjBFMDA2
NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENkYyNTJBMTNGNUVGMEUwMDY1MTY1RiAvKiBN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZENkYyNTJCMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZENzQ4QUJEMTVCRjc0
RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQ3NDhBQkUxNUJGNzRFRDAwNTlDRjBEIC8qIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkQ3ODY4QjcxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDc4NjhCODEzNkI5
OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRDdGMjk4QTEzRDRDMENCMDBBRDk1MzUgLyogV2F2ZVNoYXBl
ckRTUEtlcm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXZl
U2hhcGVyRFNQS2VybmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyODA3
LDggKzEyODA5LDYgQEAKIAkJRkRCMDUyREUxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3VtbWlu
Z0p1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU3VtbWlu
Z0p1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQjE3MDAzMTRBMkJB
QjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCMTcwMDQxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hh
bm5lbFJlc2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdWx0aUNo
YW5uZWxSZXNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkRCOEQxRDkx
NkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5m
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFw
ZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREJEMURGQjE2N0ZFMjdE
MDA1MUExMUUgLyogSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCRDQ4MEExNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZEQkQ0ODBCMTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
OTIyLDcgKzE4OTIyLDYgQEAKIAkJCQlCQzIyNzJBMTBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29y
RGF0YS5oICovLAogCQkJCUJDMjI3MkFDMEU4MkU4RjMwMEU3Rjk3NSAvKiBDdXJzb3JMaXN0Lmgg
Ki8sCiAJCQkJQkMyMjc0NkUwRTgzNjY0NTAwRTdGOTc1IC8qIERhdGFSZWYuaCAqLywKLQkJCQlG
RDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oICovLAogCQkJ
CUJDNUVCNjlDMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuY3BwICovLAogCQkJCUJDNUVC
NjlEMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuaCAqLywKIAkJCQlBMTI3MDVDMjE2NTZC
RDY1MDBDMkUyN0MgLyogR3JpZFBvc2l0aW9uLmggKi8sCkBAIC0xODk0MCw2ICsxODkzOSw3IEBA
CiAJCQkJQkM1RUI2NjcwRTgxQ0I3MTAwQjI1OTY1IC8qIFJlbmRlclN0eWxlQ29uc3RhbnRzLmgg
Ki8sCiAJCQkJQkM1RUI4QzEwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwICovLAog
CQkJCUJDNUVCOEMyMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggKi8sCisJCQkJRkQx
QUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCAqLywKIAkJCQlCQzVFQjZBMDBF
ODFEQzRGMDBCMjU5NjUgLyogU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI2
QTEwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCAqLywKIAkJCQlCQzVF
QjY3QzBFODFENDIwMDBCMjU5NjUgLyogU3R5bGVCb3hEYXRhLmNwcCAqLywKQEAgLTE5ODcyLDYg
KzE5ODcyLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNDM5
MDQ2QzIxMkRBMjVDRTAwQUY4MEEyIC8qIG1hdGhtbCAqLywKKwkJCQlGRDA4QTg3OTE3NUQzOTI2
MDAyQ0QzNjAgLyogc2hhcGVzICovLAogCQkJCUJDOEM4RkFBMEREQ0QyRjIwMEI1OTJGNCAvKiBz
dHlsZSAqLywKIAkJCQkwODhDMkY3NDEyMzkwMDgwMDAzRDY1Q0UgLyogc3ZnICovLAogCQkJCUE4
Q0ZGMDRCMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuY3BwICovLApAQCAtMTk4
ODUsMjAgKzE5ODg2LDYgQEAKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyogQ291bnRl
ck5vZGUuaCAqLywKIAkJCQlBOENGRjZDQTBBMTU2MUNEMDAwQTQyMzQgLyogRWxsaXBzaXNCb3gu
Y3BwICovLAogCQkJCUE4Q0ZGNkJEMEExNTYxMTgwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5oICov
LAotCQkJCTZFODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAg
Ki8sCi0JCQkJNkU4Nzk4QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmgg
Ki8sCi0JCQkJNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3Bw
ICovLAotCQkJCTZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmgg
Ki8sCi0JCQkJNkU4Nzk4QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5j
cHAgKi8sCi0JCQkJNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3Rhbmds
ZS5oICovLAotCQkJCTZFODc5OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5j
cHAgKi8sCi0JCQkJNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmgg
Ki8sCi0JCQkJRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5j
cHAgKi8sCi0JCQkJRkRCOEQxRDkxNkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5m
by5oICovLAotCQkJCUZENzQ4QUJEMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uY3BwICovLAotCQkJCUZENzQ4QUJFMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uaCAqLywKLQkJCQk5QTlDRUY4QjE2M0IzRUExMDBERTdFRkUgLyog
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8sCi0JCQkJOUE5Q0VGOEMxNjNCM0VBMTAw
REU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCAqLywKIAkJCQkzMTMxM0Y2MzE0
NDNCMzVFMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAogCQkJCTMxMzEz
RjY0MTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAogCQkJCUE4
Q0ZGMDQ4MEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmNwcCAqLywKQEAgLTIw
NTUyLDYgKzIwNTM5LDI3IEBACiAJCQlwYXRoID0gb3BlbmdsOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJRkQwOEE4NzkxNzVEMzkyNjAwMkNEMzYwIC8qIHNoYXBlcyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkQwOEE4N0ExNzVE
MzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5jcHAgKi8sCisJCQkJRkQwOEE4N0IxNzVEMzky
NjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5oICovLAorCQkJCUZEMDhBODdDMTc1RDM5MjYwMDJD
RDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgKi8sCisJCQkJRkQwOEE4N0QxNzVEMzkyNjAwMkNE
MzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi8sCisJCQkJRkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlLmNwcCAqLywKKwkJCQlGRDA4QTg3RjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUu
aCAqLywKKwkJCQlGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLywK
KwkJCQlGRDA4QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmggKi8sCisJCQkJRkQw
OEE4ODIxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgKi8sCisJCQkJRkQw
OEE4ODMxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5oICovLAorCQkJCUZEMDhB
ODg0MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmNwcCAqLywKKwkJCQlGRDA4QTg4
NTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5oICovLAorCQkJCUZEMDhBODg2MTc1
RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCAqLywKKwkJCQlGRDA4QTg4NzE3
NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBzaGFwZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGRDMxNUZBMjEy
QjAyNUIxMDBDMUEzNTkgLyogd2ViYXVkaW8gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMjE3MTYsMTQgKzIxNzI0LDYgQEAKIAkJCQkxNDhBRkRBNTBBRjU4
MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
NjdDRTBCMTQ1QUJDMTMwMDVFNjREQiAvKiBFeGNlcHRpb25IZWFkZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzY3Q0UwQzE0NUFCQzEzMDA1RTY0REIgLyogRXhjZXB0aW9uSW50ZXJmYWNlcy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNkU4Nzk4QkIxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lv
bkludGVydmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUg
LyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkU4Nzk4QkQxNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkU4
Nzk4QkYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLywK
LQkJCQlGREI4RDFEQTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggaW4g
SGVhZGVycyAqLywKLQkJCQlGRDc0OEFDMDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQk5QTlDRUY4RTE2M0IzRUExMDBERTdF
RkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkQx
QUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUEwMjQ1NzUyMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMz
RC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVu
c2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjk4Nyw2ICsyMjk4Nyw3IEBACiAJ
CQkJODQ3MzBEOTIxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3MDU5OTc4MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcwNTk5N0ExMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNo
ZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTU3MTc1RDQxNEMwMEMyMUVDOCAvKiBQ
b2x5Z29uU2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzRFMjBBMTBBMUY0NEYwMEY5NUU2
RiAvKiBQb3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjY4RTE4QjBBREQ5NjI0
MDA0MTI4RTAgLyogUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkMxMjg3NzBCMzNB
QTZEMDBDNjkzRDUgLyogUG9wdXBNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzMDI4
LDYgKzIzMDI5LDcgQEAKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAgLyogUmF3RGF0YURv
Y3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAzQzEyQjAyNjc2MDBDMUEz
NTkgLyogUmVhbHRpbWVBbmFseXNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MzY4RTgwQzIy
NkUzMjAwNUVGQjVGIC8qIFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTU4MTc1RDQx
NEMwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRUEz
QkIxNTg1Q0Y1NTAwNEZBQTI2IC8qIFJlZkNvdW50ZWRTdXBwbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5ODMxQUU0QTE1NDIyNUM5MDBGRTI2NDQgLyogUmVmZXJyZXJQb2xpY3kuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDQUI0MTgyMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMjMyOTgsNiArMjMzMDAsMTIgQEAKIAkJCQlCQzVFQjhDNDBFODIwMzFC
MDBCMjU5NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTZEMTY5NjQxMzQ2
QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0U4
MEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0
NUE5NEYxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1
QTk1MDE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RDQ1QTk1MTE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUlu
Zm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFw
ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyog
U2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEzQjAyNUQyMDBGNTEw
M0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5
RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NDM0Miw2ICsyNDM1MCwxMyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJRkQ0NUE5NUMx
NzVENDIwRDAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkQ0NUE5NTkxNzVENDE3MTAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRDQ1QTk1QTE3NUQ0MTcxMDBDMjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTMxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZENDVBOTU0MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTUxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBl
SW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1NjE3NUQzRkI4MDBDMjFF
QzggLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUUxQjFEMDBG
RjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyOUMxNkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3NkNERDJGMjExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0
eU1lbnVMaXN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQ5MTcsMTMgKzI0OTMyLDYgQEAKIAkJ
CQk5NzNEQzYzRjE0NUE5NDA5MDAyODQyQzIgLyogRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0FDREIxMTNDRTg3NUMwMEJCQkUzRiAvKiBFeGNlcHRp
b25Db2RlUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4QUZEQTYwQUY1ODM2
MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4
Nzk4QkExNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTZFQUYzNDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTZFODc5OEJDMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNp
b25SZWN0YW5nbGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4Nzk4QkUxNUY4MUU0QTAwQkZF
NEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZEQjhEMUU1MTZC
MENDOTcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJRkQ3NDhBQkYxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk5QTlDRUY4RDE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMDI0NTc1MTE2Q0VB
QTI3MDAwRTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU2
N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0NERBQjVCMTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCAzYTk0ZWY4OGIzMTcyYmVjMWExNjIw
MjQ1ZmU2NzVlNDM3MjEzNzE2Li40ZmI0OWZlMDg3NjM5NzM1YjIwMmRkYTI2YjZkYTY2NTlmODUy
NzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcApAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNo
YXBlVmFsdWUuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKQEAgLTI2OTksMjQgKzI2OTksMjQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnQKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlOgogICAgICAg
ICAgICAgaWYgKCFzdHlsZS0+c2hhcGVJbnNpZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAg
ICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFw
ZVZhbHVlOjpPdXRzaWRlKQorICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50
eXBlKCkgPT0gU2hhcGVWYWx1ZTo6T3V0c2lkZSkKICAgICAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT3V0c2lkZVNoYXBlKTsK
LSAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lv
blNoYXBlVmFsdWU6OkltYWdlKSB7CisgICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRl
KCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpJbWFnZSkgewogICAgICAgICAgICAgICAgIGlmIChz
dHlsZS0+c2hhcGVJbnNpZGUoKS0+aW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0eWxlLT5zaGFwZUluc2lkZSgpLT5pbWFnZSgpLT5jc3NWYWx1ZSgpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChzdHlsZS0+c2hhcGVJbnNp
ZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKTsKKyAgICAgICAgICAg
IEFTU0VSVChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlNoYXBl
KTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckJhc2ljU2hhcGUoc3R5bGUtPnNoYXBlSW5z
aWRlKCktPnNoYXBlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRz
aWRlOgogICAgICAgICAgICAgaWYgKCFzdHlsZS0+c2hhcGVPdXRzaWRlKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUF1dG8pOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlwZSgpID09
IEV4Y2x1c2lvblNoYXBlVmFsdWU6OkltYWdlKSB7CisgICAgICAgICAgICBpZiAoc3R5bGUtPnNo
YXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6SW1hZ2UpIHsKICAgICAgICAgICAg
ICAgICBpZiAoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5pbWFnZSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5pbWFnZSgpLT5jc3NWYWx1ZSgpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChzdHls
ZS0+c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSk7
CisgICAgICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gU2hh
cGVWYWx1ZTo6U2hhcGUpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yQmFzaWNTaGFwZShz
dHlsZS0+c2hhcGVPdXRzaWRlKCktPnNoYXBlKCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCA2NzJjYTRl
MTk1NTIxOTUzZDkwZmI1ODc0NmJkOWE4YWFiZWJjZDNlLi4zNzJjMWIzZjQ2ODA4MWY1NmM3ZDRl
YTgxNDM3NDM3MzcyYjg2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
aApAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGlu
dGVybmFsbHkgZm9yIGNvdW50ZXIgbmFtZXMgKGFzIG9wcG9zZWQgdG8gY291bnRlciB2YWx1ZXMp
CiAgICAgICAgIENTU19DT1VOVEVSX05BTUUgPSAxMTAsCiAKLSAgICAgICAgLy8gVGhpcyBpcyB1
c2VkIGJ5IHRoZSBDU1MgRXhjbHVzaW9ucyBkcmFmdAorICAgICAgICAvLyBUaGlzIGlzIHVzZWQg
YnkgdGhlIENTUyBTaGFwZXMgZHJhZnQKICAgICAgICAgQ1NTX1NIQVBFID0gMTExLAogCiAgICAg
ICAgIC8vIFVzZWQgYnkgYm9yZGVyIGltYWdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAppbmRleCAwMGYwYmUzYTU3YjM5MjY4YzA5OGNhNWUzYWYz
N2FiYmI3N2RmZGUwLi5jMGMzN2IxYjJhZjAwODAzNTVkNDI4MDRmYzQwYTdlNGQzZjUwZDQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC00
OCw3ICs0OCw3IEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUg
IlNoYXBlVmFsdWUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTkzMywx
MCArMTkzMywxMCBAQCBwdWJsaWM6CiB9OwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi10ZW1w
bGF0ZSA8RXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24p
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8
RXhjbHVzaW9uU2hhcGVWYWx1ZT4pLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoKmluaXRpYWxGdW5j
dGlvbikoKT4KLWNsYXNzIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZSB7Cit0ZW1wbGF0ZSA8
U2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4pLCBT
aGFwZVZhbHVlKiAoKmluaXRpYWxGdW5jdGlvbikoKT4KK2NsYXNzIEFwcGx5UHJvcGVydHlTaGFw
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRl
ckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHls
ZSogc3R5bGUsIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVy
RnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKQEAg
LTE5NDUsMjAgKzE5NDUsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOwogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMjU3
MTogTGF5b3V0IGZvciB0aGUgdmFsdWUgJ291dHNpZGUtc2hhcGUnIGlzIG5vdCB5ZXQgaW1wbGVt
ZW50ZWQKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlT3V0c2lkZVNoYXBlKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBTaGFw
ZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEV4Y2x1c2lv
blNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVWYWx1
ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7
CisgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBlID0gU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0
U2hhcGVWYWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxFeGNsdXNp
b25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKKyAgICAgICAg
ICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKICAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAg
ICAgICAgIH0KIAogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKQogICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3Bl
cnR5RGVmYXVsdEJhc2U8RXhjbHVzaW9uU2hhcGVWYWx1ZSosIGdldHRlckZ1bmN0aW9uLCBQYXNz
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+LCBzZXR0ZXJGdW5jdGlvbiwgRXhjbHVzaW9uU2hh
cGVWYWx1ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgUHJv
cGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U2hhcGVWYWx1
ZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+LCBzZXR0ZXJGdW5jdGlv
biwgU2hhcGVWYWx1ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKICAgICAg
ICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5k
bGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CiAgICAgfQogfTsKQEAgLTIzNDMs
OCArMjM0Myw4IEBAIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXIoKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHls
ZTo6c2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVNYXJnaW4sICZSZW5kZXJTdHls
ZTo6aW5pdGlhbFNoYXBlTWFyZ2luPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZVBhZGRpbmcsIEFwcGx5UHJvcGVydHlMZW5n
dGg8JlJlbmRlclN0eWxlOjpzaGFwZVBhZGRpbmcsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVQYWRk
aW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZVBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkp
OwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCBB
cHBseVByb3BlcnR5RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJl
bmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNp
ZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdFNoYXBlT3V0c2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlPCZSZW5kZXJT
dHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlT3V0c2lkZSwgJlJlbmRl
clN0eWxlOjppbml0aWFsU2hhcGVPdXRzaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgQXBwbHlQcm9wZXJ0
eVNoYXBlPCZSZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJ
bnNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlPjo6Y3JlYXRlSGFuZGxlcigp
KTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGUs
IEFwcGx5UHJvcGVydHlTaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlT3V0c2lkZT46
OmNyZWF0ZUhhbmRsZXIoKSk7CiAjZW5kaWYKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXaGl0ZVNwYWNlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFV2hpdGVTcGFjZSwgJlJlbmRl
clN0eWxlOjp3aGl0ZVNwYWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjpzZXRXaGl0ZVNw
YWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsV2hpdGVTcGFjZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2lkb3dzLCBB
cHBseVByb3BlcnR5QXV0bzxzaG9ydCwgJlJlbmRlclN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHls
ZTo6c2V0V2lkb3dzLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9XaWRvd3MsICZSZW5kZXJTdHlsZTo6
c2V0SGFzQXV0b1dpZG93cz46OmNyZWF0ZUhhbmRsZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggNTI0
NDAwM2NkMWMwOTc3OTY5ZWMwZWUxOWQ1ZDE0NTY1MGExZWYwOS4uZmNhNjI2ZjgwZDY2YTEyYjEy
NmE0YTgxNjU1ZmJmZmM0ZjJjMjM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMTQ0LDEwICsxNDQsMTAg
QEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMo
Y29uc3QgQW5pbWF0aW9uQmFzZSosIENsaXAKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGJsZW5kRnVuYyhj
b25zdCBBbmltYXRpb25CYXNlKiwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogZnJvbSwgRXhjbHVzaW9u
U2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxTaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIFNoYXBlVmFsdWUq
IGZyb20sIFNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgLy8gRklYTUUg
QnVnIDEwMjcyMzogU2hhcGUtaW5zaWRlIHNob3VsZCBiZSBhYmxlIHRvIGFuaW1hdGUgYSB2YWx1
ZSBvZiAnb3V0c2lkZS1zaGFwZScgd2hlbiBzaGFwZS1vdXRzaWRlIGlzIHNldCB0byBhIEJhc2lj
U2hhcGUKLSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBl
IHx8IHRvLT50eXBlKCkgIT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpCisgICAgaWYgKGZy
b20tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IFNoYXBlVmFs
dWU6OlNoYXBlKQogICAgICAgICByZXR1cm4gdG87CiAKICAgICBjb25zdCBCYXNpY1NoYXBlKiBm
cm9tU2hhcGUgPSBmcm9tLT5zaGFwZSgpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0
aW9uQmFzZSosIEV4CiAgICAgaWYgKCFmcm9tU2hhcGUtPmNhbkJsZW5kKHRvU2hhcGUpKQogICAg
ICAgICByZXR1cm4gdG87CiAKLSAgICByZXR1cm4gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRl
U2hhcGVWYWx1ZSh0b1NoYXBlLT5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7CisgICAgcmV0
dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUodG9TaGFwZS0+YmxlbmQoZnJvbVNoYXBl
LCBwcm9ncmVzcykpOwogfQogI2VuZGlmCiAKQEAgLTQwNSwxMCArNDA1LDEwIEBAIHB1YmxpYzoK
IH07CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLWNsYXNzIFByb3BlcnR5V3JhcHBlckV4Y2x1
c2lvblNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8RXhjbHVzaW9uU2hh
cGVWYWx1ZT4geworY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPiB7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFw
cGVyRXhjbHVzaW9uU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBFeGNsdXNpb25TaGFwZVZhbHVl
KiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyKShQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KSkKLSAgICAgICAgOiBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0
dGVyKQorICAgIFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcCwgU2hhcGVW
YWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPikpCisgICAgICAgIDogUmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKICAgICB7CiAg
ICAgfQogfTsKQEAgLTExNjUsNyArMTE2NSw3IEBAIHZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246
OmVuc3VyZVByb3BlcnR5TWFwKCkKICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoLCAmUmVuZGVy
U3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OnNldENsaXBQYXRoKSk7CiAKICNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKLSAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXJFeGNsdXNpb25TaGFwZShDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCAmUmVu
ZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlKSk7Cisg
ICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NT
UHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJl
bmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSkpOwogI2VuZGlmCiAKICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJT
dHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwg
JlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRlMGVmN2E5OGJhYTY4MTA5YTg4OTE5NThhYjljOTAxNTYzYzg3Y2EuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvbkludGVydmFsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
LSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgi
Ci0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0cnVjdCBJbnRlcnZhbFgxQ29tcGFyYXRvciB7Ci0gICAgYm9vbCBvcGVyYXRvcigpIChjb25z
dCBFeGNsdXNpb25JbnRlcnZhbCYgaTEsIGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpMikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpMS54MSA8IGkyLngxOwotICAgIH0KLX07Ci0KLWJv
b2wgRXhjbHVzaW9uSW50ZXJ2YWw6OmludGVyc2VjdChjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYg
aSwgRXhjbHVzaW9uSW50ZXJ2YWwmIHJ2KSBjb25zdAotewotICAgIGlmICh4MiA8IGkueDEgfHwg
eDEgPiBpLngyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcnYueDEgPSBzdGQ6Om1heCh4
MSwgaS54MSk7Ci0gICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54Mik7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgc29ydEV4Y2x1c2lvbkludGVydmFscyhWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JiB2KQotewotICAgIHN0ZDo6c29ydCh2LmJlZ2luKCksIHYuZW5kKCksIEludGVydmFs
WDFDb21wYXJhdG9yKCkpOwotfQotCi12b2lkIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0
IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JiB2MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcnYpCi17Ci0gICAgaWYgKCF2
MS5zaXplKCkpCi0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgpKTsK
LSAgICBlbHNlIGlmICghdjIuc2l6ZSgpKQotICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdp
bigpLCB2MS5lbmQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4gdih2MS5zaXplKCkgKyB2Mi5zaXplKCkpOwotICAgICAgICBFeGNsdXNpb25JbnRlcnZh
bCogaW50ZXJ2YWwgPSAwOwotCi0gICAgICAgIHN0ZDo6bWVyZ2UodjEuYmVnaW4oKSwgdjEuZW5k
KCksIHYyLmJlZ2luKCksIHYyLmVuZCgpLCB2LmJlZ2luKCksIEludGVydmFsWDFDb21wYXJhdG9y
KCkpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgewot
ICAgICAgICAgICAgaWYgKCFpbnRlcnZhbCkKLSAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2
W2ldOwotICAgICAgICAgICAgZWxzZSBpZiAodltpXS54MSA+PSBpbnRlcnZhbC0+eDEgJiYgdltp
XS54MSA8PSBpbnRlcnZhbC0+eDIpIC8vIEZJWE1FOiAxc3QgPD0gdGVzdCBub3QgbmVlZGVkPwot
ICAgICAgICAgICAgICAgIGludGVydmFsLT54MiA9IHN0ZDo6bWF4KGludGVydmFsLT54Miwgdltp
XS54Mik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBydi5hcHBlbmQoKmlu
dGVydmFsKTsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2W2ldOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGludGVydmFsKQotICAgICAgICAgICAgcnYuYXBw
ZW5kKCppbnRlcnZhbCk7Ci0gICAgfQotfQotCi12b2lkIGludGVyc2VjdEV4Y2x1c2lvbkludGVy
dmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYgdjIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJ2KQotewot
ICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7Ci0gICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNp
emUoKTsKLQotICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsOwotICAgIGJvb2wgb3ZlcmxhcCA9IGZhbHNl
OwotICAgIHNpemVfdCBpMSA9IDA7Ci0gICAgc2l6ZV90IGkyID0gMDsKLQotICAgIHdoaWxlIChp
MSA8IHYxU2l6ZSAmJiBpMiA8IHYyU2l6ZSkgewotICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCB2
MTI7Ci0gICAgICAgIGlmICh2MVtpMV0uaW50ZXJzZWN0KHYyW2kyXSwgdjEyKSkgewotICAgICAg
ICAgICAgaWYgKCFvdmVybGFwIHx8ICF2MTIuaW50ZXJzZWN0KGludGVydmFsLCBpbnRlcnZhbCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCkKLSAgICAgICAgICAgICAgICAgICAgcnYu
YXBwZW5kKGludGVydmFsKTsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbCA9IHYxMjsKLSAgICAg
ICAgICAgICAgICBvdmVybGFwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICh2MVtpMV0ueDIgPCB2MltpMl0ueDIpCi0gICAgICAgICAgICAgICAgaTErKzsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpMisrOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKG92ZXJsYXApCi0gICAgICAgICAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsK
LSAgICAgICAgICAgIG92ZXJsYXAgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICh2MVtpMV0ueDEg
PCB2MltpMl0ueDEpCi0gICAgICAgICAgICAgICAgaTErKzsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBpMisrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG92ZXJsYXAp
Ci0gICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci19Ci0KLXZvaWQgc3VidHJhY3RFeGNsdXNp
b25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjEsIGNvbnN0IFZl
Y3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiBy
dikKLXsKLSAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOwotICAgIHNpemVfdCB2MlNpemUg
PSB2Mi5zaXplKCk7Ci0KLSAgICBpZiAoIXYxU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCF2MlNpemUpCi0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgp
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgc2l6ZV90IGkxID0gMCwgaTIgPSAwOwotICAgICAgICBy
di5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7Ci0KLSAgICAgICAgd2hpbGUgKGkx
IDwgcnYuc2l6ZSgpICYmIGkyIDwgdjJTaXplKSB7Ci0gICAgICAgICAgICBFeGNsdXNpb25JbnRl
cnZhbCYgaW50ZXJ2YWwxID0gcnZbaTFdOwotICAgICAgICAgICAgY29uc3QgRXhjbHVzaW9uSW50
ZXJ2YWwmIGludGVydmFsMiA9IHYyW2kyXTsKLQotICAgICAgICAgICAgaWYgKGludGVydmFsMi54
MSA8PSBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKLSAgICAg
ICAgICAgICAgICBydi5yZW1vdmUoaTEpOwotICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwy
LngyIDwgaW50ZXJ2YWwxLngxKQotICAgICAgICAgICAgICAgIGkyICs9IDE7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChpbnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDIpCi0gICAgICAgICAgICAgICAg
aTEgKz0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGludGVydmFsMS54
MSAmJiBpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDIpIHsKLSAgICAgICAgICAgICAgICBydi5p
bnNlcnQoaTEsIEV4Y2x1c2lvbkludGVydmFsKGludGVydmFsMS54MSwgaW50ZXJ2YWwyLngxKSk7
Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOwotICAgICAgICAg
ICAgICAgIGkyICs9IDE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGludGVydmFsMi54MSA8PSBp
bnRlcnZhbDEueDEpIHsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDEgPSBpbnRlcnZhbDIu
eDI7Ci0gICAgICAgICAgICAgICAgaTIgKz0gMTsKLSAgICAgICAgICAgIH0gZWxzZSAgeyAvLyAo
aW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKLSAgICAgICAgICAgICAgICBpbnRlcnZhbDEu
eDIgPSBpbnRlcnZhbDIueDE7Ci0gICAgICAgICAgICAgICAgaTEgKz0gMTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWQzMWZlYjE4MTEzZGU4YzFlNDM0MWUwMTAzNzA4Yjc3NGNhMzUxZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAq
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvbkludGVydmFsX2gKLSNkZWZpbmUgRXhj
bHVzaW9uSW50ZXJ2YWxfaAotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0cnVjdCBFeGNsdXNpb25JbnRlcnZhbCB7Ci1wdWJsaWM6Ci0gICAgZmxv
YXQgeDE7Ci0gICAgZmxvYXQgeDI7Ci0KLSAgICBFeGNsdXNpb25JbnRlcnZhbChmbG9hdCB4MSA9
IDAsIGZsb2F0IHgyID0gMCkKLSAgICAgICAgOiB4MSh4MSkKLSAgICAgICAgLCB4Mih4MikKLSAg
ICB7Ci0gICAgfQotCi0gICAgYm9vbCBpbnRlcnNlY3QoY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwm
LCBFeGNsdXNpb25JbnRlcnZhbCYpIGNvbnN0OwotfTsKLQotdm9pZCBzb3J0RXhjbHVzaW9uSW50
ZXJ2YWxzKFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKTsKLXZvaWQgbWVyZ2VFeGNsdXNpb25J
bnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4mLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jik7Ci12b2lkIGlu
dGVyc2VjdEV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4mKTsKLXZvaWQgc3VidHJhY3RFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBWZWN0
b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEV4Y2x1c2lvbkludGVydmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25Qb2x5Z29uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlmOTc4
ZjMwYjU4ZTIxNGI4NGE5ZDNkMWY4ZDQwODdhZTBiMmEyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uUG9seWdvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCi0KLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRWRn
ZUludGVyc2VjdGlvblR5cGUgewotICAgIE5vcm1hbCwKLSAgICBWZXJ0ZXhNaW5ZLAotICAgIFZl
cnRleE1heFksCi0gICAgVmVydGV4WUJvdGgKLX07Ci0KLXN0cnVjdCBFZGdlSW50ZXJzZWN0aW9u
IHsKLSAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlOwotICAgIEZsb2F0UG9pbnQgcG9p
bnQ7Ci0gICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUg
ZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuICgocG9p
bnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgo
dmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGlzUmVmbGV4VmVydGV4KGNvbnN0IEZsb2F0UG9pbnQm
IHByZXZWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYg
bmV4dFZlcnRleCkKLXsKLSAgICByZXR1cm4gbGVmdFNpZGUocHJldlZlcnRleCwgbmV4dFZlcnRl
eCwgdmVydGV4KSA8IDA7Ci19Ci0KLXN0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0
aW9uJiByZXN1bHQpCi17Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICplZGdl
UG9pbnRlcjsKLQotICAgIGlmIChlZGdlLm1pblkoKSA+IHkgfHwgZWRnZS5tYXhZKCkgPCB5KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0g
ZWRnZS52ZXJ0ZXgxKCk7Ci0gICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVy
dGV4MigpOwotICAgIGZsb2F0IGR5ID0gdmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKTsKLQotICAg
IGZsb2F0IGludGVyc2VjdGlvblg7Ci0gICAgRWRnZUludGVyc2VjdGlvblR5cGUgaW50ZXJzZWN0
aW9uVHlwZTsKLQotICAgIGlmICghZHkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZl
cnRleFlCb3RoOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gZWRnZS5taW5YKCk7Ci0gICAgfSBl
bHNlIGlmICh5ID09IGVkZ2UubWluWSgpKSB7Ci0gICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBW
ZXJ0ZXhNaW5ZOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpIDwgdmVydGV4
Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKLSAgICB9IGVsc2UgaWYgKHkgPT0g
ZWRnZS5tYXhZKCkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1heFk7Ci0g
ICAgICAgIGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPiB2ZXJ0ZXgyLnkoKSkgPyB2ZXJ0
ZXgxLngoKSA6IHZlcnRleDIueCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludGVyc2VjdGlv
blR5cGUgPSBOb3JtYWw7Ci0gICAgICAgIGludGVyc2VjdGlvblggPSAoKHkgLSB2ZXJ0ZXgxLnko
KSkgKiAodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgLyBkeSkgKyB2ZXJ0ZXgxLngoKTsKLSAg
ICB9Ci0KLSAgICByZXN1bHQuZWRnZSA9IGVkZ2VQb2ludGVyOwotICAgIHJlc3VsdC50eXBlID0g
aW50ZXJzZWN0aW9uVHlwZTsKLSAgICByZXN1bHQucG9pbnQuc2V0KGludGVyc2VjdGlvblgsIHkp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIGlud2Fy
ZEVkZ2VOb3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKLXsKLSAgICBGbG9hdFNp
emUgZWRnZURlbHRhID0gZWRnZS52ZXJ0ZXgyKCkgLSBlZGdlLnZlcnRleDEoKTsKLSAgICBpZiAo
IWVkZ2VEZWx0YS53aWR0aCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKChlZGdlRGVsdGEu
aGVpZ2h0KCkgPiAwID8gLTEgOiAxKSwgMCk7Ci0gICAgaWYgKCFlZGdlRGVsdGEuaGVpZ2h0KCkp
Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUoMCwgKGVkZ2VEZWx0YS53aWR0aCgpID4gMCA/IDEg
OiAtMSkpOwotICAgIGZsb2F0IGVkZ2VMZW5ndGggPSBlZGdlRGVsdGEuZGlhZ29uYWxMZW5ndGgo
KTsKLSAgICByZXR1cm4gRmxvYXRTaXplKC1lZGdlRGVsdGEuaGVpZ2h0KCkgLyBlZGdlTGVuZ3Ro
LCBlZGdlRGVsdGEud2lkdGgoKSAvIGVkZ2VMZW5ndGgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZs
b2F0U2l6ZSBvdXR3YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlKQot
ewotICAgIHJldHVybiAtaW53YXJkRWRnZU5vcm1hbChlZGdlKTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGVuZEFyYyhWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzLCBjb25zdCBGbG9h
dFBvaW50JiBhcmNDZW50ZXIsIGZsb2F0IGFyY1JhZGl1cywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRBcmNWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZEFyY1ZlcnRleCwgYm9vbCBwYWRkaW5n
KQotewotICAgIGZsb2F0IHN0YXJ0QW5nbGUgPSBhdGFuMihzdGFydEFyY1ZlcnRleC55KCkgLSBh
cmNDZW50ZXIueSgpLCBzdGFydEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKLSAgICBm
bG9hdCBlbmRBbmdsZSA9IGF0YW4yKGVuZEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgpLCBl
bmRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7Ci0gICAgY29uc3QgZmxvYXQgdHdvUEkg
PSBwaUZsb2F0ICogMjsKLSAgICBpZiAoc3RhcnRBbmdsZSA8IDApCi0gICAgICAgIHN0YXJ0QW5n
bGUgKz0gdHdvUEk7Ci0gICAgaWYgKGVuZEFuZ2xlIDwgMCkKLSAgICAgICAgZW5kQW5nbGUgKz0g
dHdvUEk7Ci0gICAgZmxvYXQgYW5nbGUgPSAoc3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSA/IChzdGFy
dEFuZ2xlIC0gZW5kQW5nbGUpIDogKHN0YXJ0QW5nbGUgKyB0d29QSSAtIGVuZEFuZ2xlKTsKLSAg
ICBjb25zdCBmbG9hdCBhcmNTZWdtZW50Q291bnQgPSA2OyAvLyBBbiBldmVuIG51bWJlciBzbyB0
aGF0IG9uZSBhcmMgdmVydGV4IHdpbGwgYmUgZWFjdGx5IGFyY1JhZGl1cyBmcm9tIGFyY0NlbnRl
ci4KLSAgICBmbG9hdCBhcmNTZWdtZW50QW5nbGUgPSAgKChwYWRkaW5nKSA/IC1hbmdsZSA6IHR3
b1BJIC0gYW5nbGUpIC8gYXJjU2VnbWVudENvdW50OwotCi0gICAgdmVydGljZXMuYXBwZW5kKHN0
YXJ0QXJjVmVydGV4KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJjU2VnbWVudENv
dW50OyArK2kpIHsKLSAgICAgICAgZmxvYXQgYW5nbGUgPSBzdGFydEFuZ2xlICsgYXJjU2VnbWVu
dEFuZ2xlICogaTsKLSAgICAgICAgdmVydGljZXMuYXBwZW5kKGFyY0NlbnRlciArIEZsb2F0UG9p
bnQoY29zKGFuZ2xlKSAqIGFyY1JhZGl1cywgc2luKGFuZ2xlKSAqIGFyY1JhZGl1cykpOwotICAg
IH0KLSAgICB2ZXJ0aWNlcy5hcHBlbmQoZW5kQXJjVmVydGV4KTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2
ZXJ0aWNlcykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVydGljZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIHZlcnRpY2VzW2ldLnNldChMYXlvdXRVbml0KHZlcnRpY2VzW2ldLngo
KSkudG9GbG9hdCgpLCBMYXlvdXRVbml0KHZlcnRpY2VzW2ldLnkoKSkudG9GbG9hdCgpKTsKLX0K
LQotc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBlUGFk
ZGluZ0JvdW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHBhZGRpbmcsIFdp
bmRSdWxlIGZpbGxSdWxlKQotewotICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBwYWRk
ZWRWZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKSk7Ci0gICAgRmxv
YXRQb2ludCBpbnRlcnNlY3Rpb247Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9s
eWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25F
ZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRnZUF0KGkpOwotICAgICAgICBjb25zdCBGbG9hdFBv
bHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpOwotICAgICAgICBP
ZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRnZSwgaW53YXJkRWRnZU5vcm1h
bCh0aGlzRWRnZSkgKiBwYWRkaW5nKTsKLSAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9m
ZnNldEVkZ2UocHJldkVkZ2UsIGlud2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogcGFkZGluZyk7
Ci0KLSAgICAgICAgaWYgKHByZXZPZmZzZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRn
ZSwgaW50ZXJzZWN0aW9uKSkKLSAgICAgICAgICAgIHBhZGRlZFZlcnRpY2VzLT5hcHBlbmQoaW50
ZXJzZWN0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoaXNSZWZsZXhWZXJ0ZXgocHJldkVkZ2UudmVy
dGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDIoKSkpCi0gICAgICAg
ICAgICBhcHBlbmRBcmMoKnBhZGRlZFZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHBhZGRp
bmcsIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4MSgpLCB0
cnVlKTsKLSAgICB9Ci0KLSAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCpwYWRkZWRW
ZXJ0aWNlcyk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24ocGFkZGVkVmVy
dGljZXMucmVsZWFzZSgpLCBmaWxsUnVsZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIFBhc3NPd25Q
dHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMoY29uc3QgRmxvYXRQb2x5
Z29uJiBwb2x5Z29uLCBmbG9hdCBtYXJnaW4sIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIE93
blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtYXJnaW5WZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBW
ZWN0b3I8RmxvYXRQb2ludD4oKSk7Ci0gICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb247Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkg
ewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRn
ZUF0KGkpOwotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNF
ZGdlLnByZXZpb3VzRWRnZSgpOwotICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0
RWRnZSh0aGlzRWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogbWFyZ2luKTsKLSAg
ICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9mZnNldEVkZ2UocHJldkVkZ2UsIG91dHdhcmRF
ZGdlTm9ybWFsKHByZXZFZGdlKSAqIG1hcmdpbik7Ci0KLSAgICAgICAgaWYgKHByZXZPZmZzZXRF
ZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9uKSkKLSAgICAgICAg
ICAgIG1hcmdpblZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYXBwZW5kQXJjKCptYXJnaW5WZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgp
LCBtYXJnaW4sIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4
MSgpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgq
bWFyZ2luVmVydGljZXMpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKG1h
cmdpblZlcnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKLX0KLQotY29uc3QgRmxvYXRQb2x5
Z29uJiBFeGNsdXNpb25Qb2x5Z29uOjpzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAotewotICAg
IEFTU0VSVChzaGFwZVBhZGRpbmcoKSA+PSAwKTsKLSAgICBpZiAoIXNoYXBlUGFkZGluZygpKQot
ICAgICAgICByZXR1cm4gbV9wb2x5Z29uOwotCi0gICAgaWYgKCFtX3BhZGRpbmdCb3VuZHMpCi0g
ICAgICAgIG1fcGFkZGluZ0JvdW5kcyA9IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMobV9wb2x5
Z29uLCBzaGFwZVBhZGRpbmcoKSwgbV9wb2x5Z29uLmZpbGxSdWxlKCkpOwotCi0gICAgcmV0dXJu
ICptX3BhZGRpbmdCb3VuZHM7Ci19Ci0KLWNvbnN0IEZsb2F0UG9seWdvbiYgRXhjbHVzaW9uUG9s
eWdvbjo6c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAotewotICAgIEFTU0VSVChzaGFwZU1hcmdp
bigpID49IDApOwotICAgIGlmICghc2hhcGVNYXJnaW4oKSkKLSAgICAgICAgcmV0dXJuIG1fcG9s
eWdvbjsKLQotICAgIGlmICghbV9tYXJnaW5Cb3VuZHMpCi0gICAgICAgIG1fbWFyZ2luQm91bmRz
ID0gY29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKG1fcG9seWdvbiwgc2hhcGVNYXJnaW4oKSwgbV9w
b2x5Z29uLmZpbGxSdWxlKCkpOwotCi0gICAgcmV0dXJuICptX21hcmdpbkJvdW5kczsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVk
Z2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbiwgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgRmxv
YXRQb2ludCYgdGhpc1ZlcnRleCwgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKLXsKLSAgICBpZiAo
aW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWluWSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBW
ZXJ0ZXhNYXhZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoaW50ZXJzZWN0
aW9uLmVkZ2UgJiYgaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7Ci0gICAgY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uID0gKihpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKLSAg
ICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICooaW50ZXJzZWN0aW9uLmVkZ2Up
OwotCi0gICAgaWYgKChpbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZICYmICh0aGlzRWRn
ZS52ZXJ0ZXgxKCkueSgpIDwgdGhpc0VkZ2UudmVydGV4MigpLnkoKSkpCi0gICAgICAgIHx8IChp
bnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgp
ID4gdGhpc0VkZ2UudmVydGV4MigpLnkoKSkpKSB7Ci0gICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5
Z29uLnZlcnRleEF0KHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpLnZlcnRleEluZGV4MSgpKTsKLSAg
ICAgICAgdGhpc1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgx
KCkpOwotICAgICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0
ZXhJbmRleDIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24u
dmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkpOwotICAgICAgICB0aGlzVmVydGV4ID0g
cG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDIoKSk7Ci0gICAgICAgIG5leHRW
ZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLm5leHRFZGdlKCkudmVydGV4SW5kZXgy
KCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
YXBwZW5kSW50ZXJ2YWxYKGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+JiByZXN1bHQpCi17Ci0gICAgaWYgKCFpbnNpZGUpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoRXhjbHVzaW9uSW50ZXJ2YWwoeCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0W3Jlc3Vs
dC5zaXplKCkgLSAxXS54MiA9IHg7Ci0KLSAgICByZXR1cm4gIWluc2lkZTsKLX0KLQotc3RhdGlj
IGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGlu
dGVyc2VjdGlvbjEsIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCi17Ci0g
ICAgZmxvYXQgeDEgPSBpbnRlcnNlY3Rpb24xLnBvaW50LngoKTsKLSAgICBmbG9hdCB4MiA9IGlu
dGVyc2VjdGlvbjIucG9pbnQueCgpOwotICAgIHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0
aW9uMS50eXBlIDwgaW50ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4MjsKLX0KLQotc3RhdGljIHZv
aWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxv
YXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKLXsK
LSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwotICAgIGlmICghcG9s
eWdvbi5vdmVybGFwcGluZ0VkZ2VzKHksIHksIGVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgVmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7Ci0gICAgRWRnZUludGVy
c2VjdGlvbiBpbnRlcnNlY3Rpb247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2Vz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tp
XSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkK
LSAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgaWYgKGludGVyc2VjdGlvbnMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc3RkOjpzb3J0KGludGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50ZXJzZWN0aW9ucy5lbmQoKSwg
V2ViQ29yZTo6Y29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKTsKLQotICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKLSAgICBpbnQgd2luZENvdW50ID0gMDsKLSAgICBib29sIGluc2lkZSA9IGZhbHNlOwot
Ci0gICAgd2hpbGUgKGluZGV4IDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgY29u
c3QgRWRnZUludGVyc2VjdGlvbiYgdGhpc0ludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5k
ZXhdOwotICAgICAgICBpZiAoaW5kZXggKyAxIDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIG5leHRJbnRlcnNlY3Rpb24gPSBpbnRl
cnNlY3Rpb25zW2luZGV4ICsgMV07Ci0gICAgICAgICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24u
cG9pbnQueCgpID09IG5leHRJbnRlcnNlY3Rpb24ucG9pbnQueCgpKSAmJiAodGhpc0ludGVyc2Vj
dGlvbi50eXBlID09IFZlcnRleE1pblkgfHwgdGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRl
eE1heFkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBu
ZXh0SW50ZXJzZWN0aW9uLnR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwYWly
cyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNYXhZLFZlcnRleE1heFkg
YW5kIFZlcnRleE1pblksVmVydGV4TWluWS4KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0g
MjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBSZXBs
YWNlIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJlIFZlcnRleE1pblksVmVy
dGV4TWF4WSBvciBWZXJ0ZXhNYXhZLFZlcnRleE1pblkgd2l0aCBvbmUgaW50ZXJzZWN0aW9uLgot
ICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rpb24uZWRnZTsK
LSAgICAgICAgYm9vbCBldmVuT2RkQ3Jvc3NpbmcgPSAhd2luZENvdW50OwotCi0gICAgICAgIGlm
IChwb2x5Z29uLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7Ci0gICAgICAgICAgICB3aW5k
Q291bnQgKz0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgp
KSA/IDEgOiAtMTsKLSAgICAgICAgICAgIGV2ZW5PZGRDcm9zc2luZyA9IGV2ZW5PZGRDcm9zc2lu
ZyB8fCAhd2luZENvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV2ZW5PZGRDcm9zc2lu
ZykgewotICAgICAgICAgICAgYm9vbCBlZGdlQ3Jvc3NpbmcgPSB0aGlzSW50ZXJzZWN0aW9uLnR5
cGUgPT0gTm9ybWFsOwotICAgICAgICAgICAgaWYgKCFlZGdlQ3Jvc3NpbmcpIHsKLSAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50IHByZXZWZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCB0aGlzVmVydGV4OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV4dFZlcnRleDsKLQot
ICAgICAgICAgICAgICAgIGlmIChnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyh0aGlzSW50
ZXJzZWN0aW9uLCBwcmV2VmVydGV4LCB0aGlzVmVydGV4LCBuZXh0VmVydGV4KSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAobmV4dFZlcnRleC55KCkgPT0geSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gcHJldlZlcnRleC55KCkgPiB5IDogcHJl
dlZlcnRleC55KCkgPCB5OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmV2VmVydGV4
LnkoKSA9PSB5KQotICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWlu
WSkgPyBuZXh0VmVydGV4LnkoKSA+IHkgOiBuZXh0VmVydGV4LnkoKSA8IHk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVk
Z2VDcm9zc2luZykKLSAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhp
c0ludGVyc2VjdGlvbi5wb2ludC54KCksIGluc2lkZSwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0g
ICAgICAgICsraW5kZXg7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb21wdXRlT3ZlcmxhcHBp
bmdFZGdlWFByb2plY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeTEs
IGZsb2F0IHkyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCi17Ci0gICAgVmVj
dG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBpZiAoIXBvbHlnb24ub3Zl
cmxhcHBpbmdFZGdlcyh5MSwgeTIsIGVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRWRn
ZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGVkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVk
Z2UgPSBlZGdlc1tpXTsKLSAgICAgICAgZmxvYXQgeDE7Ci0gICAgICAgIGZsb2F0IHgyOwotCi0g
ICAgICAgIGlmIChlZGdlLT5taW5ZKCkgPCB5MSkgewotICAgICAgICAgICAgY29tcHV0ZVhJbnRl
cnNlY3Rpb24oZWRnZSwgeTEsIGludGVyc2VjdGlvbik7Ci0gICAgICAgICAgICB4MSA9IGludGVy
c2VjdGlvbi5wb2ludC54KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeDEgPSAoZWRn
ZS0+dmVydGV4MSgpLnkoKSA8IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgp
LngoKSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7Ci0KLSAgICAgICAgaWYgKGVkZ2UtPm1heFkoKSA+
IHkyKSB7Ci0gICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MiwgaW50ZXJz
ZWN0aW9uKTsKLSAgICAgICAgICAgIHgyID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICB4MiA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpID4gZWRnZS0+
dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngo
KTsKLQotICAgICAgICBpZiAoeDEgPiB4MikKLSAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIp
OwotCi0gICAgICAgIGlmICh4MiA+IHgxKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNs
dXNpb25JbnRlcnZhbCh4MSwgeDIpKTsKLSAgICB9Ci0KLSAgICBzb3J0RXhjbHVzaW9uSW50ZXJ2
YWxzKHJlc3VsdCk7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRl
cnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5
Z29uID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKLSAgICBpZiAocG9seWdvbi5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBmbG9hdCB5
MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbklu
dGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2Vj
dGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRl
cnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKLQotICAgIFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOwotICAgIG1lcmdlRXhjbHVzaW9u
SW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRlcnZhbHMpOwot
Ci0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOwotICAgIGNvbXB1
dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2
YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7
Ci0gICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2
YWxzLCBleGNsdWRlZEludGVydmFscyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXhjbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRXhjbHVzaW9uSW50ZXJ2
YWwgaW50ZXJ2YWwgPSBleGNsdWRlZEludGVydmFsc1tpXTsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNv
bnN0Ci17Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91
bmRzKCk7Ci0gICAgaWYgKHBvbHlnb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9n
aWNhbEhlaWdodDsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxz
LCB5MlhJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0
cnVlLCB5MVhJbnRlcnZhbHMpOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5
MiwgZmFsc2UsIHkyWEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
IGNvbW1vbkludGVydmFsczsKLSAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50
ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRn
ZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOwotCi0gICAgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiBpbmNsdWRlZEludGVydmFsczsKLSAgICBzdWJ0cmFjdEV4
Y2x1c2lvbkludGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVk
SW50ZXJ2YWxzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVy
dmFscy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9
IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOwotICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50
KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBi
b29sIGZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MSwgdW5zaWduZWQg
b2Zmc2V0RWRnZUluZGV4MikKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+
IGVkZ2VzOwotICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHJlY3QueSgpLCByZWN0
Lm1heFkoKSwgZWRnZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBv
bHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07Ci0gICAgICAgIGlmIChlZGdlLT5lZGdlSW5kZXgo
KSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJbmRleCgpICE9IG9mZnNldEVkZ2VJ
bmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
YWJvdmVPclRvVGhlTGVmdChjb25zdCBGbG9hdFJlY3QmIHIxLCBjb25zdCBGbG9hdFJlY3QmIHIy
KQotewotICAgIGlmIChyMS55KCkgPCByMi55KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmIChyMS55KCkgPT0gcjIueSgpKQotICAgICAgICByZXR1cm4gcjEueCgpIDwgcjIueCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFeGNsdXNpb25Qb2x5Z29uOjpmaXJzdEluY2x1
ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBj
b25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1
bHQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxUb3A7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplLmhlaWdodCgpOwotICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50
ZXJ2YWxTaXplLndpZHRoKCk7Ci0KLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBz
aGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBjb25zdCBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBw
b2x5Z29uLmJvdW5kaW5nQm94KCk7Ci0gICAgaWYgKG1pbkludGVydmFsV2lkdGggPiBib3VuZGlu
Z0JveC53aWR0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBtaW5ZID0g
c3RkOjptYXgoYm91bmRpbmdCb3gueSgpLCBtaW5JbnRlcnZhbFRvcCk7Ci0gICAgZmxvYXQgbWF4
WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKLQotICAgIGlmIChtYXhZID4gYm91bmRpbmdC
b3gubWF4WSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Y29uc3QgRmxv
YXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwotICAgIHBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhtaW5J
bnRlcnZhbFRvcCwgYm91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7Ci0KLSAgICBmbG9hdCBkeCA9
IG1pbkludGVydmFsV2lkdGggLyAyOwotICAgIGZsb2F0IGR5ID0gbWluSW50ZXJ2YWxIZWlnaHQg
LyAyOwotICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZXM7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOwotICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXgxKCk7Ci0gICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKLSAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOwotICAgICAgICBWZWN0
b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VCdWZmZXI7Ci0KLSAgICAgICAgaWYgKHZl
cnRleDIueSgpID4gdmVydGV4MS55KCkgPyB2ZXJ0ZXgyLngoKSA+PSB2ZXJ0ZXgxLngoKSA6IHZl
cnRleDEueCgpID49IHZlcnRleDIueCgpKSB7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVy
LmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgsIC1keSkpKTsKLSAg
ICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2Us
IEZsb2F0U2l6ZSgtZHgsIGR5KSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb2Zm
c2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKGR4
LCBkeSkpKTsKLSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIC1keSkpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChpc1JlZmxleFZlcnRleCh2ZXJ0ZXgwLCB2ZXJ0ZXgxLCB2ZXJ0ZXgyKSkgewotICAgICAg
ICAgICAgaWYgKHZlcnRleDIueCgpIDw9IHZlcnRleDEueCgpICYmIHZlcnRleDAueCgpIDw9IHZl
cnRleDEueCgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNl
dFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZShkeCwgLWR5KSwgRmxvYXRTaXplKGR4LCBk
eSkpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueCgpID49IHZlcnRleDEueCgpICYm
IHZlcnRleDAueCgpID49IHZlcnRleDEueCgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VC
dWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1k
eSksIEZsb2F0U2l6ZSgtZHgsIGR5KSkpOwotICAgICAgICAgICAgaWYgKHZlcnRleDIueSgpIDw9
IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpIDw9IHZlcnRleDEueSgpKQotICAgICAgICAgICAg
ICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZs
b2F0U2l6ZSgtZHgsIGR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHZlcnRleDIueSgpID49IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpID49IHZlcnRleDEu
eSgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0U2l6ZShkeCwgLWR5KSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG9mZnNldEVk
Z2VCdWZmZXIuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBpZiAob2Zmc2V0RWRnZUJ1ZmZlcltq
XS5tYXhZKCkgPj0gbWluWSkKLSAgICAgICAgICAgICAgICBvZmZzZXRFZGdlcy5hcHBlbmQob2Zm
c2V0RWRnZUJ1ZmZlcltqXSk7Ci0gICAgfQotCi0gICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNl
dFBvbHlnb25FZGdlKHBvbHlnb24sIG1pbkludGVydmFsVG9wLCBGbG9hdFNpemUoMCwgZHkpKSk7
Ci0KLSAgICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uOwotICAgIEZsb2F0UmVj
dCBmaXJzdEZpdFJlY3Q7Ci0gICAgYm9vbCBmaXJzdEZpdEZvdW5kID0gZmFsc2U7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpOyAr
K2opIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlc1tpXS5pbnRlcnNlY3Rpb24ob2Zmc2V0
RWRnZXNbal0sIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKSkgewotICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbihvZmZzZXRFZGdlc0ludGVyc2VjdGlv
bi54KCkgLSBkeCwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueSgpIC0gZHkpOwotICAgICAgICAg
ICAgICAgIEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QocG90ZW50aWFsRmlyc3RGaXRM
b2NhdGlvbiwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKChv
ZmZzZXRFZGdlc1tpXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCi0gICAg
ICAgICAgICAgICAgICAgIHx8IG9mZnNldEVkZ2VzW2pdLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdv
bkVkZ2U6OkxpbmVUb3AKLSAgICAgICAgICAgICAgICAgICAgfHwgcG90ZW50aWFsRmlyc3RGaXRM
b2NhdGlvbi55KCkgPj0gbWluSW50ZXJ2YWxUb3ApCi0gICAgICAgICAgICAgICAgICAgICYmICgh
Zmlyc3RGaXRGb3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVudGlhbEZpcnN0Rml0UmVjdCwg
Zmlyc3RGaXRSZWN0KSkKLSAgICAgICAgICAgICAgICAgICAgJiYgcG9seWdvbi5jb250YWlucyhv
ZmZzZXRFZGdlc0ludGVyc2VjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRS
ZWN0SW5Qb2x5Z29uKHBvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRnZXNb
aV0uZWRnZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkgewotICAgICAgICAg
ICAgICAgICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZmly
c3RGaXRSZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmaXJzdEZpdEZvdW5kKQot
ICAgICAgICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGZpcnN0Rml0UmVjdC55KCkpOwotICAg
IHJldHVybiBmaXJzdEZpdEZvdW5kOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzg4NTUzYWIyMWQwNjQ0MWJlYmEzMDE5YWMwYjlhNTI4NmE1ZmVlMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAq
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblBvbHlnb25faAotI2RlZmluZSBFeGNs
dXNpb25Qb2x5Z29uX2gKLQotI2luY2x1ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgiCi0jaW5jbHVk
ZSAiRXhjbHVzaW9uU2hhcGUuaCIKLSNpbmNsdWRlICJGbG9hdFBvbHlnb24uaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBPZmZzZXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0ZXhQ
YWlyIHsKLXB1YmxpYzoKLSAgICBlbnVtIEJhc2lzIHsKLSAgICAgICAgRWRnZSwKLSAgICAgICAg
VmVydGV4LAotICAgICAgICBMaW5lVG9wCi0gICAgfTsKLQotICAgIE9mZnNldFBvbHlnb25FZGdl
KGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQot
ICAgICAgICA6IG1fdmVydGV4MShlZGdlLnZlcnRleDEoKSArIG9mZnNldCkKLSAgICAgICAgLCBt
X3ZlcnRleDIoZWRnZS52ZXJ0ZXgyKCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV9lZGdlSW5kZXgo
ZWRnZS5lZGdlSW5kZXgoKSkKLSAgICAgICAgLCBtX2Jhc2lzKEVkZ2UpCi0gICAgewotICAgIH0K
LQotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHJlZmxleFZlcnRleCwg
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQxLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldDIpCi0gICAg
ICAgIDogbV92ZXJ0ZXgxKHJlZmxleFZlcnRleCArIG9mZnNldDEpCi0gICAgICAgICwgbV92ZXJ0
ZXgyKHJlZmxleFZlcnRleCArIG9mZnNldDIpCi0gICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCi0g
ICAgICAgICwgbV9iYXNpcyhWZXJ0ZXgpCi0gICAgewotICAgIH0KLQotICAgIE9mZnNldFBvbHln
b25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgbWluTG9naWNhbEludGVy
dmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLSAgICAgICAgOiBtX3ZlcnRleDEoRmxv
YXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3Ap
ICsgb2Zmc2V0KQotICAgICAgICAsIG1fdmVydGV4MihGbG9hdFBvaW50KHBvbHlnb24uYm91bmRp
bmdCb3goKS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCi0gICAgICAg
ICwgbV9lZGdlSW5kZXgoLTEpCi0gICAgICAgICwgbV9iYXNpcyhMaW5lVG9wKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX3ZlcnRleDE7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQm
IHZlcnRleDIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRleDI7IH0KLSAgICBpbnQg
ZWRnZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZGdlSW5kZXg7IH0KLSAgICBCYXNpcyBiYXNp
cygpIGNvbnN0IHsgcmV0dXJuIG1fYmFzaXM7IH0KLQotcHJpdmF0ZToKLSAgICBGbG9hdFBvaW50
IG1fdmVydGV4MTsKLSAgICBGbG9hdFBvaW50IG1fdmVydGV4MjsKLSAgICBpbnQgbV9lZGdlSW5k
ZXg7Ci0gICAgQmFzaXMgbV9iYXNpczsKLX07Ci0KLWNsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBw
dWJsaWMgRXhjbHVzaW9uU2hhcGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lv
blBvbHlnb24pOwotcHVibGljOgotICAgIEV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0
b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCi0gICAgICAgIDog
RXhjbHVzaW9uU2hhcGUoKQotICAgICAgICAsIG1fcG9seWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUp
Ci0gICAgICAgICwgbV9tYXJnaW5Cb3VuZHMobnVsbHB0cikKLSAgICAgICAgLCBtX3BhZGRpbmdC
b3VuZHMobnVsbHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNo
YXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKS5ib3VuZGluZ0JveCgpKTsg
fQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3go
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBh
ZGRpbmdCb3VuZHMoKS5ib3VuZGluZ0JveCgpKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wb2x5Z29uLmlzRW1wdHkoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0
VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJ
bnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAg
ICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3Q7Ci0gICAgY29u
c3QgRmxvYXRQb2x5Z29uJiBzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdDsKLQotICAgIEZsb2F0
UG9seWdvbiBtX3BvbHlnb247Ci0gICAgbXV0YWJsZSBPd25QdHI8RmxvYXRQb2x5Z29uPiBtX21h
cmdpbkJvdW5kczsKLSAgICBtdXRhYmxlIE93blB0cjxGbG9hdFBvbHlnb24+IG1fcGFkZGluZ0Jv
dW5kczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEV4Y2x1c2lv
blBvbHlnb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blJlY3RhbmdsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFu
Z2xlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiNTIwMjZlOGExZTE2Y2Y0
ZTNmOWI2YzlkMmFiMWQyNWYwZWZiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0g
KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblJlY3RhbmdsZS5oIgotCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGZs
b2F0IGVsbGlwc2VYSW50ZXJjZXB0KGZsb2F0IHksIGZsb2F0IHJ4LCBmbG9hdCByeSkKLXsKLSAg
ICBBU1NFUlQocnkgPiAwKTsKLSAgICByZXR1cm4gcnggKiBzcXJ0KDEgLSAoeSAqIHkpIC8gKHJ5
ICogcnkpKTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWUludGVyY2VwdChmbG9h
dCB4LCBmbG9hdCByeCwgZmxvYXQgcnkpCi17Ci0gICAgQVNTRVJUKHJ4ID4gMCk7Ci0gICAgcmV0
dXJuIHJ5ICogc3FydCgxIC0gKHggKiB4KSAvIChyeCAqIHJ4KSk7Ci19Ci0KLUZsb2F0Um91bmRl
ZFJlY3QgRmxvYXRSb3VuZGVkUmVjdDo6cGFkZGluZ0JvdW5kcyhmbG9hdCBwYWRkaW5nKSBjb25z
dAotewotICAgIEFTU0VSVChwYWRkaW5nID49IDApOwotICAgIGlmICghcGFkZGluZyB8fCBpc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkg
KyBzdGQ6Om1pbih3aWR0aCgpIC8gMiwgcGFkZGluZyk7Ci0gICAgZmxvYXQgYm91bmRzWSA9IHko
KSArIHN0ZDo6bWluKGhlaWdodCgpIC8gMiwgcGFkZGluZyk7Ci0gICAgZmxvYXQgYm91bmRzV2lk
dGggPSBzdGQ6Om1heCgwLjBmLCB3aWR0aCgpIC0gcGFkZGluZyAqIDIpOwotICAgIGZsb2F0IGJv
dW5kc0hlaWdodCA9IHN0ZDo6bWF4KDAuMGYsIGhlaWdodCgpIC0gcGFkZGluZyAqIDIpOwotICAg
IGZsb2F0IGJvdW5kc1JhZGl1c1ggPSBzdGQ6Om1heCgwLjBmLCByeCgpIC0gcGFkZGluZyk7Ci0g
ICAgZmxvYXQgYm91bmRzUmFkaXVzWSA9IHN0ZDo6bWF4KDAuMGYsIHJ5KCkgLSBwYWRkaW5nKTsK
LSAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJlY3QoYm91bmRzWCwgYm91bmRzWSwg
Ym91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6ZShib3VuZHNSYWRpdXNYLCBib3Vu
ZHNSYWRpdXNZKSk7Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgRmxvYXRSb3VuZGVkUmVjdDo6bWFy
Z2luQm91bmRzKGZsb2F0IG1hcmdpbikgY29uc3QKLXsKLSAgICBBU1NFUlQobWFyZ2luID49IDAp
OwotICAgIGlmICghbWFyZ2luKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBmbG9hdCBi
b3VuZHNYID0geCgpIC0gbWFyZ2luOwotICAgIGZsb2F0IGJvdW5kc1kgPSB5KCkgLSBtYXJnaW47
Ci0gICAgZmxvYXQgYm91bmRzV2lkdGggPSB3aWR0aCgpICsgbWFyZ2luICogMjsKLSAgICBmbG9h
dCBib3VuZHNIZWlnaHQgPSBoZWlnaHQoKSArIG1hcmdpbiAqIDI7Ci0gICAgZmxvYXQgYm91bmRz
UmFkaXVzWCA9IHJ4KCkgKyBtYXJnaW47Ci0gICAgZmxvYXQgYm91bmRzUmFkaXVzWSA9IHJ5KCkg
KyBtYXJnaW47Ci0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxvYXRSZWN0KGJvdW5kc1gs
IGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9hdFNpemUoYm91bmRzUmFk
aXVzWCwgYm91bmRzUmFkaXVzWSkpOwotfQotCi1GbG9hdFBvaW50IEZsb2F0Um91bmRlZFJlY3Q6
OmNvcm5lckludGVyY2VwdEZvcldpZHRoKGZsb2F0IHdpZHRoQXRJbnRlcmNlcHQpIGNvbnN0Ci17
Ci0gICAgZmxvYXQgeGkgPSAod2lkdGgoKSAtIHdpZHRoQXRJbnRlcmNlcHQpIC8gMjsKLSAgICBm
bG9hdCB5aSA9IHJ5KCkgLSBlbGxpcHNlWUludGVyY2VwdChyeCgpIC0geGksIHJ4KCksIHJ5KCkp
OwotICAgIHJldHVybiBGbG9hdFBvaW50KHhpLCB5aSk7Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3Qg
RXhjbHVzaW9uUmVjdGFuZ2xlOjpzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAotewotICAgIGlm
ICghbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKSB7Ci0gICAgICAgIG1faGF2ZUluaXRp
YWxpemVkUGFkZGluZ0JvdW5kcyA9IHRydWU7Ci0gICAgICAgIG1fcGFkZGluZ0JvdW5kcyA9IG1f
Ym91bmRzLnBhZGRpbmdCb3VuZHMoc2hhcGVQYWRkaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4g
bV9wYWRkaW5nQm91bmRzOwotfQotCi1GbG9hdFJvdW5kZWRSZWN0IEV4Y2x1c2lvblJlY3Rhbmds
ZTo6c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAotewotICAgIGlmICghbV9oYXZlSW5pdGlhbGl6
ZWRNYXJnaW5Cb3VuZHMpIHsKLSAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMg
PSB0cnVlOwotICAgICAgICBtX21hcmdpbkJvdW5kcyA9IG1fYm91bmRzLm1hcmdpbkJvdW5kcyhz
aGFwZU1hcmdpbigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbWFyZ2luQm91bmRzOwotfQotCi12
b2lkIEV4Y2x1c2lvblJlY3RhbmdsZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQp
IGNvbnN0Ci17Ci0gICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVNYXJn
aW5Cb3VuZHMoKTsKLSAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCAr
IGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBpZiAoeTIgPCBib3VuZHMueSgpIHx8IHkxID49IGJvdW5k
cy5tYXhZKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHgxID0gYm91bmRzLngoKTsK
LSAgICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7Ci0KLSAgICBpZiAoYm91bmRzLnJ5KCkgPiAw
KSB7Ci0gICAgICAgIGlmICh5MiA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKSkgewotICAgICAg
ICAgICAgZmxvYXQgeWkgPSB5MiAtIGJvdW5kcy55KCkgLSBib3VuZHMucnkoKTsKLSAgICAgICAg
ICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMu
cnkoKSk7Ci0gICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAtIHhpOwot
ICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsKLSAgICAg
ICAgfSBlbHNlIGlmICh5MSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSkgewotICAgICAg
ICAgICAgZmxvYXQgeWkgPSAgeTEgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKLSAg
ICAgICAgICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBi
b3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAt
IHhpOwotICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoeDEsIHgy
KSk7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUmVjdGFuZ2xlOjpnZXRJbmNsdWRlZEludGVydmFscyhM
YXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExp
c3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMg
PSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0g
bG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBpZiAoeTEgPCBib3VuZHMueSgpIHx8
IHkyID4gYm91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeDEgPSBi
b3VuZHMueCgpOwotICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKLQotICAgIGlmIChib3Vu
ZHMucnkoKSA+IDApIHsKLSAgICAgICAgYm9vbCB5MUludGVyY2VwdHNDb3JuZXIgPSB5MSA8IGJv
dW5kcy55KCkgKyBib3VuZHMucnkoKTsKLSAgICAgICAgYm9vbCB5MkludGVyY2VwdHNDb3JuZXIg
PSB5MiA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKLSAgICAgICAgZmxvYXQgeGkgPSAw
OwotCi0gICAgICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgJiYgeTJJbnRlcmNlcHRzQ29ybmVy
KSB7Ci0gICAgICAgICAgICBpZiAgKHkxIDwgYm91bmRzLmhlaWdodCgpICsgMiAqIGJvdW5kcy55
KCkgLSB5MikgewotICAgICAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMueSgpIC0g
Ym91bmRzLnJ5KCk7Ci0gICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwg
Ym91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsK
LSAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwg
Ym91bmRzLnJ5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHkxSW50ZXJj
ZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJvdW5kcy55KCkgLSBi
b3VuZHMucnkoKTsKLSAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5k
cy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeTJJbnRlcmNlcHRzQ29y
bmVyKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4WSgpIC0gYm91
bmRzLnJ5KCkpOwotICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRz
LnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh5MUludGVyY2Vw
dHNDb3JuZXIgfHwgeTJJbnRlcmNlcHRzQ29ybmVyKSB7Ci0gICAgICAgICAgICB4MSA9IGJvdW5k
cy54KCkgKyBib3VuZHMucngoKSAtIHhpOwotICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgp
IC0gYm91bmRzLnJ4KCkgKyB4aTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdC5hcHBl
bmQoTGluZVNlZ21lbnQoeDEsIHgyKSk7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uUmVjdGFuZ2xlOjpm
aXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVy
dmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRV
bml0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dp
Y2FsSW50ZXJ2YWxUb3A7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2Fs
SW50ZXJ2YWxTaXplLmhlaWdodCgpOwotICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5M
b2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCk7Ci0KLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBib3VuZHMgPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAoYm91bmRzLmlzRW1wdHko
KSB8fCBtaW5JbnRlcnZhbFdpZHRoID4gYm91bmRzLndpZHRoKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZHMueSgpLCBtaW5JbnRlcnZh
bFRvcCk7Ci0gICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKLQotICAg
IGlmIChtYXhZID4gYm91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ym9vbCBpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyID0gbWluWSA8IGJvdW5kcy55KCkgKyBib3Vu
ZHMucnkoKTsKLSAgICBib29sIGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgPSBtYXhZID4gYm91
bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpOwotCi0gICAgaWYgKCFpbnRlcnZhbE92ZXJsYXBzTWlu
Q29ybmVyICYmICFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyKSB7Ci0gICAgICAgIHJlc3VsdCA9
IG1pblk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGZsb2F0IGNlbnRlclkg
PSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMjsKLSAgICBib29sIG1pbkNvcm5lckRl
ZmluZXNYID0gZmFicyhjZW50ZXJZIC0gbWluWSkgPiBmYWJzKGNlbnRlclkgLSBtYXhZKTsKLSAg
ICBib29sIGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgPSBtaW5JbnRlcnZhbFdpZHRoICsgMiAq
IGJvdW5kcy5yeCgpIDw9IGJvdW5kcy53aWR0aCgpOwotICAgIEZsb2F0UG9pbnQgY29ybmVySW50
ZXJjZXB0ID0gYm91bmRzLmNvcm5lckludGVyY2VwdEZvcldpZHRoKG1pbkludGVydmFsV2lkdGgp
OwotCi0gICAgaWYgKGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJs
YXBzTWF4Q29ybmVyIHx8IG1pbkNvcm5lckRlZmluZXNYKSkgewotICAgICAgICBpZiAoaW50ZXJ2
YWxGaXRzV2l0aGluQ29ybmVycyB8fCBib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSA8
IG1pblkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWluSW50ZXJ2YWxIZWlnaHQgPCBib3VuZHMu
aGVpZ2h0KCkgLSAoMiAqIGNvcm5lckludGVyY2VwdC55KCkpKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBjZWlsZWRMYXlvdXRVbml0KGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlu
dGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyIHx8
ICFtaW5Db3JuZXJEZWZpbmVzWCkpIHsKLSAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNv
cm5lcnMgfHwgbWluWSA8PSAgYm91bmRzLm1heFkoKSAtIGNvcm5lckludGVyY2VwdC55KCkgLSBt
aW5JbnRlcnZhbEhlaWdodCkgewotICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uUmVjdGFuZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOWZk
YWMxNjNjMTJlZTczZDJiZTg5M2VmMzE4OGJkMzI3N2MyYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblJlY3RhbmdsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgRXhjbHVzaW9uUmVjdGFuZ2xlX2gKLSNkZWZpbmUgRXhjbHVzaW9uUmVjdGFuZ2xlX2gK
LQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0Um91bmRlZFJlY3QgOiBwdWJsaWMgRmxvYXRSZWN0IHsK
LXB1YmxpYzoKLSAgICBGbG9hdFJvdW5kZWRSZWN0KCkgeyB9Ci0gICAgRmxvYXRSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKLSAgICAg
ICAgOiBGbG9hdFJlY3QoYm91bmRzKQotICAgICAgICAsIG1fcmFkaWkocmFkaWkpCi0gICAgewot
ICAgIH0KLQotICAgIGZsb2F0IHJ4KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpaS53aWR0aCgpOyB9
Ci0gICAgZmxvYXQgcnkoKSBjb25zdCB7IHJldHVybiBtX3JhZGlpLmhlaWdodCgpOyB9Ci0gICAg
RmxvYXRSb3VuZGVkUmVjdCBtYXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdDsKLSAgICBG
bG9hdFJvdW5kZWRSZWN0IHBhZGRpbmdCb3VuZHMoZmxvYXQgcGFkZGluZykgY29uc3Q7Ci0gICAg
RmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3aWR0aCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgRmxvYXRTaXplIG1fcmFkaWk7Ci19OwotCi1jbGFzcyBFeGNsdXNpb25S
ZWN0YW5nbGUgOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewotcHVibGljOgotICAgIEV4Y2x1c2lv
blJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRp
aSkKLSAgICAgICAgOiBFeGNsdXNpb25TaGFwZSgpCi0gICAgICAgICwgbV9ib3VuZHMoYm91bmRz
LCByYWRpaSkKLSAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcyhmYWxzZSkK
LSAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMoZmFsc2UpCi0gICAgewot
ICAgIH0KLQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGlu
Z0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNo
YXBlTWFyZ2luQm91bmRzKCkpOyB9Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGlu
Z0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0
PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpKTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ib3VuZHMuaXNFbXB0eSgpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChM
YXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9n
aWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9WRVJSSURFOwotCi1wcml2YXRl
OgotICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdDsKLSAgICBG
bG9hdFJvdW5kZWRSZWN0IHNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0OwotCi0gICAgRmxvYXRS
b3VuZGVkUmVjdCBtX2JvdW5kczsKLSAgICBtdXRhYmxlIEZsb2F0Um91bmRlZFJlY3QgbV9tYXJn
aW5Cb3VuZHM7Ci0gICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRSZWN0IG1fcGFkZGluZ0JvdW5kczsK
LSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMgOiAxOwotICAg
IG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgOiAxOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uUmVjdGFuZ2xlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmZmU2NDBkYjVkNzYxNzQ0YTRhMDFiNjgwNWI4NWM3OGNiYjA2
N2Q3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIElu
Y29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNs
dXNpb25TaGFwZS5oIgotCi0jaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgotI2luY2x1
ZGUgIkV4Y2x1c2lvblBvbHlnb24uaCIKLSNpbmNsdWRlICJFeGNsdXNpb25SZWN0YW5nbGUuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNp
bmNsdWRlICJXaW5kUnVsZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4
Y2x1c2lvblJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXpl
JiByYWRpaSkKLXsKLSAgICBBU1NFUlQoYm91bmRzLndpZHRoKCkgPj0gMCAmJiBib3VuZHMuaGVp
Z2h0KCkgPj0gMCAmJiByYWRpaS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5nbGUoYm91bmRzLCByYWRp
aSkpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVz
aW9uQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzKQotewotICAg
IEFTU0VSVChyYWRpdXMgPj0gMCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25S
ZWN0YW5nbGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpdXMsIGNlbnRlci55KCkgLSByYWRp
dXMsIHJhZGl1cyoyLCByYWRpdXMqMiksIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpKTsKLX0K
LQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvbkVsbGlw
c2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotewot
ICAgIEFTU0VSVChyYWRpaS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KGNlbnRl
ci54KCkgLSByYWRpaS53aWR0aCgpLCBjZW50ZXIueSgpIC0gcmFkaWkuaGVpZ2h0KCksIHJhZGlp
LndpZHRoKCkqMiwgcmFkaWkuaGVpZ2h0KCkqMiksIHJhZGlpKSk7Ci19Ci0KLXN0YXRpYyBQYXNz
T3duUHRyPEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8
VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUG9seWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUp
KTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgaWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LnkoKSwg
bG9naWNhbEJveEhlaWdodCAtIHJlY3QubWF4WCgpLCByZWN0LmhlaWdodCgpLCByZWN0LndpZHRo
KCkpOwotICAgIHJldHVybiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRmxvYXRQb2ludCBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCBsb2dpY2FsQm94SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsK
LSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICBy
ZXR1cm4gcG9pbnQ7Ci0gICAgaWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9pbnQueSgpLCBsb2dpY2FsQm94SGVp
Z2h0IC0gcG9pbnQueCgpKTsKLSAgICByZXR1cm4gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb25zdCBG
bG9hdFNpemUmIHNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBzaXplOwot
ICAgIHJldHVybiBzaXplLnRyYW5zcG9zZWRTaXplKCk7Ci19Ci0KLVBhc3NPd25QdHI8RXhjbHVz
aW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBCYXNp
Y1NoYXBlKiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94U2l6ZSwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKQotewot
ICAgIEFTU0VSVChiYXNpY1NoYXBlKTsKLQotICAgIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2Rl
ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGZsb2F0IGJveFdp
ZHRoID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUud2lkdGgoKSA6IGxv
Z2ljYWxCb3hTaXplLmhlaWdodCgpOwotICAgIGZsb2F0IGJveEhlaWdodCA9IGhvcml6b250YWxX
cml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpIDogbG9naWNhbEJveFNpemUud2lk
dGgoKTsKLSAgICBPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGV4Y2x1c2lvblNoYXBlOwotCi0gICAg
c3dpdGNoIChiYXNpY1NoYXBlLT50eXBlKCkpIHsKLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFz
aWNTaGFwZVJlY3RhbmdsZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZVJlY3Rhbmds
ZSogcmVjdGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSo+KGJh
c2ljU2hhcGUpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAotICAgICAgICAgICAgZmxvYXRW
YWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPngoKSwgYm94V2lkdGgpLAotICAgICAgICAgICAgZmxv
YXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnkoKSwgYm94SGVpZ2h0KSwKLSAgICAgICAgICAg
IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT53aWR0aCgpLCBib3hXaWR0aCksCi0gICAg
ICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+aGVpZ2h0KCksIGJveEhlaWdo
dCkpOwotICAgICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFk
aXVzWCgpOwotICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVy
UmFkaXVzWSgpOwotICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCi0gICAgICAgICAgICBy
YWRpdXNYTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRp
dXNYTGVuZ3RoLCBib3hXaWR0aCksCi0gICAgICAgICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZp
bmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQp
KTsKLSAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2lj
YWwoYm91bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwotCi0gICAg
ICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKGxvZ2ljYWxCb3Vu
ZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3JpdGluZ01vZGUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlQ2ly
Y2xlVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKiBjaXJjbGUgPSBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIGZs
b2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWCgpLCBib3hX
aWR0aCk7Ci0gICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNs
ZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOwotICAgICAgICBmbG9hdCByYWRpdXMgPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWluKGJveEhlaWdodCwgYm94V2lk
dGgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2ljYWxQb2ludFRv
TG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94U2l6ZS5oZWln
aHQoKSwgd3JpdGluZ01vZGUpOwotCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhj
bHVzaW9uQ2lyY2xlKGxvZ2ljYWxDZW50ZXIsIHJhZGl1cyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUVsbGlwc2VUeXBlOiB7Ci0gICAg
ICAgIGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKiBlbGxpcHNlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzaWNTaGFwZUVsbGlwc2UqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWCA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWCgpLCBib3hXaWR0aCk7Ci0gICAg
ICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRlclko
KSwgYm94SGVpZ2h0KTsKLSAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGZsb2F0VmFsdWVGb3JMZW5n
dGgoZWxsaXBzZS0+cmFkaXVzWCgpLCBib3hXaWR0aCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1c1kg
PSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1koKSwgYm94SGVpZ2h0KTsKLSAg
ICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbChG
bG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3Jp
dGluZ01vZGUpOwotICAgICAgICBGbG9hdFNpemUgbG9naWNhbFJhZGlpID0gcGh5c2ljYWxTaXpl
VG9Mb2dpY2FsKEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSwgd3JpdGluZ01vZGUpOwotCi0g
ICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShsb2dpY2FsQ2Vu
dGVyLCBsb2dpY2FsUmFkaWkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJh
c2ljU2hhcGU6OkJhc2ljU2hhcGVQb2x5Z29uVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1No
YXBlUG9seWdvbiogcG9seWdvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29u
Kj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMZW5ndGg+JiB2YWx1ZXMgPSBw
b2x5Z29uLT52YWx1ZXMoKTsKLSAgICAgICAgc2l6ZV90IHZhbHVlc1NpemUgPSB2YWx1ZXMuc2l6
ZSgpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZXNTaXplICUgMikpOwotICAgICAgICBPd25QdHI8
VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0
UG9pbnQ+KHZhbHVlc1NpemUgLyAyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2YWx1ZXNTaXplOyBpICs9IDIpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdmVydGV4KAot
ICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkpLCBib3hXaWR0
aCksCi0gICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSArIDEp
LCBib3hIZWlnaHQpKTsKLSAgICAgICAgICAgICgqdmVydGljZXMpW2kgLyAyXSA9IHBoeXNpY2Fs
UG9pbnRUb0xvZ2ljYWwodmVydGV4LCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01v
ZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNp
b25Qb2x5Z29uKHZlcnRpY2VzLnJlbGVhc2UoKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0
UmVjdGFuZ2xlVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUq
IHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSo+
KGJhc2ljU2hhcGUpOwotICAgICAgICBmbG9hdCBsZWZ0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChy
ZWN0YW5nbGUtPmxlZnQoKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9hdCB0b3AgPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+dG9wKCksIGJveEhlaWdodCk7Ci0gICAgICAgIEZsb2F0
UmVjdCBib3VuZHMoCi0gICAgICAgICAgICBsZWZ0LAotICAgICAgICAgICAgdG9wLAotICAgICAg
ICAgICAgYm94V2lkdGggLSBsZWZ0IC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnJp
Z2h0KCksIGJveFdpZHRoKSwKLSAgICAgICAgICAgIGJveEhlaWdodCAtIHRvcCAtIGZsb2F0VmFs
dWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5ib3R0b20oKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIExl
bmd0aCByYWRpdXNYTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7Ci0gICAgICAg
IExlbmd0aCByYWRpdXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBjb3JuZXJSYWRpaSgKLSAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNV
bmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdp
ZHRoKSwKLSAgICAgICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9h
dFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOwotICAgICAgICBGbG9h
dFJlY3QgbG9naWNhbEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2lj
YWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hh
cGUgPSBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXpl
VG9Mb2dpY2FsKGNvcm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBleGNsdXNpb25TaGFwZS0+bV93cml0aW5nTW9kZSA9IHdyaXRpbmdNb2RlOwotICAg
IGV4Y2x1c2lvblNoYXBlLT5tX21hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgobWFyZ2luLCAw
KTsKLSAgICBleGNsdXNpb25TaGFwZS0+bV9wYWRkaW5nID0gZmxvYXRWYWx1ZUZvckxlbmd0aChw
YWRkaW5nLCAwKTsKLQotICAgIHJldHVybiBleGNsdXNpb25TaGFwZS5yZWxlYXNlKCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25TaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZDUxZjA0MTY4MjMyMTgy
MTUyYzMyODAzZmE3M2ZhNDg5ZDQ1MWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25T
aGFwZV9oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlX2gKLQotI2luY2x1ZGUgIkJhc2ljU2hhcGVz
LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IExpbmVTZWdtZW50IHsKLSAgICBMaW5lU2VnbWVu
dChmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0KQotICAgICAgICA6IGxvZ2lj
YWxMZWZ0KGxvZ2ljYWxMZWZ0KQotICAgICAgICAsIGxvZ2ljYWxSaWdodChsb2dpY2FsUmlnaHQp
Ci0gICAgewotICAgIH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnQ7Ci0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHQ7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxMaW5lU2VnbWVudD4gU2Vn
bWVudExpc3Q7Ci0KLQotLy8gQSByZXByZXNlbnRhdGlvbiBvZiBhIEJhc2ljU2hhcGUgdGhhdCBl
bmFibGVzIGxheW91dCBjb2RlIHRvIGRldGVybWluZSBob3cgdG8gYnJlYWsgYSBsaW5lIHVwIGlu
dG8gc2VnbWVudHMKLS8vIHRoYXQgd2lsbCBmaXQgd2l0aGluIG9yIGFyb3VuZCBhIHNoYXBlLiBU
aGUgbGluZSBpcyBkZWZpbmVkIGJ5IGEgcGFpciBvZiBsb2dpY2FsIFkgY29vcmRpbmF0ZXMgYW5k
IHRoZQotLy8gY29tcHV0ZWQgc2VnbWVudHMgYXJlIHJldHVybmVkIGFzIHBhaXJzIG9mIGxvZ2lj
YWwgWCBjb29yZGluYXRlcy4gVGhlIEJhc2ljU2hhcGUgaXRzZWxmIGlzIGRlZmluZWQgaW4KLS8v
IHBoeXNpY2FsIGNvb3JkaW5hdGVzLgotCi1jbGFzcyBFeGNsdXNpb25TaGFwZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvblNo
YXBlKGNvbnN0IEJhc2ljU2hhcGUqLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94U2l6ZSwg
V3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKTsKLQotICAgIHZpcnR1
YWwgfkV4Y2x1c2lvblNoYXBlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVN
YXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRS
ZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVk
ZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQsIFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRl
ZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNv
bnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3Vs
dCkgY29uc3QgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZmxvYXQgc2hhcGVNYXJnaW4oKSBjb25z
dCB7IHJldHVybiBtX21hcmdpbjsgfQotICAgIGZsb2F0IHNoYXBlUGFkZGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fcGFkZGluZzsgfQotCi1wcml2YXRlOgotICAgIFdyaXRpbmdNb2RlIG1fd3JpdGlu
Z01vZGU7Ci0gICAgZmxvYXQgbV9tYXJnaW47Ci0gICAgZmxvYXQgbV9wYWRkaW5nOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uU2hhcGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYxNGY4MjJiNzg1NDFlZGUzZTNjNDhiODM0ZDgyYzMy
OGFjZTFiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
Ci0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5mby5oIgotCi0jaWYgRU5B
QkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVy
UmVnaW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRl
clN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1c2lvblNoYXBlOjoqaW50
ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+
Ci1jb25zdCBFeGNsdXNpb25TaGFwZSogRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNo
YXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVkU2hhcGUoKSBjb25zdAotewotICAg
IGlmIChFeGNsdXNpb25TaGFwZSogZXhjbHVzaW9uU2hhcGUgPSBtX3NoYXBlLmdldCgpKQotICAg
ICAgICByZXR1cm4gZXhjbHVzaW9uU2hhcGU7Ci0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBz
aGFwZVZhbHVlID0gKG1fcmVuZGVyZXItPnN0eWxlKCktPipzaGFwZUdldHRlcikoKTsKLSAgICBC
YXNpY1NoYXBlKiBzaGFwZSA9IChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPnR5cGUoKSA9PSBF
eGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSkgPyBzaGFwZVZhbHVlLT5zaGFwZSgpIDogMDsKLQot
ICAgIEFTU0VSVChzaGFwZSk7Ci0KLSAgICBtX3NoYXBlID0gRXhjbHVzaW9uU2hhcGU6OmNyZWF0
ZUV4Y2x1c2lvblNoYXBlKHNoYXBlLCBMYXlvdXRTaXplKG1fc2hhcGVMb2dpY2FsV2lkdGgsIG1f
c2hhcGVMb2dpY2FsSGVpZ2h0KSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSwg
bV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVNYXJnaW4oKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+
c2hhcGVQYWRkaW5nKCkpOwotICAgIEFTU0VSVChtX3NoYXBlKTsKLSAgICByZXR1cm4gbV9zaGFw
ZS5nZXQoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hhcGVW
YWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1c2lv
blNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRM
aXN0JikgY29uc3Q+Ci1ib29sIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdl
dHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQg
bGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQotewotICAgIEFTU0VSVChsaW5lSGVpZ2h0
ID49IDApOwotICAgIG1fc2hhcGVMaW5lVG9wID0gbGluZVRvcCAtIGxvZ2ljYWxUb3BPZmZzZXQo
KTsKLSAgICBtX2xpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0OwotICAgIG1fc2VnbWVudHMuY2xlYXIo
KTsKLQotICAgIGlmIChsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQotICAgICAgICAoY29tcHV0
ZWRTaGFwZSgpLT4qaW50ZXJ2YWxHZXR0ZXIpKG1fc2hhcGVMaW5lVG9wLCBzdGQ6Om1pbihtX2xp
bmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGluZVRvcCksIG1fc2VnbWVudHMpOwot
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IHRoaXMtPmxvZ2ljYWxMZWZ0T2Zm
c2V0KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NlZ21lbnRzLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNhbExlZnRPZmZz
ZXQ7Ci0gICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2ljYWxMZWZ0T2Zm
c2V0OwotICAgIH0KLQotICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKLX0KLQotdGVtcGxh
dGUgY2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJl
c29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+
OwotdGVtcGxhdGUgY2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0
eWxlOjpzaGFwZU91dHNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+
OwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNzA3OTJhM2Y5MTI2ZmQ3NWNm
Yjc2ODI5ZmI5YWFjNjAxOGZmYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAx
MiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0qICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0qICAgIGRp
c2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0qICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFCi0qIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwKLSogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotKiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YKLSogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFw
ZUluZm9faAotI2RlZmluZSBFeGNsdXNpb25TaGFwZUluZm9faAotCi0jaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotI2luY2x1ZGUgIkV4Y2x1c2lv
blNoYXBlVmFsdWUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRV
bml0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBs
YXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIEluZm9UeXBlPgotY2xhc3MgTWFwcGVkSW5mbyB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIEluZm9UeXBlKiBlbnN1cmVJbmZvKGNvbnN0IEtleVR5cGUqIGtl
eSkKLSAgICB7Ci0gICAgICAgIEluZm9NYXAmIGluZm9NYXAgPSBNYXBwZWRJbmZvPEtleVR5cGUs
IEluZm9UeXBlPjo6aW5mb01hcCgpOwotICAgICAgICBpZiAoSW5mb1R5cGUqIGluZm8gPSBpbmZv
TWFwLmdldChrZXkpKQotICAgICAgICAgICAgcmV0dXJuIGluZm87Ci0gICAgICAgIHR5cGVuYW1l
IEluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbmZvTWFwLmFkZChrZXksIEluZm9UeXBlOjpj
cmVhdGVJbmZvKGtleSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlSW5mbyhjb25zdCBLZXlUeXBlKiBr
ZXkpIHsgaW5mb01hcCgpLnJlbW92ZShrZXkpOyB9Ci0gICAgc3RhdGljIEluZm9UeXBlKiBpbmZv
KGNvbnN0IEtleVR5cGUqIGtleSkgeyByZXR1cm4gaW5mb01hcCgpLmdldChrZXkpOyB9Ci1wcml2
YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBLZXlUeXBlKiwgT3duUHRyPEluZm9UeXBl
PiA+IEluZm9NYXA7Ci0gICAgc3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQotICAgIHsKLSAgICAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbmZvTWFwLCBzdGF0aWNJbmZvTWFwLCAoKSk7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNJbmZvTWFwOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFJl
bmRlclR5cGUsIEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChFeGNsdXNpb25TaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRV
bml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgotY2xhc3MgRXhjbHVzaW9uU2hh
cGVJbmZvIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5FeGNsdXNpb25TaGFwZUluZm8oKSB7IH0KLQotICAgIHZvaWQgc2V0U2hhcGVTaXplKExh
eW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpCi0gICAgewot
ICAgICAgICBpZiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9C
T1gpIHsKLSAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IG1fcmVu
ZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobV9zaGFwZUxvZ2ljYWxXaWR0aCA9PSBsb2dpY2FsV2lkdGggJiYgbV9zaGFwZUxv
Z2ljYWxIZWlnaHQgPT0gbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgZGlydHlTaGFwZVNpemUoKTsKLSAgICAgICAgbV9zaGFwZUxvZ2ljYWxXaWR0aCA9IGxvZ2lj
YWxXaWR0aDsKLSAgICAgICAgbV9zaGFwZUxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0Owot
ICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVu
aXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KTsKLSAgICB2b2lkIGNsZWFyU2VnbWVu
dHMoKSB7IG1fc2VnbWVudHMuY2xlYXIoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2lj
YWxUb3AoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCku
eSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxC
b3R0b20oKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCku
bWF4WSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2lj
YWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgp
LngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNh
bFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgp
Lm1heFgoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9n
aWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0Jv
eCgpLndpZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQot
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZVRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVM
aW5lVG9wICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGlu
ZUJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9wICsgbV9saW5lSGVpZ2h0ICsg
bG9naWNhbFRvcE9mZnNldCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Js
b2NrSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemlu
ZygpID09IENPTlRFTlRfQk9YKSA/IChtX3NoYXBlTG9naWNhbEhlaWdodCArIG1fcmVuZGVyZXIt
PmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpIDogbV9zaGFwZUxvZ2ljYWxIZWlnaHQ7
IH0KLQotICAgIGJvb2wgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBs
b2dpY2FsTGluZVRvcCgpIDwgc2hhcGVMb2dpY2FsQm90dG9tKCkgJiYgc2hhcGVMb2dpY2FsVG9w
KCkgPD0gbG9naWNhbExpbmVCb3R0b20oKTsgfQotICAgIGJvb2wgbGluZVdpdGhpblNoYXBlQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiAobG9naWNh
bExpbmVCb3R0b20oKSA8PSBzaGFwZUxvZ2ljYWxCb3R0b20oKSk7IH0KLQotICAgIHZvaWQgZGly
dHlTaGFwZVNpemUoKSB7IG1fc2hhcGUuY2xlYXIoKTsgfQotICAgIGJvb2wgc2hhcGVTaXplRGly
dHkoKSB7IHJldHVybiAhbV9zaGFwZS5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclR5cGUqIG93
bmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRXhj
bHVzaW9uU2hhcGVJbmZvKGNvbnN0IFJlbmRlclR5cGUqIHJlbmRlcmVyKTogbV9yZW5kZXJlcihy
ZW5kZXJlcikgeyB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25TaGFwZSogY29tcHV0ZWRTaGFwZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5k
aW5nQm94KCkgY29uc3QgPSAwOwotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVO
VF9CT1ggPyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiBMYXlvdXRVbml0
KCk7IH07Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCAmJiAhbV9y
ZW5kZXJlci0+aXNSZW5kZXJSZWdpb24oKSkgPyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5n
U3RhcnQoKSA6IExheW91dFVuaXQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTGluZVRv
cDsKLSAgICBMYXlvdXRVbml0IG1fbGluZUhlaWdodDsKLSAgICBTZWdtZW50TGlzdCBtX3NlZ21l
bnRzOwotCi1wcml2YXRlOgotICAgIG11dGFibGUgT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBtX3No
YXBlOwotCi0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbFdpZHRoOwotICAgIExheW91dFVu
aXQgbV9zaGFwZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgY29uc3QgUmVuZGVyVHlwZSogbV9yZW5kZXJl
cjsKLX07Ci19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZThhNzQ0ZmNiYTk5NTRkOWRhMGE5OTU1ZGNhODdhYmRlZDNlOTMxMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNv
cnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UiDigJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICog
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIKLQotI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKLSNpbmNsdWRl
ICJSZW5kZXJCbG9jay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxpbmVTZWdtZW50UmFu
Z2U6OkxpbmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBJ
bmxpbmVJdGVyYXRvciYgZW5kKQotICAgIDogc3RhcnQoc3RhcnQucm9vdCgpLCBzdGFydC5vYmpl
Y3QoKSwgc3RhcnQub2Zmc2V0KCkpCi0gICAgLCBlbmQoZW5kLnJvb3QoKSwgZW5kLm9iamVjdCgp
LCBlbmQub2Zmc2V0KCkpCi0gICAgewotICAgIH0KLQotYm9vbCBFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCi17Ci0gICAg
RXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5yZXNv
bHZlZFNoYXBlSW5zaWRlKCk7Ci0gICAgaWYgKCFzaGFwZVZhbHVlIHx8IHNoYXBlVmFsdWUtPnR5
cGUoKSAhPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQmFzaWNTaGFwZSogc2hhcGUgPSBzaGFwZVZhbHVlLT5zaGFwZSgpOwotICAgIHJl
dHVybiBzaGFwZSAmJiBzaGFwZS0+dHlwZSgpICE9IEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNl
dFJlY3RhbmdsZVR5cGU7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjphZGp1
c3RMb2dpY2FsTGluZVRvcChmbG9hdCBtaW5TZWdtZW50V2lkdGgpCi17Ci0gICAgY29uc3QgRXhj
bHVzaW9uU2hhcGUqIHNoYXBlID0gY29tcHV0ZWRTaGFwZSgpOwotICAgIGlmICghc2hhcGUgfHwg
bV9saW5lSGVpZ2h0IDw9IDAgfHwgbG9naWNhbExpbmVUb3AoKSA+IHNoYXBlTG9naWNhbEJvdHRv
bSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMYXlvdXRVbml0IG5ld0xpbmVUb3A7
Ci0gICAgaWYgKHNoYXBlLT5maXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKG1fc2hhcGVM
aW5lVG9wLCBMYXlvdXRTaXplKG1pblNlZ21lbnRXaWR0aCwgbV9saW5lSGVpZ2h0KSwgbmV3TGlu
ZVRvcCkpIHsKLSAgICAgICAgaWYgKG5ld0xpbmVUb3AgPiBtX3NoYXBlTGluZVRvcCkgewotICAg
ICAgICAgICAgbV9zaGFwZUxpbmVUb3AgPSBuZXdMaW5lVG9wOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQwMzJmZjk5ZjZmZGI3
ZGNjMjRiODY2Yzk0MWI4NjMwMjU4MDJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvX2gKLSNkZWZp
bmUgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvX2gKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
Ci0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSW5saW5lSXRlcmF0b3I7Ci1jbGFzcyBSZW5kZXJCbG9jazsKLWNsYXNzIFJlbmRlck9i
amVjdDsKLQotc3RydWN0IExpbmVTZWdtZW50SXRlcmF0b3IgewotICAgIFJlbmRlck9iamVjdCog
cm9vdDsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdDsKLSAgICB1bnNpZ25lZCBvZmZzZXQ7Ci0g
ICAgTGluZVNlZ21lbnRJdGVyYXRvcihSZW5kZXJPYmplY3QqIHJvb3QsIFJlbmRlck9iamVjdCog
b2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogcm9vdChyb290KQotICAgICAgICAs
IG9iamVjdChvYmplY3QpCi0gICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQot
fTsKLQotc3RydWN0IExpbmVTZWdtZW50UmFuZ2UgewotICAgIExpbmVTZWdtZW50SXRlcmF0b3Ig
c3RhcnQ7Ci0gICAgTGluZVNlZ21lbnRJdGVyYXRvciBlbmQ7Ci0gICAgTGluZVNlZ21lbnRSYW5n
ZShjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQp
OwotfTsKLQotdHlwZWRlZiBWZWN0b3I8TGluZVNlZ21lbnRSYW5nZT4gU2VnbWVudFJhbmdlTGlz
dDsKLQotY2xhc3MgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvIDogcHVibGljIEV4Y2x1c2lvblNo
YXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAm
RXhjbHVzaW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0
IFJlbmRlckJsb2NrKiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyhyZW5kZXJlcikpOyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRG
b3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb21w
dXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0KSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9zZWdtZW50UmFuZ2VzLmNsZWFyKCk7Ci0g
ICAgICAgIHJldHVybiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHls
ZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVy
dmFscz46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7Ci0gICAg
fQotCi0gICAgYm9vbCBoYXNTZWdtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiBtX3NlZ21lbnRzLnNpemUoKTsKLSAgICB9Ci0g
ICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChoYXNTZWdtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIG1fc2VnbWVudHM7Ci0gICAgfQot
ICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSB7IHJldHVybiBtX3NlZ21lbnRS
YW5nZXM7IH0KLSAgICBjb25zdCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzKCkgY29u
c3QgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9Ci0gICAgY29uc3QgTGluZVNlZ21lbnQqIGN1
cnJlbnRTZWdtZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaGFzU2VnbWVudHMoKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBBU1NFUlQobV9zZWdtZW50UmFuZ2VzLnNp
emUoKSA8IG1fc2VnbWVudHMuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuICZtX3NlZ21lbnRzW21f
c2VnbWVudFJhbmdlcy5zaXplKCldOwotICAgIH0KLSAgICBib29sIGFkanVzdExvZ2ljYWxMaW5l
VG9wKGZsb2F0IG1pblNlZ21lbnRXaWR0aCk7Ci0KLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJv
b2wgdmFsdWUpIHsgbV9uZWVkc0xheW91dCA9IHZhbHVlOyB9Ci0gICAgYm9vbCBuZWVkc0xheW91
dCgpIHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdC
b3goKTsgfQotCi1wcml2YXRlOgotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhjb25zdCBS
ZW5kZXJCbG9jayogcmVuZGVyZXIpCi0gICAgOiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxv
Y2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpn
ZXRJbmNsdWRlZEludGVydmFscz4gKHJlbmRlcmVyKQotICAgICwgbV9uZWVkc0xheW91dChmYWxz
ZSkKLSAgICB7IH0KLQotICAgIFNlZ21lbnRSYW5nZUxpc3QgbV9zZWdtZW50UmFuZ2VzOwotICAg
IGJvb2wgbV9uZWVkc0xheW91dDoxOwotfTsKLQotfQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5Y2NlNWE1NmYxY2E5ZGMwNGM0OTgz
MGYyYzg1Y2Q3ZGRlMmE1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
by5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKLQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIKLQotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1ib29sIEV4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqIGJveCkKLXsKLSAgICBF
eGNsdXNpb25TaGFwZVZhbHVlKiB2YWx1ZSA9IGJveC0+c3R5bGUoKS0+c2hhcGVPdXRzaWRlKCk7
Ci0gICAgcmV0dXJuIGJveC0+aXNGbG9hdGluZ1dpdGhTaGFwZU91dHNpZGUoKSAmJiB2YWx1ZS0+
dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlICYmIHZhbHVlLT5zaGFwZSgpOwot
fQotCi1ib29sIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVTZWdtZW50c0Zvckxp
bmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCi17Ci0gICAgaWYg
KHNoYXBlU2l6ZURpcnR5KCkgfHwgbV9saW5lVG9wICE9IGxpbmVUb3AgfHwgbV9saW5lSGVpZ2h0
ICE9IGxpbmVIZWlnaHQpIHsKLSAgICAgICAgaWYgKEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJC
b3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1
ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0
KSkgewotICAgICAgICAgICAgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IG1f
c2VnbWVudHNbMF0ubG9naWNhbExlZnQgLSBzaGFwZUxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgICAg
ICBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbbV9zZWdt
ZW50cy5zaXplKCktMV0ubG9naWNhbFJpZ2h0IC0gc2hhcGVMb2dpY2FsUmlnaHQoKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVs
dGEgPSAwOwotICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEg
PSAwOwotICAgICAgICB9Ci0gICAgICAgIG1fbGluZVRvcCA9IGxpbmVUb3A7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOwotfQotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODdhNWM0OGI3YjFmZmNlMjE1NmY4MTc4NzQ2ZjNm
MzMyMDc4NWY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAg
ICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9faAotI2RlZmluZSBFeGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvX2gKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVk
ZSAiRXhjbHVzaW9uU2hhcGVJbmZvLmgiCi0jaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJveDsKLQotY2xhc3MgRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbyA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVu
ZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVy
dmFscz4sIHB1YmxpYyBNYXBwZWRJbmZvPFJlbmRlckJveCwgRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mbz4gewotcHVibGljOgotICAgIExheW91dFNpemUgc2hhcGVMb2dpY2FsT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gTGF5b3V0U2l6ZShzaGFwZUxvZ2ljYWxMZWZ0KCksIHNoYXBlTG9naWNhbFRv
cCgpKTsgfQotCi0gICAgTGF5b3V0VW5pdCBsZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7IH0K
LSAgICBMYXlvdXRVbml0IHJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUhlaWdodCkgT1ZFUlJJREU7Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVu
ZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKHJl
bmRlcmVyKSk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94
Kik7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxv
Z2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUo
KS0+c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQotCi1wcml2YXRlOgotICAgIEV4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgOiBFeGNs
dXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4
Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4ocmVuZGVyZXIpIHsgfQotCi0gICAg
TGF5b3V0VW5pdCBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOwotICAgIExheW91
dFVuaXQgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7Ci0gICAgTGF5b3V0VW5p
dCBtX2xpbmVUb3A7Ci19OwotCi19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRTdGF0ZS5jcHAKaW5kZXggMGY2ZDkzY2FiOTUzMmQ0MzczMWMwZDVhYjI0MzMx
NWRmMzYyNWYzMi4uZDllYmQ2NDdhN2Q5NTg1N2QyOGE5YWU5OTZmM2VlYjM0Yzg3ZjkyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCkBAIC00MCw3ICs0MCw3IEBA
IExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiBy
ZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6CiAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgLCBtX25l
eHQocHJldikKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAsIG1fZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKDApCisgICAgLCBtX3NoYXBlSW5zaWRlSW5mbygwKQogI2VuZGlmCiAjaWZuZGVm
IE5ERUJVRwogICAgICwgbV9yZW5kZXJlcihyZW5kZXJlcikKQEAgLTExMyw5ICsxMTMsOSBAQCBM
YXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVu
ZGVyZXIsIGNvbnN0IExheW91dFNpegogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlmIChy
ZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiBy
ZW5kZXJCbG9jayA9IHRvUmVuZGVyQmxvY2socmVuZGVyZXIpOwotICAgICAgICBtX2V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbyA9IHJlbmRlckJsb2NrLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KTsKLSAgICAgICAgaWYgKCFtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyAmJiBtX25leHQtPm1f
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIHJlbmRlckJsb2NrLT5hbGxvd3NFeGNsdXNpb25T
aGFwZUluc2lkZUluZm9TaGFyaW5nKCkpCi0gICAgICAgICAgICBtX2V4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyA9IG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm87CisgICAgICAgIG1f
c2hhcGVJbnNpZGVJbmZvID0gcmVuZGVyQmxvY2stPnNoYXBlSW5zaWRlSW5mbygpOworICAgICAg
ICBpZiAoIW1fc2hhcGVJbnNpZGVJbmZvICYmIG1fbmV4dC0+bV9zaGFwZUluc2lkZUluZm8gJiYg
cmVuZGVyQmxvY2stPmFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKKyAgICAgICAgICAg
IG1fc2hhcGVJbnNpZGVJbmZvID0gbV9uZXh0LT5tX3NoYXBlSW5zaWRlSW5mbzsKICAgICB9CiAj
ZW5kaWYKIApAQCAtMTQ5LDcgKzE0OSw3IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShSZW5k
ZXJPYmplY3QqIHJvb3QpCiAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgLCBtX25leHQoMCkKICNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAsIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKDAp
CisgICAgLCBtX3NoYXBlSW5zaWRlSW5mbygwKQogI2VuZGlmCiAgICAgLCBtX3BhZ2VMb2dpY2Fs
SGVpZ2h0KDApCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xheW91dFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3Rh
dGUuaAppbmRleCA3NWMzNTNkNWRkYTgwOGYxOWJjOGZiYWVjNDY4NzNiNWVmNTYzYWRhLi5kNzc0
OWM1MmM2MGQ3NTYyMDFhOTgxMzkyZTgzYjViNWMxNzJhMDlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBSZW5kZXJCb3g7CiBj
bGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwogI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQotY2xhc3MgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOworY2xhc3MgU2hhcGVJ
bnNpZGVJbmZvOwogI2VuZGlmCiAKIGNsYXNzIExheW91dFN0YXRlIHsKQEAgLTU3LDcgKzU3LDcg
QEAgcHVibGljOgogICAgICAgICAsIG1fbGluZUdyaWQoMCkKICAgICAgICAgLCBtX25leHQoMCkK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgLCBtX2V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbygwKQorICAgICAgICAsIG1fc2hhcGVJbnNpZGVJbmZvKDApCiAjZW5kaWYKICAgICAgICAg
LCBtX3BhZ2VMb2dpY2FsSGVpZ2h0KDApCiAjaWZuZGVmIE5ERUJVRwpAQCAtOTksNyArOTksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Jsb2NrRGlyZWN0aW9uTG9jYXRpb25TZXRCZWZvcmVM
YXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVHcmlkIHx8IChtX2lzUGFnaW5hdGVkICYmIG1f
cGFnZUxvZ2ljYWxIZWlnaHQpOyB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpIGNvbnN0IHsg
cmV0dXJuIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOyB9CisgICAgU2hhcGVJbnNpZGVJbmZv
KiBzaGFwZUluc2lkZUluZm8oKSBjb25zdCB7IHJldHVybiBtX3NoYXBlSW5zaWRlSW5mbzsgfQog
I2VuZGlmCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3JtYWwgb3BlcmF0b3IgbmV3IGlzIGRpc2Fs
bG93ZWQuCkBAIC0xMjUsOCArMTI1LDggQEAgcHVibGljOgogICAgIC8vIFRoZSBjdXJyZW50IGxp
bmUgZ3JpZCB0aGF0IHdlJ3JlIHNuYXBwaW5nIHRvIGFuZCB0aGUgb2Zmc2V0IG9mIHRoZSBzdGFy
dCBvZiB0aGUgZ3JpZC4KICAgICBSZW5kZXJCbG9jayogbV9saW5lR3JpZDsKICAgICBMYXlvdXRT
dGF0ZSogbV9uZXh0OwotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOworI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQorICAgIFNoYXBlSW5zaWRlSW5mbyogbV9zaGFwZUluc2lkZUluZm87CiAjZW5k
aWYKIAogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBsYXlvdXQgY2xpcCBy
ZWN0IGFuZCB0aGUgcGFpbnQgY2xpcCByZWN0IHdoaWNoIG1heSBiZSBsYXJnZXIsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBiMGQxNTlmMmU3NGEwOWIwNzlk
NjcyN2VkOWVjMTNjMGYzMDk0NDM3Li5mYTgwM2U5Zjc3Y2FhYzhmMDEwMjVhMTRlNjVhYjAzOTM1
NTEyZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTY3
LDggKzY3LDggQEAKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZv
LmgiCisjaW5jbHVkZSAiU2hhcGVJbnNpZGVJbmZvLmgiCisjaW5jbHVkZSAiU2hhcGVPdXRzaWRl
SW5mby5oIgogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KICNpbmNsdWRlIDx3
dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CkBAIC0zNjMsOSArMzYzLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHkKICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIAogI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQotICAgIC8vIEZJWE1FOiBCdWcgODk5OTM6IFN0eWxlIGNoYW5n
ZXMgc2hvdWxkIGFmZmVjdCB0aGUgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvcyBmb3Igb3RoZXIg
cmVuZGVyIGJsb2NrcyB0aGF0Ci0gICAgLy8gc2hhcmUgdGhlIHNhbWUgRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvCi0gICAgdXBkYXRlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZShuZXdTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxl
LT5yZXNvbHZlZFNoYXBlSW5zaWRlKCkgOiAwKTsKKyAgICB1cGRhdGVTaGFwZUluc2lkZUluZm9B
ZnRlclN0eWxlQ2hhbmdlKG5ld1N0eWxlLT5yZXNvbHZlZFNoYXBlSW5zaWRlKCksIG9sZFN0eWxl
ID8gb2xkU3R5bGUtPnJlc29sdmVkU2hhcGVJbnNpZGUoKSA6IDApOwogI2VuZGlmCiAKICAgICBp
ZiAoIWlzQW5vbnltb3VzQmxvY2soKSkgewpAQCAtMTQ0MCwxNyArMTQzOCwxOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXQoKQogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi12b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdl
KGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlLCBjb25zdCBFeGNsdXNpb25T
aGFwZVZhbHVlKiBvbGRTaGFwZUluc2lkZSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNoYXBl
SW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUs
IGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBlSW5zaWRlKQogewogICAgIC8vIEZJWE1FOiBBIGZ1
dHVyZSBvcHRpbWl6YXRpb24gd291bGQgZG8gYSBkZWVwIGNvbXBhcmlzb24gZm9yIGVxdWFsaXR5
LgogICAgIGlmIChzaGFwZUluc2lkZSA9PSBvbGRTaGFwZUluc2lkZSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm87CiAgICAgaWYgKHNoYXBl
SW5zaWRlKSB7Ci0gICAgICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvID0gZW5zdXJlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgICAg
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsKKyAgICAgICAgc2hh
cGVJbnNpZGVJbmZvID0gZW5zdXJlU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIHNoYXBlSW5z
aWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZXRFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8obnVsbHB0cik7CisgICAgICAgIHNldFNoYXBlSW5zaWRlSW5m
byhudWxscHRyKTsKICAgICAgICAgbWFya1NoYXBlSW5zaWRlRGVzY2VuZGFudHNGb3JMYXlvdXQo
KTsKICAgICB9CiB9CkBAIC0xNDcyLDE2ICsxNDcxLDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1h
cmtTaGFwZUluc2lkZURlc2NlbmRhbnRzRm9yTGF5b3V0KCkKIH0KICNlbmRpZgogCi1zdGF0aWMg
aW5saW5lIGJvb2wgZXhjbHVzaW9uSW5mb1JlcXVpcmVzUmVsYXlvdXQoY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrKQorc3RhdGljIGlubGluZSBib29sIHNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQo
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogewogI2lmICFFTkFCTEUoQ1NTX1NIQVBFUykKICAg
ICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogaW5m
byA9IGJsb2NrLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUlu
Zm8qIGluZm8gPSBibG9jay0+c2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgaWYgKGluZm8pCiAgICAg
ICAgIGluZm8tPnNldE5lZWRzTGF5b3V0KGluZm8tPnNoYXBlU2l6ZURpcnR5KCkpOwogICAgIGVs
c2UKLSAgICAgICAgaW5mbyA9IGJsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KTsKKyAgICAgICAgaW5mbyA9IGJsb2NrLT5sYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKICAgICBy
ZXR1cm4gaW5mbyAmJiBpbmZvLT5uZWVkc0xheW91dCgpOwogI2VuZGlmCiB9CkBAIC0xNDg5LDEx
ICsxNDg4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxh
eW91dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiBib29sIFJlbmRlckJsb2NrOjp1cGRhdGVS
ZWdpb25zQW5kRXhjbHVzaW9uc0JlZm9yZUNoaWxkTGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqIGZs
b3dUaHJlYWQpCiB7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgaWYgKCFmbG93VGhyZWFk
ICYmICFleGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSkKKyAgICBpZiAoIWZsb3dUaHJlYWQgJiYg
IXNoYXBlSW5zaWRlSW5mbygpKQogI2Vsc2UKICAgICBpZiAoIWZsb3dUaHJlYWQpCiAjZW5kaWYK
LSAgICAgICAgcmV0dXJuIGV4Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOworICAg
ICAgICByZXR1cm4gc2hhcGVJbmZvUmVxdWlyZXNSZWxheW91dCh0aGlzKTsKIAogICAgIExheW91
dFVuaXQgb2xkSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgIExheW91dFVuaXQgb2xkVG9w
ID0gbG9naWNhbFRvcCgpOwpAQCAtMTUwNCw3ICsxNTAzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExheW91dChSZW5kZXJGbG93VGhy
ZWFkKgogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgIGNvbXB1dGVFeGNsdXNpb25TaGFwZVNpemUoKTsKKyAgICBjb21wdXRlU2hhcGVTaXpl
KCk7CiAjZW5kaWYKIAogICAgIC8vIFNldCBvdXIgc3RhcnQgYW5kIGVuZCByZWdpb25zLiBObyBy
ZWdpb25zIGFib3ZlIG9yIGJlbG93IHVzIHdpbGwgYmUgY29uc2lkZXJlZCBieSBvdXIgY2hpbGRy
ZW4uIFRoZXkgYXJlCkBAIC0xNTE0LDE2ICsxNTEzLDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnVw
ZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQoUmVuZGVyRmxvd1RocmVh
ZCoKICAgICBzZXRMb2dpY2FsSGVpZ2h0KG9sZEhlaWdodCk7CiAgICAgc2V0TG9naWNhbFRvcChv
bGRUb3ApOwogICAgIAotICAgIHJldHVybiBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxheW91dCh0
aGlzKTsKKyAgICByZXR1cm4gc2hhcGVJbmZvUmVxdWlyZXNSZWxheW91dCh0aGlzKTsKIH0KIAog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUV4Y2x1c2lv
blNoYXBlU2l6ZSgpCit2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlU2hhcGVTaXplKCkKIHsKLSAg
ICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IHRo
aXMtPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmIChleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8pIHsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHRoaXMt
PnNoYXBlSW5zaWRlSW5mbygpOworICAgIGlmIChzaGFwZUluc2lkZUluZm8pIHsKICAgICAgICAg
Ym9vbCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29sdmFibGUgPSBwZXJjZW50YWdlTG9naWNh
bEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jayh0aGlzLCBmYWxzZSk7Ci0gICAgICAgIGV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby0+c2V0U2hhcGVTaXplKGxvZ2ljYWxXaWR0aCgpLCBwZXJjZW50
YWdlTG9naWNhbEhlaWdodFJlc29sdmFibGUgPyBsb2dpY2FsSGVpZ2h0KCkgOiBMYXlvdXRVbml0
KCkpOworICAgICAgICBzaGFwZUluc2lkZUluZm8tPnNldFNoYXBlU2l6ZShsb2dpY2FsV2lkdGgo
KSwgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9naWNhbEhlaWdodCgpIDog
TGF5b3V0VW5pdCgpKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTE1MzIsNyArMTUzMSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0ZXJDaGlsZExheW91
dChSZW5kZXJGbG93VGhyZWFkKiBmCiB7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgLy8g
QSBwcmV2aW91cyBzaWJsaW5nIGhhcyBjaGFuZ2VkIGRpbWVuc2lvbiwgc28gd2UgbmVlZCB0byBy
ZWxheW91dCB0aGUgc2hhcGUgd2l0aCB0aGUgY29udGVudAotICAgIEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBsYXlvdXRTaGFwZUlu
c2lkZUluZm8oKTsKICAgICBpZiAoaGVpZ2h0Q2hhbmdlZCAmJiBzaGFwZUluc2lkZUluZm8pCiAg
ICAgICAgIHNoYXBlSW5zaWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsKICNlbmRpZgpAQCAtNDAx
MSwxMCArNDAxMCwxMCBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2Nr
OjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgfQogCiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRl
ID0gby0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgIFNoYXBlT3V0c2lkZUluZm8q
IHNoYXBlT3V0c2lkZSA9IG8tPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRz
aWRlKSB7CiAgICAgICAgIHNoYXBlT3V0c2lkZS0+c2V0U2hhcGVTaXplKG8tPmxvZ2ljYWxXaWR0
aCgpLCBvLT5sb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICAvLyBUaGUgQ1NTIEV4Y2x1c2lvbnMg
c3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhlIG1hcmdpbnMgYXJlIGlnbm9yZWQKKyAgICAgICAg
Ly8gVGhlIENTUyBTaGFwZXMgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhlIG1hcmdpbnMgYXJl
IGlnbm9yZWQKICAgICAgICAgLy8gd2hlbiBhIGZsb2F0IGhhcyBhIHNoYXBlIG91dHNpZGUuCiAg
ICAgICAgIHNldExvZ2ljYWxXaWR0aEZvckZsb2F0KG5ld09iaiwgc2hhcGVPdXRzaWRlLT5zaGFw
ZUxvZ2ljYWxXaWR0aCgpKTsKICAgICB9IGVsc2UKQEAgLTQwOTIsNyArNDA5MSw3IEBAIExheW91
dFBvaW50IFJlbmRlckJsb2NrOjpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29uc3Qg
RmxvYXRpbmdPYmplY3QqIGZsCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXQ7IC8v
IENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQog
ICAgIC8vIEZJWE1FIEJ1ZyAxMDI5NDg6IFRoaXMgb25seSB3b3JrcyBmb3Igc2hhcGUgb3V0c2lk
ZSBkaXJlY3RseSBzZXQgb24gdGhpcyBibG9jay4KLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8qIHNoYXBlSW5zaWRlSW5mbyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNo
YXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+c2hhcGVJbnNpZGVJbmZvKCk7
CiAgICAgLy8gRklYTUUgQnVnIDEwMjg0NjogVGFrZSBpbnRvIGFjY291bnQgdGhlIGhlaWdodCBv
ZiB0aGUgY29udGVudC4gVGhlIG9mZnNldCBzaG91bGQgYmUKICAgICAvLyBlcXVhbCB0byB0aGUg
bWF4aW11bSBzZWdtZW50IGxlbmd0aC4KICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvICYmIHNoYXBl
SW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSAmJiBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCku
c2l6ZSgpID09IDEpIHsKQEAgLTQyNDcsOCArNDI0Niw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBv
c2l0aW9uTmV3RmxvYXRzKCkKIAogICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRp
bmdPYmplY3QsIGZsb2F0TG9naWNhbExvY2F0aW9uLnkoKSk7CiAjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCi0gICAgICAgIGlmIChjaGlsZEJveC0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKQot
ICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBjaGls
ZEJveC0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpLT5zaGFwZUxvZ2ljYWxIZWlnaHQoKSk7
CisgICAgICAgIGlmIChjaGlsZEJveC0+c2hhcGVPdXRzaWRlSW5mbygpKQorICAgICAgICAgICAg
c2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBjaGlsZEJveC0+c2hhcGVP
dXRzaWRlSW5mbygpLT5zaGFwZUxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKICNlbmRp
ZgogICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBs
b2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGRCb3gpICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hp
bGRCb3gpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChjaGlsZEJveCkpOwpAQCAtNDQzNCw3ICs0NDMz
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW4KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAg
ICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IGFkYXB0ZXIubGFzdEZsb2F0
KCk7CiAgICAgICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZz
ZXQgJiYgbGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mbyogc2hhcGVPdXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvKCkpIHsKKyAgICAgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFw
ZU91dHNpZGUgPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgewog
ICAgICAgICAgICAgICAgIHNoYXBlT3V0c2lkZS0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsb2dp
Y2FsVG9wIC0gbG9naWNhbFRvcEZvckZsb2F0KGxhc3RGbG9hdCkgKyBzaGFwZU91dHNpZGUtPnNo
YXBlTG9naWNhbFRvcCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBsZWZ0ICs9
IHNoYXBlT3V0c2lkZS0+cmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCk7CiAgICAg
ICAgICAgICB9CkBAIC00NDkyLDcgKzQ0OTEsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjps
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0ID0gYWRhcHRlci5sYXN0RmxvYXQoKTsKICAgICAgICAgaWYgKG9mZnNldE1vZGUgPT0g
U2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBsYXN0RmxvYXQpIHsKLSAgICAgICAgICAg
IGlmIChFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0RmxvYXQt
PnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKSkgeworICAgICAgICAgICAg
aWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIo
KS0+c2hhcGVPdXRzaWRlSW5mbygpKSB7CiAgICAgICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT5j
b21wdXRlU2VnbWVudHNGb3JMaW5lKGxvZ2ljYWxUb3AgLSBsb2dpY2FsVG9wRm9yRmxvYXQobGFz
dEZsb2F0KSArIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHQp
OwogICAgICAgICAgICAgICAgIHJpZ2h0RmxvYXRPZmZzZXQgKz0gc2hhcGVPdXRzaWRlLT5sZWZ0
U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSgpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA3MTM0MjQ5ZmJmMzQxNWFkMzI2ODAzZjA0
MTlhYTljYjQ5NjMwY2JkLi5mNzczMmU3ZTFlY2EwY2ZlNGE5OTljZGNhZWRmMzBiZDRmY2YwNThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMzUsOCArMzUsOCBA
QAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiCi0jaW5jbHVkZSAiRXhjbHVz
aW9uU2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5mby5oIgorI2luY2x1ZGUg
IlNoYXBlVmFsdWUuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NDYsMjgg
KzQ0NiwyOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAg
IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZW5zdXJlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KCkKKyAgICBTaGFwZUluc2lkZUluZm8qIGVuc3VyZVNoYXBlSW5zaWRlSW5mbygpCiAgICAgewog
ICAgICAgICBpZiAoIW1fcmFyZURhdGEgfHwgIW1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZv
KQotICAgICAgICAgICAgc2V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbzo6Y3JlYXRlSW5mbyh0aGlzKSk7CisgICAgICAgICAgICBzZXRTaGFwZUluc2lk
ZUluZm8oU2hhcGVJbnNpZGVJbmZvOjpjcmVhdGVJbmZvKHRoaXMpKTsKICAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvLmdldCgpOwogICAgIH0KIAotICAgIEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKKyAg
ICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoIW1fcmFyZURhdGEgfHwgIW1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm86OmlzRW5hYmxlZEZvcih0aGlzKSA/IG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvLmdl
dCgpIDogMDsKKyAgICAgICAgcmV0dXJuIFNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRo
aXMpID8gbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8uZ2V0KCkgOiAwOwogICAgIH0KLSAg
ICB2b2lkIHNldEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhQYXNzT3duUHRyPEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbz4gdmFsdWUpCisgICAgdm9pZCBzZXRTaGFwZUluc2lkZUluZm8oUGFzc093
blB0cjxTaGFwZUluc2lkZUluZm8+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCFtX3JhcmVE
YXRhKQogICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1Jh
cmVEYXRhKHRoaXMpKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8gPSB2
YWx1ZTsKICAgICB9CiAgICAgdm9pZCBtYXJrU2hhcGVJbnNpZGVEZXNjZW5kYW50c0ZvckxheW91
dCgpOwotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogbGF5b3V0RXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm9TaGFyaW5nKCkgY29uc3QgeyByZXR1cm4gIWlzSW5saW5lKCkgJiYgIWlzRmxvYXRpbmcoKTsg
fQorICAgIFNoYXBlSW5zaWRlSW5mbyogbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCkgY29uc3Q7Cisg
ICAgYm9vbCBhbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkgY29uc3QgeyByZXR1cm4gIWlz
SW5saW5lKCkgJiYgIWlzRmxvYXRpbmcoKTsgfQogI2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTU4
NSw4ICs1ODUsOCBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCi0gICAgdm9pZCBjb21wdXRlRXhjbHVzaW9uU2hhcGVTaXplKCk7Ci0gICAgdm9pZCB1cGRh
dGVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IEV4Y2x1c2lv
blNoYXBlVmFsdWUqLCBjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBvbGRFeGNsdXNpb25TaGFw
ZSk7CisgICAgdm9pZCBjb21wdXRlU2hhcGVTaXplKCk7CisgICAgdm9pZCB1cGRhdGVTaGFwZUlu
c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqLCBjb25zdCBTaGFwZVZh
bHVlKiBvbGRTaGFwZSk7CiAjZW5kaWYKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlz
dCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogICAgIHZpcnR1YWwg
Y29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiBjaGlsZHJlbigpOyB9CkBAIC03ODksNyArNzg5LDcgQEAgcHJpdmF0ZToKICAgICBMYXlv
dXRVbml0IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0KiBjaGlsZCkgY29uc3QKICAgICB7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAg
IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxkLT5yZW5kZXJl
cigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCk7CisgICAgICAgIFNoYXBlT3V0c2lkZUlu
Zm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7
CiAgICAgICAgIGlmIChzaGFwZU91dHNpZGUpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngo
KTsKICNlbmRpZgpAQCAtODAzLDcgKzgwMyw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCB5
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBGbG9hdGluZ09iamVjdCogY2hp
bGQpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBFeGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvICpzaGFwZU91dHNpZGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+ZXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZvICpzaGFw
ZU91dHNpZGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAg
ICBpZiAoc2hhcGVPdXRzaWRlKQogICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT55KCk7CiAjZW5k
aWYKQEAgLTEwODQsOCArMTA4NCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5k
RmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOwogICAgIHZvaWQg
bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJl
c29sdmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBCaWRp
U3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0
ZWRMaW5lcyk7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgdm9pZCB1cGRhdGVTaGFwZUFu
ZFNlZ21lbnRzRm9yQ3VycmVudExpbmUoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiwgTGF5b3V0
VW5pdCYsIExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wmKTsKLSAgICBib29sIGFkanVzdExvZ2ljYWxM
aW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyos
IExheW91dFVuaXQsIExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIEZsb2F0
aW5nT2JqZWN0KiwgSW5saW5lSXRlcmF0b3ImLCBXb3JkTWVhc3VyZW1lbnRzJik7CisgICAgdm9p
ZCB1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVudExpbmUoU2hhcGVJbnNpZGVJbmZvKiwg
TGF5b3V0VW5pdCYsIExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wmKTsKKyAgICBib29sIGFkanVzdExv
Z2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKFNoYXBlSW5zaWRlSW5mbyosIExh
eW91dFVuaXQsIExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIEZsb2F0aW5n
T2JqZWN0KiwgSW5saW5lSXRlcmF0b3ImLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAjZW5kaWYKICAg
ICBjb25zdCBJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdl
KExheW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0
LCAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIElubGluZUJpZGlS
ZXNvbHZlciYsICBjb25zdCBJbmxpbmVJdGVyYXRvciYpOwogICAgIHZvaWQgbGlua1RvRW5kTGlu
ZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYpOwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgcHVibGlj
OgogCiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fbGluZUJyZWFrVG9Bdm9pZFdpZG93OwogI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvPiBtX3NoYXBlSW5zaWRlSW5mbzsKKyAgICAgICAgT3duUHRyPFNoYXBlSW5zaWRlSW5mbz4g
bV9zaGFwZUluc2lkZUluZm87CiAjZW5kaWYKICAgICAgICAgYm9vbCBtX3Nob3VsZEJyZWFrQXRM
aW5lVG9Bdm9pZFdpZG93IDogMTsKICAgICAgICAgYm9vbCBtX2Rpc2NhcmRNYXJnaW5CZWZvcmUg
OiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAppbmRleCAxN2Y0MzFhNzVkNDliZjk5NDJiZjcwNGQwMzIwYTRhZjZiZmE2YjMzLi5m
Yjk1ZTY0NjllMzliZTllYjE2NGIwZWZjNjM3YzEwMTAxNzRlNTc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNDgsNyAr
NDgsNyBAQAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKICNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIK
KyNpbmNsdWRlICJTaGFwZUluc2lkZUluZm8uaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNWRykK
QEAgLTc3LDE2ICs3NywxNiBAQCBzdGF0aWMgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0Rm9yTGlu
ZShjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExpbgogfQogCiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCi1FeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIFJlbmRlckJsb2NrOjps
YXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25zdAorU2hhcGVJbnNpZGVJbmZvKiBS
ZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKIHsKLSAgICBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFw
ZUluc2lkZUluZm8gPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnNoYXBlSW5zaWRlSW5mbygpOwog
Ci0gICAgaWYgKCFzaGFwZUluc2lkZUluZm8gJiYgZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygp
ICYmIGFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkgeworICAgIGlmICgh
c2hhcGVJbnNpZGVJbmZvICYmIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSAmJiBhbGxvd3NT
aGFwZUluc2lkZUluZm9TaGFyaW5nKCkpIHsKICAgICAgICAgLy8gcmVnaW9uQXRCbG9ja09mZnNl
dCByZXR1cm5zIHJlZ2lvbnMgbGlrZSBhbiBhcnJheSBmaXJzdD17MCxOLTF9LCBzZWNvbmQ9e04s
TS0xfSwgLi4uCiAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbG9naWNhbEhlaWdodCgpICsg
bG9naWNhbEhlaWdodEZvckxpbmUodGhpcywgZmFsc2UpIC0gTGF5b3V0VW5pdCgxKTsKICAgICAg
ICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7CiAg
ICAgICAgIGlmIChyZWdpb24pCi0gICAgICAgICAgICBzaGFwZUluc2lkZUluZm8gPSByZWdpb24t
PmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICAgICAgc2hhcGVJbnNpZGVJbmZv
ID0gcmVnaW9uLT5zaGFwZUluc2lkZUluZm8oKTsKICAgICB9CiAKICAgICByZXR1cm4gc2hhcGVJ
bnNpZGVJbmZvOwpAQCAtMTE0LDkgKzExNCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFT
U0VSVChibG9jayk7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgICAgIGlmIChleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8pCi0gICAgICAgICAgICBtX3NlZ21lbnQgPSBleGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8tPmN1cnJlbnRTZWdtZW50KCk7CisgICAgICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNp
ZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIGlmIChz
aGFwZUluc2lkZUluZm8pCisgICAgICAgICAgICBtX3NlZ21lbnQgPSBzaGFwZUluc2lkZUluZm8t
PmN1cnJlbnRTZWdtZW50KCk7CiAjZW5kaWYKICAgICAgICAgdXBkYXRlQXZhaWxhYmxlV2lkdGgo
KTsKICAgICB9CkBAIC0xOTYsMjEgKzE5NiwyMSBAQCBpbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnNo
cmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChSZW5kZXJCbG9jazo6RmxvYQog
ICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9hdCBvbiB0aGUgc2FtZSBsaW5lLCB3
ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9yZGVyIHRvIHBvc2l0aW9uCiAgICAg
Ly8gYmFzZWQgb24gdGhlIGJvdW5kaW5nIGJveC4gSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgbmVl
ZCB0byB3YWxrIGJhY2sgdGhyb3VnaCB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgdG8gZmluZAog
ICAgIC8vIHRoZSBmaXJzdCBwcmV2aW91cyBmbG9hdCB0aGF0IGlzIG9uIHRoZSBzYW1lIHNpZGUg
YXMgb3VyIG5ld0Zsb2F0LgotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIGxhc3RTaGFw
ZU91dHNpZGVJbmZvID0gMDsKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBsYXN0U2hhcGVPdXRzaWRl
SW5mbyA9IDA7CiAgICAgY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwogICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJl
Z2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICBmb3IgKC0taXQ7IGl0ICE9IGJl
Z2luOyAtLWl0KSB7CiAgICAgICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogbGFzdEZs
b2F0ID0gKml0OwogICAgICAgICBpZiAobGFzdEZsb2F0ICE9IG5ld0Zsb2F0ICYmIGxhc3RGbG9h
dC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkpIHsKLSAgICAgICAgICAgIGxhc3RTaGFwZU91
dHNpZGVJbmZvID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvKCk7CisgICAgICAgICAgICBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IGxhc3RGbG9hdC0+cmVu
ZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAgICAgICAgaWYgKGxhc3RTaGFwZU91
dHNpZGVJbmZvKQogICAgICAgICAgICAgICAgIGxhc3RTaGFwZU91dHNpZGVJbmZvLT5jb21wdXRl
U2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSAtIG1fYmxvY2stPmxvZ2lj
YWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgbGFzdFNoYXBlT3V0c2lkZUluZm8tPnNoYXBlTG9n
aWNhbFRvcCgpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBtX2lzRmlyc3RMaW5lKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+
ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBl
T3V0c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwog
ICAgIGlmIChzaGFwZU91dHNpZGVJbmZvKQogICAgICAgICBzaGFwZU91dHNpZGVJbmZvLT5jb21w
dXRlU2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSAtIG1fYmxvY2stPmxv
Z2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCkgKyBzaGFwZU91dHNpZGVJbmZvLT5zaGFwZUxvZ2lj
YWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9pc0ZpcnN0TGluZSkpOwog
I2VuZGlmCkBAIC0xMDM1LDEwICsxMDM1LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJ
bmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsCiAg
ICAgdXBkYXRlTG9naWNhbElubGluZVBvc2l0aW9ucyh0aGlzLCBsaW5lTG9naWNhbExlZnQsIGxp
bmVMb2dpY2FsUmlnaHQsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaXNGaXJzdExpbmUsIHNob3Vs
ZEluZGVudFRleHQsIDApOwogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2luZzsKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmIChl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8gJiYgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5oYXNT
ZWdtZW50cygpKSB7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBsYXlv
dXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hhcGVJbnNpZGVJbmZvICYmIHNoYXBlSW5z
aWRlSW5mby0+aGFzU2VnbWVudHMoKSkgewogICAgICAgICBCaWRpUnVuKiBzZWdtZW50U3RhcnQg
PSBmaXJzdFJ1bjsKLSAgICAgICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzID0gZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOworICAgICAgICBjb25zdCBTZWdtZW50TGlz
dCYgc2VnbWVudHMgPSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCk7CiAgICAgICAgIGZsb2F0
IGxvZ2ljYWxMZWZ0ID0gbWF4PGZsb2F0Pihyb3VuZFRvSW50KHNlZ21lbnRzWzBdLmxvZ2ljYWxM
ZWZ0KSwgbGluZUxvZ2ljYWxMZWZ0KTsKICAgICAgICAgZmxvYXQgbG9naWNhbFJpZ2h0ID0gbWlu
PGZsb2F0PihmbG9vclRvSW50KHNlZ21lbnRzWzBdLmxvZ2ljYWxSaWdodCksIGxpbmVMb2dpY2Fs
UmlnaHQpOwogICAgICAgICBmbG9hdCBzdGFydExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnQ7CkBA
IC0xMzU5LDEzICsxMzU5LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVu
c0ZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBJbmxpbmVCaWRpCiAgICAgVU5VU0VE
X1BBUkFNKGJsb2NrKTsKICAgICBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQodG9wUmVzb2x2
ZXIsIGJpZGlSdW5zLCBlbmRPZkxpbmUsIG92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHkpOwogI2Vsc2UKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyA9IGJsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAg
ICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyB8fCAhZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLT5oYXNTZWdtZW50cygpKSB7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUlu
Zm8gPSBibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKCFzaGFwZUluc2lk
ZUluZm8gfHwgIXNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgewogICAgICAgICBjb25z
dHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQodG9wUmVzb2x2ZXIsIGJpZGlSdW5zLCBlbmRPZkxpbmUs
IG92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgY29uc3QgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdlcyA9IGV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOworICAgIGNvbnN0IFNlZ21lbnRS
YW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5nZXMo
KTsKICAgICBBU1NFUlQoc2VnbWVudFJhbmdlcy5zaXplKCkpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzZWdtZW50UmFuZ2VzLnNpemUoKTsgaSsrKSB7CkBAIC0xNjMxLDI2ICsxNjMx
LDI2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgZmlyc3RQb3NpdGl2ZVdpZHRoKGNvbnN0IFdvcmRN
ZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgTGF5b3V0VW5pdCBhZGp1c3RMb2dpY2FsTGluZVRvcChFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgSW5saW5lSXRlcmF0b3Igc3RhcnQs
IElubGluZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVt
ZW50cykKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBhZGp1c3RMb2dpY2FsTGluZVRvcChTaGFw
ZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywgSW5saW5lSXRlcmF0b3Igc3RhcnQsIElubGlu
ZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cykK
IHsKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyB8fCBlbmQgIT0gc3RhcnQpCisg
ICAgaWYgKCFzaGFwZUluc2lkZUluZm8gfHwgZW5kICE9IHN0YXJ0KQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIGZsb2F0IG1pbldpZHRoID0gZmlyc3RQb3NpdGl2ZVdpZHRoKHdvcmRNZWFzdXJl
bWVudHMpOwogICAgIEFTU0VSVChtaW5XaWR0aCB8fCB3b3JkTWVhc3VyZW1lbnRzLmlzRW1wdHko
KSk7Ci0gICAgaWYgKG1pbldpZHRoID4gMCAmJiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmFk
anVzdExvZ2ljYWxMaW5lVG9wKG1pbldpZHRoKSkKLSAgICAgICAgcmV0dXJuIGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVUb3AoKTsKKyAgICBpZiAobWluV2lkdGggPiAwICYm
IHNoYXBlSW5zaWRlSW5mby0+YWRqdXN0TG9naWNhbExpbmVUb3AobWluV2lkdGgpKQorICAgICAg
ICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvLT5sb2dpY2FsTGluZVRvcCgpOwogCi0gICAgcmV0dXJu
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsQm90dG9tKCk7CisgICAgcmV0
dXJuIHNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsQm90dG9tKCk7CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2s6OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgTGF5b3V0VW5pdCYgYWJz
b2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sJiBsaW5l
T3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKQordm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVB
bmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZv
LCBMYXlvdXRVbml0JiBhYnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGJvb2wmIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUpCiB7CiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0ID0gdGhpcy0+bG9naWNhbEhlaWdodCgpOwogICAgIFJlbmRlclJl
Z2lvbiogY3VycmVudFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNhbEhlaWdodCk7
CiAgICAgaWYgKGN1cnJlbnRSZWdpb24pCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmICghZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKQorICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBsYXlvdXRTaGFwZUlu
c2lkZUluZm8oKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgTGF5b3V0VW5pdCBsaW5lVG9wID0gbG9naWNhbEhlaWdodCArIGFic29sdXRlTG9naWNh
bFRvcDsKQEAgLTE2NTgsMTggKzE2NTgsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2hh
cGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyoKIAog
ICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpIHsKICAgICAgICAgUmVuZGVyUmVnaW9u
KiBuZXh0UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChsb2dpY2FsSGVpZ2h0ICsgbGluZUhl
aWdodCAtIExheW91dFVuaXQoMSkpOwotICAgICAgICBsaW5lVG9wICs9IGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworICAgICAgICBs
aW5lVG9wICs9IHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9y
ZSgpOwogICAgICAgICAvLyBDb250ZW50IGluIGEgZmxvdyB0aHJlYWQgaXMgcmVsYXRpdmUgdG8g
dGhlIGJlZ2lubmluZyBvZiB0aGUgdGhyZWFkLCBidXQgdGhlIHNoYXBlIGNhbGN1bGF0aW9uIHNo
b3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByZWdpb24uCiAgICAgICAgIGlmIChjdXJy
ZW50UmVnaW9uID09IG5leHRSZWdpb24pCiAgICAgICAgICAgICBsaW5lVG9wIC09IGN1cnJlbnRS
ZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpOwogICAgIH0KIAogICAgIC8v
IEZJWE1FOiBCdWcgOTUzNjE6IEl0IGlzIHBvc3NpYmxlIGZvciBhIGxpbmUgdG8gZ3JvdyBiZXlv
bmQgbGluZUhlaWdodCwgaW4gd2hpY2ggY2FzZSB0aGVzZSBzZWdtZW50cyBtYXkgYmUgaW5jb3Jy
ZWN0LgotICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGlu
ZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKKyAgICBzaGFwZUluc2lkZUluZm8tPmNvbXB1dGVTZWdt
ZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CiAKICAgICAvLyBUaGUgb3ZlcmZsb3cg
c2hvdWxkIGJlIHB1c2hlZCBiZWxvdyB0aGUgY29udGVudCBib3gKLSAgICBMYXlvdXRVbml0IHNo
YXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zaGFw
ZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpOwotICAgIGlmICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSAmJiAhbGluZU92ZXJmbG93c0Zyb21TaGFwZUlu
c2lkZSAmJiBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCkgeworICAgIExheW91dFVuaXQgc2hh
cGVDb250YWluaW5nQmxvY2tIZWlnaHQgPSBzaGFwZUluc2lkZUluZm8tPnNoYXBlQ29udGFpbmlu
Z0Jsb2NrSGVpZ2h0KCk7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8tPmxpbmVXaXRoaW5TaGFw
ZUJvdW5kcygpICYmICFsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlICYmIHNoYXBlQ29udGFp
bmluZ0Jsb2NrSGVpZ2h0KSB7CiAgICAgICAgIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUg
PSB0cnVlOwogICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQgPSBzaGFwZUNvbnRh
aW5pbmdCbG9ja0hlaWdodDsKIApAQCAtMTY4MSw5ICsxNjgxLDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyoKICAgICAgICAgICAgIG5ld0xvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0ICsg
c2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgLSBsaW5lVG9wIC0gY3VycmVudFJlZ2lvbi0+Ym9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogCiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIG5leHRS
ZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG5ld0xvZ2ljYWxIZWlnaHQpOwotICAgICAgICAg
ICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBuZXh0U2hhcGVJbmZvID0gMDsKKyAgICAgICAg
ICAgIFNoYXBlSW5zaWRlSW5mbyogbmV4dFNoYXBlSW5mbyA9IDA7CiAgICAgICAgICAgICBpZiAo
bmV4dFJlZ2lvbikKLSAgICAgICAgICAgICAgICBuZXh0U2hhcGVJbmZvID0gbmV4dFJlZ2lvbi0+
ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgICAgICAgICAgbmV4dFNoYXBlSW5m
byA9IG5leHRSZWdpb24tPnNoYXBlSW5zaWRlSW5mbygpOwogCiAgICAgICAgICAgICAvLyBUaGUg
b3ZlcmZsb3cgZmxvd3MgaW50byBhbm90aGVyIHJlZ2lvbiB3aXRoIHNoYXBlLWluc2lkZQogICAg
ICAgICAgICAgaWYgKGN1cnJlbnRSZWdpb24gIT0gbmV4dFJlZ2lvbiAmJiBuZXh0U2hhcGVJbmZv
KSB7CkBAIC0xNjkyLDcgKzE2OTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTaGFwZUFu
ZFNlZ21lbnRzRm9yQ3VycmVudExpbmUoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKgogICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbmV4dFNoYXBlSW5mby0+c2hhcGVMb2dpY2Fs
VG9wKCkgLSBuZXh0UmVnaW9uLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgICAg
ICAgICAgbmV4dFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShvZmZzZXQsIGxpbmVI
ZWlnaHQpOwogCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbmV4
dFNoYXBlSW5mbzsKKyAgICAgICAgICAgICAgICBzaGFwZUluc2lkZUluZm8gPSBuZXh0U2hhcGVJ
bmZvOwogICAgICAgICAgICAgICAgIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUgPSBmYWxz
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcwMCw5ICsxNzAwLDkgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbyoKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmFkanVzdExv
Z2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBMYXlvdXRVbml0IGFic29sdXRlTG9naWNh
bFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIElubGlu
ZUl0ZXJhdG9yJiBlbmQsIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCitib29s
IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRl
ZChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywgTGF5b3V0VW5pdCBhYnNvbHV0ZUxv
Z2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2ZXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBJ
bmxpbmVJdGVyYXRvciYgZW5kLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQog
ewotICAgIExheW91dFVuaXQgYWRqdXN0ZWRMb2dpY2FsTGluZVRvcCA9IGFkanVzdExvZ2ljYWxM
aW5lVG9wKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgcmVzb2x2ZXIucG9zaXRpb24oKSwgZW5k
LCB3b3JkTWVhc3VyZW1lbnRzKTsKKyAgICBMYXlvdXRVbml0IGFkanVzdGVkTG9naWNhbExpbmVU
b3AgPSBhZGp1c3RMb2dpY2FsTGluZVRvcChzaGFwZUluc2lkZUluZm8sIHJlc29sdmVyLnBvc2l0
aW9uKCksIGVuZCwgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgaWYgKCFhZGp1c3RlZExvZ2ljYWxM
aW5lVG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3MjksMTkgKzE3MjksMTkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIExh
eW91dFVuaXQgYWJzb2x1dGVMb2dpY2FsVG9wOwotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykgewotICAgICAgICBBU1NF
UlQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKTsKLSAgICAgICAgaWYgKGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSkgeworICAg
IFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZv
KCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbykgeworICAgICAgICBBU1NFUlQoc2hhcGVJbnNp
ZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzU2hhcGVJbnNpZGVJbmZvU2hhcmluZygp
KTsKKyAgICAgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5zaGFwZUluc2lkZUluZm8o
KSkgewogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMDI4NDogSWYgc3Vic2VxdWVudCBMYXlv
dXRTdGF0ZXMgYXJlIHB1c2hlZCwgd2Ugd2lsbCBoYXZlIHRvIGFkZAogICAgICAgICAgICAgLy8g
dGhlaXIgb2Zmc2V0cyBmcm9tIHRoZSBvcmlnaW5hbCBzaGFwZS1pbnNpZGUgY29udGFpbmVyLgog
ICAgICAgICAgICAgYWJzb2x1dGVMb2dpY2FsVG9wID0gbG9naWNhbFRvcCgpOwogICAgICAgICB9
CiAgICAgICAgIC8vIEJlZ2luIGxheW91dCBhdCB0aGUgbG9naWNhbCB0b3Agb2Ygb3VyIHNoYXBl
IGluc2lkZS4KLSAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQoKSArIGFic29sdXRlTG9naWNhbFRv
cCA8IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkpIHsKLSAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by0+c2hhcGVMb2dpY2FsVG9wKCkgLSBhYnNvbHV0ZUxvZ2ljYWxUb3A7CisgICAgICAgIGlmIChs
b2dpY2FsSGVpZ2h0KCkgKyBhYnNvbHV0ZUxvZ2ljYWxUb3AgPCBzaGFwZUluc2lkZUluZm8tPnNo
YXBlTG9naWNhbFRvcCgpKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQg
PSBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpIC0gYWJzb2x1dGVMb2dpY2FsVG9w
OwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkKLSAgICAgICAgICAg
ICAgICBsb2dpY2FsSGVpZ2h0IC09IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQg
LT0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAg
ICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTc2OSw3ICsxNzY5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0Fu
ZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAoY29udGFpbnNG
bG9hdHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpIDogMDsKIAogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotICAgICAgICB1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVu
dExpbmUoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGxheW91
dFN0YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKTsKKyAgICAgICAgdXBkYXRlU2hh
cGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKHNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dp
Y2FsVG9wLCBsYXlvdXRTdGF0ZSwgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSk7CiAjZW5k
aWYKICAgICAgICAgV29yZE1lYXN1cmVtZW50cyB3b3JkTWVhc3VyZW1lbnRzOwogICAgICAgICBl
bmQgPSBsaW5lQnJlYWtlci5uZXh0TGluZUJyZWFrKHJlc29sdmVyLCBsYXlvdXRTdGF0ZS5saW5l
SW5mbygpLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2Vj
dXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJlbWVudHMpOwpAQCAtMTc4NSw3ICsxNzg1
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKENT
U19TSEFQRVMpCi0gICAgICAgIGlmIChhZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWln
aHRJZk5lZWRlZChleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIGFic29sdXRlTG9naWNhbFRvcCwg
bGF5b3V0U3RhdGUsIHJlc29sdmVyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBlbmQsIHdv
cmRNZWFzdXJlbWVudHMpKQorICAgICAgICBpZiAoYWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dp
Y2FsSGVpZ2h0SWZOZWVkZWQoc2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGxh
eW91dFN0YXRlLCByZXNvbHZlciwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgZW5kLCB3b3Jk
TWVhc3VyZW1lbnRzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgICAgIEFT
U0VSVChlbmQgIT0gcmVzb2x2ZXIucG9zaXRpb24oKSk7CkBAIC0yNzM4LDI5ICsyNzM4LDI5IEBA
IElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAjaWYgIUVOQUJMRShDU1NfU0hBUEVTKQogICAgIHJl
dHVybiBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8s
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3
b3JkTWVhc3VyZW1lbnRzKTsKICNlbHNlCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IG1fYmxv
Y2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogCi0gICAgaWYgKCFleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8gfHwgIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+bGluZU92ZXJsYXBzU2hhcGVC
b3VuZHMoKSkKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbyB8fCAhc2hhcGVJbnNpZGVJbmZvLT5s
aW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQogICAgICAgICByZXR1cm4gbmV4dFNlZ21lbnRCcmVh
ayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CiAK
ICAgICAvLyBJbiBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSB3ZSBoYXZlIHRvIHVzZSBsaW5l
T3ZlcmxhcHNTaGFwZUJvdW5kcygpIHRvIGRldGVybWluZSB0aGUgbGluZSBzZWdtZW50cyBzaW5j
ZSBzaGFwZS1vdXRzaWRlJ3MgY29kZXBhdGhzIHVzZXMgdGhlIHNhbWUgY29kZSB0byBkZXRlcm1p
bmUgaXRzIHNlZ21lbnRzLiBUaGUgbGluZSBjb250YWluaW5nIGlzIG5vdCBhIHJlcXVpcmVtZW50
IGZvciBzaGFwZS1vdXRzaWRlLAogICAgIC8vIHNvIGluIHRoaXMgY2FzZSB3ZSBjYW4gZW5kIHVw
IHdpdGggc29tZSBleHRyYSBzZWdtZW50cyBmb3IgdGhlIG92ZXJmbG93aW5nIGNvbnRlbnQsIGJ1
dCB3ZSBkb24ndCB3YW50IHRvIGFwcGx5IHRoZSBzZWdtZW50cyBmb3IgdGhlIG92ZXJmbG93aW5n
IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gcmVzZXQgaXQuCi0gICAgaWYgKCFtX2Jsb2NrLT5mbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgJiYgIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+bGlu
ZVdpdGhpblNoYXBlQm91bmRzKCkpIHsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
LT5jbGVhclNlZ21lbnRzKCk7CisgICAgaWYgKCFtX2Jsb2NrLT5mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCkgJiYgIXNoYXBlSW5zaWRlSW5mby0+bGluZVdpdGhpblNoYXBlQm91bmRzKCkpIHsK
KyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5jbGVhclNlZ21lbnRzKCk7CiAgICAgICAgIHJldHVy
biBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywgcmVuZGVyVGV4dEluZm8sIGxh
c3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3Jk
TWVhc3VyZW1lbnRzKTsKICAgICB9CiAKICAgICBJbmxpbmVJdGVyYXRvciBlbmQgPSByZXNvbHZl
ci5wb3NpdGlvbigpOwogICAgIElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKIAotICAgIGlm
ICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CisgICAgaWYgKCFz
aGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAgICAgICAgZW5kID0gbmV4dFNlZ21l
bnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9t
UHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50
cyk7CiAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhv
bGRFbmQpOwogICAgICAgICByZXR1cm4gb2xkRW5kOwogICAgIH0KIAotICAgIGNvbnN0IFNlZ21l
bnRMaXN0JiBzZWdtZW50cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsK
LSAgICBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gZXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLT5zZWdtZW50UmFuZ2VzKCk7CisgICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRz
ID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOworICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNl
Z21lbnRSYW5nZXMgPSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5nZXMoKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWdtZW50cy5zaXplKCkgJiYgIWVuZC5hdEVuZCgpOyBp
KyspIHsKICAgICAgICAgSW5saW5lSXRlcmF0b3Igc2VnbWVudFN0YXJ0ID0gcmVzb2x2ZXIucG9z
aXRpb24oKTsKQEAgLTMzOTgsNyArMzM5OCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2Nr
OjpMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlCiAK
ICBlbmQ6CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKiBzaGFwZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5mbyA9IG1fYmxvY2stPmxheW91dFNoYXBl
SW5zaWRlSW5mbygpOwogICAgIGJvb2wgc2VnbWVudEFsbG93c092ZXJmbG93ID0gIXNoYXBlSW5m
byB8fCAhc2hhcGVJbmZvLT5oYXNTZWdtZW50cygpOwogI2Vsc2UKICAgICBib29sIHNlZ21lbnRB
bGxvd3NPdmVyZmxvdyA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CmluZGV4IDExNGRmNWIwYjI2Mjc5MmYxYjkzZDc2OTQ5MTlhYjU2YTJmMjUxMWUuLjI3YzQ2ZWYw
MTQwYzI3NDUzZmM2YzY2NjYxNjgwYTRhZTI1YmIxOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OndpbGxC
ZURlc3Ryb3llZCgpCiAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5k
YW50SWZOZWVkZWQodGhpcyk7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOworICAgIFNoYXBlT3V0c2lkZUlu
Zm86OnJlbW92ZUluZm8odGhpcyk7CiAjZW5kaWYKIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTMxNSwyMiArMzE1LDIyIEBAIHZvaWQgUmVuZGVyQm94
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlCiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgdXBkYXRlRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2Uoc3R5bGUoKS0+c2hhcGVPdXRz
aWRlKCksIG9sZFN0eWxlID8gb2xkU3R5bGUtPnNoYXBlT3V0c2lkZSgpIDogMCk7CisgICAgdXBk
YXRlU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2Uoc3R5bGUoKS0+c2hhcGVPdXRzaWRl
KCksIG9sZFN0eWxlID8gb2xkU3R5bGUtPnNoYXBlT3V0c2lkZSgpIDogMCk7CiAjZW5kaWYKIH0K
IAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFs
dWUqIHNoYXBlT3V0c2lkZSwgY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRz
aWRlKQordm9pZCBSZW5kZXJCb3g6OnVwZGF0ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hh
bmdlKGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwgY29uc3QgU2hhcGVWYWx1ZSogb2xk
U2hhcGVPdXRzaWRlKQogewogICAgIC8vIEZJWE1FOiBBIGZ1dHVyZSBvcHRpbWl6YXRpb24gd291
bGQgZG8gYSBkZWVwIGNvbXBhcmlzb24gZm9yIGVxdWFsaXR5LiAoYnVnIDEwMDgxMSkKICAgICBp
ZiAoc2hhcGVPdXRzaWRlID09IG9sZFNoYXBlT3V0c2lkZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHNoYXBlT3V0c2lkZSkgewotICAgICAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZv
KiBleGNsdXNpb25TaGFwZU91dHNpZGVJbmZvID0gRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6
ZW5zdXJlSW5mbyh0aGlzKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby0+ZGly
dHlTaGFwZVNpemUoKTsKKyAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5m
byA9IFNoYXBlT3V0c2lkZUluZm86OmVuc3VyZUluZm8odGhpcyk7CisgICAgICAgIHNoYXBlT3V0
c2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CisgICAgICAgIFNoYXBlT3V0c2lk
ZUluZm86OnJlbW92ZUluZm8odGhpcyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCmluZGV4IDlhYmY2YjQ4MGFmN2UzOGY2YTg3YmQ0NDVjMGE3MzkwYzQwNDA3
ZjguLmE3ZmMxZWNlY2ZkM2M4MDYxY2ExYjZkZjBjMDNkNzRjOThiNjY5MWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJPdmVyZmxvdy5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIgorI2luY2x1ZGUg
IlNoYXBlT3V0c2lkZUluZm8uaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
NzcsOSArNTc3LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2FtZURpcmVjdGlvbkFzKGNvbnN0
IFJlbmRlckJveCogb2JqZWN0KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBvYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpOyB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBleGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvKCkgY29uc3QKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0Zsb2F0aW5nV2l0aFNoYXBlT3V0c2lkZSgpICYm
IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcih0aGlzKSA/IEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm86OmluZm8odGhpcykgOiAwOworICAgICAgICByZXR1cm4gaXNGbG9h
dGluZ1dpdGhTaGFwZU91dHNpZGUoKSAmJiBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3Io
dGhpcykgPyBTaGFwZU91dHNpZGVJbmZvOjppbmZvKHRoaXMpIDogMDsKICAgICB9CiAjZW5kaWYK
IApAQCAtNjI0LDcgKzYyNCw3IEBAIHByb3RlY3RlZDoKICAKIHByaXZhdGU6CiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCi0gICAgdm9pZCB1cGRhdGVFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvQWZ0
ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNv
bnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNoYXBlT3V0c2lkZSk7CisgICAgdm9pZCB1cGRh
dGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBTaGFwZVZhbHVlKiBzaGFw
ZU91dHNpZGUsIGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBlT3V0c2lkZSk7CiAjZW5kaWYKIAog
ICAgIGJvb2wgZml4ZWRFbGVtZW50TGF5c091dFJlbGF0aXZlVG9GcmFtZShGcmFtZSosIEZyYW1l
VmlldyopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKaW5kZXggNjFiYjFjNjM3MGMwOWM4ZWQ2ZWE1NWZkMWUyYTQ2NDIyNWY3
MjM5NS4uYWJhZDViNzJhMzk0MjdhMzA0OGU1MWJmNDlhZmNmYTUzZjA0MWU1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02
MjcsNyArNjI3LDcgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRPZmZz
ZXQoKSBjb25zdAogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgaWYgKGlzQm94KCkgJiYg
aXNGbG9hdGluZygpKQotICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogc2hh
cGVPdXRzaWRlID0gdG9SZW5kZXJCb3godGhpcyktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8o
KSkKKyAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IHRvUmVuZGVy
Qm94KHRoaXMpLT5zaGFwZU91dHNpZGVJbmZvKCkpCiAgICAgICAgICAgICBvZmZzZXQgLT0gc2hh
cGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxPZmZzZXQoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCA4OGEwOGI4OGEzNTZkZDc5NzQwZTZhZGFkNzkzNTM1
ZWUyMWVkOTY1Li5hZTU0MzRmYzU5N2U4YTRiZmQ2OTA0YzM0MTNiMDZiYmM1NmQ2ZGYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTI0OSw4ICsyNDksOCBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFpbnQoKSB8fCBtX2xheW91dFN0YXRlLT5p
c1BhZ2luYXRlZCgpIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwgcmVuZGVyZXItPmZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKQogICAgICAgICAgICAgfHwgbV9sYXlvdXRTdGF0ZS0+bGlu
ZUdyaWQoKSB8fCAocmVuZGVyZXItPnN0eWxlKCktPmxpbmVHcmlkKCkgIT0gUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lR3JpZCgpICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpKQogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQotICAgICAgICAgICAgfHwgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkg
JiYgdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpKQot
ICAgICAgICAgICAgfHwgKG1fbGF5b3V0U3RhdGUtPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygp
ICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVyQmxvY2socmVuZGVyZXIp
LT5hbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpCisgICAgICAgICAgICB8
fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+
c2hhcGVJbnNpZGVJbmZvKCkpCisgICAgICAgICAgICB8fCAobV9sYXlvdXRTdGF0ZS0+c2hhcGVJ
bnNpZGVJbmZvKCkgJiYgcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiAhdG9SZW5kZXJCbG9j
ayhyZW5kZXJlciktPmFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKICNlbmRpZgogICAg
ICAgICAgICAgKSB7CiAgICAgICAgICAgICBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1Ro
cmVhZChyZW5kZXJlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1BvbHlnb25TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Bv
bHlnb25TaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxMjRmZDU2MDczMzU2M2I0YTBjODc4YTM4NmZk
NDQwY2E1MjgzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvUG9seWdvblNoYXBlLmNwcApAQCAtMCwwICsxLDUxMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKKworI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBFZGdlSW50ZXJzZWN0
aW9uVHlwZSB7CisgICAgTm9ybWFsLAorICAgIFZlcnRleE1pblksCisgICAgVmVydGV4TWF4WSwK
KyAgICBWZXJ0ZXhZQm90aAorfTsKKworc3RydWN0IEVkZ2VJbnRlcnNlY3Rpb24geworICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2U7CisgICAgRmxvYXRQb2ludCBwb2ludDsKKyAgICBF
ZGdlSW50ZXJzZWN0aW9uVHlwZSB0eXBlOworfTsKKworc3RhdGljIGlubGluZSBmbG9hdCBsZWZ0
U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgy
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gKChwb2ludC54KCkgLSB2
ZXJ0ZXgxLngoKSkgKiAodmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKSkpIC0gKCh2ZXJ0ZXgyLngo
KSAtIHZlcnRleDEueCgpKSAqIChwb2ludC55KCkgLSB2ZXJ0ZXgxLnkoKSkpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNSZWZsZXhWZXJ0ZXgoY29uc3QgRmxvYXRQb2ludCYgcHJldlZlcnRl
eCwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiBuZXh0VmVydGV4
KQoreworICAgIHJldHVybiBsZWZ0U2lkZShwcmV2VmVydGV4LCBuZXh0VmVydGV4LCB2ZXJ0ZXgp
IDwgMDsKK30KKworc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSogZWRnZVBvaW50ZXIsIGZsb2F0IHksIEVkZ2VJbnRlcnNlY3Rpb24mIHJlc3Vs
dCkKK3sKKyAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOwor
CisgICAgaWYgKGVkZ2UubWluWSgpID4geSB8fCBlZGdlLm1heFkoKSA8IHkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRl
eDEoKTsKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7Cisg
ICAgZmxvYXQgZHkgPSB2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpOworCisgICAgZmxvYXQgaW50
ZXJzZWN0aW9uWDsKKyAgICBFZGdlSW50ZXJzZWN0aW9uVHlwZSBpbnRlcnNlY3Rpb25UeXBlOwor
CisgICAgaWYgKCFkeSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4WUJvdGg7
CisgICAgICAgIGludGVyc2VjdGlvblggPSBlZGdlLm1pblgoKTsKKyAgICB9IGVsc2UgaWYgKHkg
PT0gZWRnZS5taW5ZKCkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1pblk7
CisgICAgICAgIGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPCB2ZXJ0ZXgyLnkoKSkgPyB2
ZXJ0ZXgxLngoKSA6IHZlcnRleDIueCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1heFko
KSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWF4WTsKKyAgICAgICAgaW50
ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA+IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDog
dmVydGV4Mi54KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IE5v
cm1hbDsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICgoeSAtIHZlcnRleDEueSgpKSAqICh2ZXJ0
ZXgyLngoKSAtIHZlcnRleDEueCgpKSAvIGR5KSArIHZlcnRleDEueCgpOworICAgIH0KKworICAg
IHJlc3VsdC5lZGdlID0gZWRnZVBvaW50ZXI7CisgICAgcmVzdWx0LnR5cGUgPSBpbnRlcnNlY3Rp
b25UeXBlOworICAgIHJlc3VsdC5wb2ludC5zZXQoaW50ZXJzZWN0aW9uWCwgeSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFNpemUgaW53YXJkRWRnZU5vcm1h
bChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlKQoreworICAgIEZsb2F0U2l6ZSBlZGdlRGVs
dGEgPSBlZGdlLnZlcnRleDIoKSAtIGVkZ2UudmVydGV4MSgpOworICAgIGlmICghZWRnZURlbHRh
LndpZHRoKCkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKGVkZ2VEZWx0YS5oZWlnaHQoKSA+
IDAgPyAtMSA6IDEpLCAwKTsKKyAgICBpZiAoIWVkZ2VEZWx0YS5oZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0U2l6ZSgwLCAoZWRnZURlbHRhLndpZHRoKCkgPiAwID8gMSA6IC0xKSk7Cisg
ICAgZmxvYXQgZWRnZUxlbmd0aCA9IGVkZ2VEZWx0YS5kaWFnb25hbExlbmd0aCgpOworICAgIHJl
dHVybiBGbG9hdFNpemUoLWVkZ2VEZWx0YS5oZWlnaHQoKSAvIGVkZ2VMZW5ndGgsIGVkZ2VEZWx0
YS53aWR0aCgpIC8gZWRnZUxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRTaXplIG91
dHdhcmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UpCit7CisgICAgcmV0
dXJuIC1pbndhcmRFZGdlTm9ybWFsKGVkZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBw
ZW5kQXJjKFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGFy
Y0NlbnRlciwgZmxvYXQgYXJjUmFkaXVzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydEFyY1ZlcnRl
eCwgY29uc3QgRmxvYXRQb2ludCYgZW5kQXJjVmVydGV4LCBib29sIHBhZGRpbmcpCit7CisgICAg
ZmxvYXQgc3RhcnRBbmdsZSA9IGF0YW4yKHN0YXJ0QXJjVmVydGV4LnkoKSAtIGFyY0NlbnRlci55
KCksIHN0YXJ0QXJjVmVydGV4LngoKSAtIGFyY0NlbnRlci54KCkpOworICAgIGZsb2F0IGVuZEFu
Z2xlID0gYXRhbjIoZW5kQXJjVmVydGV4LnkoKSAtIGFyY0NlbnRlci55KCksIGVuZEFyY1ZlcnRl
eC54KCkgLSBhcmNDZW50ZXIueCgpKTsKKyAgICBjb25zdCBmbG9hdCB0d29QSSA9IHBpRmxvYXQg
KiAyOworICAgIGlmIChzdGFydEFuZ2xlIDwgMCkKKyAgICAgICAgc3RhcnRBbmdsZSArPSB0d29Q
STsKKyAgICBpZiAoZW5kQW5nbGUgPCAwKQorICAgICAgICBlbmRBbmdsZSArPSB0d29QSTsKKyAg
ICBmbG9hdCBhbmdsZSA9IChzdGFydEFuZ2xlID4gZW5kQW5nbGUpID8gKHN0YXJ0QW5nbGUgLSBl
bmRBbmdsZSkgOiAoc3RhcnRBbmdsZSArIHR3b1BJIC0gZW5kQW5nbGUpOworICAgIGNvbnN0IGZs
b2F0IGFyY1NlZ21lbnRDb3VudCA9IDY7IC8vIEFuIGV2ZW4gbnVtYmVyIHNvIHRoYXQgb25lIGFy
YyB2ZXJ0ZXggd2lsbCBiZSBlYWN0bHkgYXJjUmFkaXVzIGZyb20gYXJjQ2VudGVyLgorICAgIGZs
b2F0IGFyY1NlZ21lbnRBbmdsZSA9ICAoKHBhZGRpbmcpID8gLWFuZ2xlIDogdHdvUEkgLSBhbmds
ZSkgLyBhcmNTZWdtZW50Q291bnQ7CisKKyAgICB2ZXJ0aWNlcy5hcHBlbmQoc3RhcnRBcmNWZXJ0
ZXgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcmNTZWdtZW50Q291bnQ7ICsraSkg
eworICAgICAgICBmbG9hdCBhbmdsZSA9IHN0YXJ0QW5nbGUgKyBhcmNTZWdtZW50QW5nbGUgKiBp
OworICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQoYXJjQ2VudGVyICsgRmxvYXRQb2ludChjb3MoYW5n
bGUpICogYXJjUmFkaXVzLCBzaW4oYW5nbGUpICogYXJjUmFkaXVzKSk7CisgICAgfQorICAgIHZl
cnRpY2VzLmFwcGVuZChlbmRBcmNWZXJ0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25h
cFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZChWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgdmVydGljZXNbaV0uc2V0KExheW91dFVuaXQodmVydGljZXNbaV0ueCgpKS50b0Zsb2F0
KCksIExheW91dFVuaXQodmVydGljZXNbaV0ueSgpKS50b0Zsb2F0KCkpOworfQorCitzdGF0aWMg
aW5saW5lIFBhc3NPd25QdHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hhcGVQYWRkaW5nQm91bmRz
KGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgcGFkZGluZywgV2luZFJ1bGUgZmls
bFJ1bGUpCit7CisgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHBhZGRlZFZlcnRpY2Vz
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50PigpKTsKKyAgICBGbG9hdFBvaW50IGlu
dGVyc2VjdGlvbjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51bWJl
ck9mRWRnZXMoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNF
ZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2Um
IHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlvdXNFZGdlKCk7CisgICAgICAgIE9mZnNldFBvbHln
b25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNFZGdlLCBpbndhcmRFZGdlTm9ybWFsKHRoaXNFZGdl
KSAqIHBhZGRpbmcpOworICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShw
cmV2RWRnZSwgaW53YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkgKiBwYWRkaW5nKTsKKworICAgICAg
ICBpZiAocHJldk9mZnNldEVkZ2UuaW50ZXJzZWN0aW9uKHRoaXNPZmZzZXRFZGdlLCBpbnRlcnNl
Y3Rpb24pKQorICAgICAgICAgICAgcGFkZGVkVmVydGljZXMtPmFwcGVuZChpbnRlcnNlY3Rpb24p
OworICAgICAgICBlbHNlIGlmIChpc1JlZmxleFZlcnRleChwcmV2RWRnZS52ZXJ0ZXgxKCksIHRo
aXNFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2UudmVydGV4MigpKSkKKyAgICAgICAgICAgIGFwcGVu
ZEFyYygqcGFkZGVkVmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwgcGFkZGluZywgcHJldk9m
ZnNldEVkZ2UudmVydGV4MigpLCB0aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgxKCksIHRydWUpOworICAg
IH0KKworICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKnBhZGRlZFZlcnRpY2VzKTsK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbihwYWRkZWRWZXJ0aWNlcy5yZWxl
YXNlKCksIGZpbGxSdWxlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUGFzc093blB0cjxGbG9hdFBv
bHlnb24+IGNvbXB1dGVTaGFwZU1hcmdpbkJvdW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHln
b24sIGZsb2F0IG1hcmdpbiwgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgT3duUHRyPFZlY3Rv
cjxGbG9hdFBvaW50PiA+IG1hcmdpblZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9h
dFBvaW50PigpKTsKKyAgICBGbG9hdFBvaW50IGludGVyc2VjdGlvbjsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51bWJlck9mRWRnZXMoKTsgKytpKSB7CisgICAgICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7Cisg
ICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlv
dXNFZGdlKCk7CisgICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNF
ZGdlLCBvdXR3YXJkRWRnZU5vcm1hbCh0aGlzRWRnZSkgKiBtYXJnaW4pOworICAgICAgICBPZmZz
ZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShwcmV2RWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwo
cHJldkVkZ2UpICogbWFyZ2luKTsKKworICAgICAgICBpZiAocHJldk9mZnNldEVkZ2UuaW50ZXJz
ZWN0aW9uKHRoaXNPZmZzZXRFZGdlLCBpbnRlcnNlY3Rpb24pKQorICAgICAgICAgICAgbWFyZ2lu
VmVydGljZXMtPmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhcHBlbmRBcmMoKm1hcmdpblZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIG1hcmdpbiwg
cHJldk9mZnNldEVkZ2UudmVydGV4MigpLCB0aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgxKCksIGZhbHNl
KTsKKyAgICB9CisKKyAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCptYXJnaW5WZXJ0
aWNlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24obWFyZ2luVmVydGlj
ZXMucmVsZWFzZSgpLCBmaWxsUnVsZSkpOworfQorCitjb25zdCBGbG9hdFBvbHlnb24mIFBvbHln
b25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2hhcGVQ
YWRkaW5nKCkgPj0gMCk7CisgICAgaWYgKCFzaGFwZVBhZGRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IG1fcG9seWdvbjsKKworICAgIGlmICghbV9wYWRkaW5nQm91bmRzKQorICAgICAgICBtX3BhZGRp
bmdCb3VuZHMgPSBjb21wdXRlU2hhcGVQYWRkaW5nQm91bmRzKG1fcG9seWdvbiwgc2hhcGVQYWRk
aW5nKCksIG1fcG9seWdvbi5maWxsUnVsZSgpKTsKKworICAgIHJldHVybiAqbV9wYWRkaW5nQm91
bmRzOworfQorCitjb25zdCBGbG9hdFBvbHlnb24mIFBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5C
b3VuZHMoKSBjb25zdAoreworICAgIEFTU0VSVChzaGFwZU1hcmdpbigpID49IDApOworICAgIGlm
ICghc2hhcGVNYXJnaW4oKSkKKyAgICAgICAgcmV0dXJuIG1fcG9seWdvbjsKKworICAgIGlmICgh
bV9tYXJnaW5Cb3VuZHMpCisgICAgICAgIG1fbWFyZ2luQm91bmRzID0gY29tcHV0ZVNoYXBlTWFy
Z2luQm91bmRzKG1fcG9seWdvbiwgc2hhcGVNYXJnaW4oKSwgbV9wb2x5Z29uLmZpbGxSdWxlKCkp
OworCisgICAgcmV0dXJuICptX21hcmdpbkJvdW5kczsKK30KKworc3RhdGljIGlubGluZSBib29s
IGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGlu
dGVyc2VjdGlvbiwgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgRmxvYXRQb2ludCYgdGhpc1ZlcnRl
eCwgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKK3sKKyAgICBpZiAoaW50ZXJzZWN0aW9uLnR5cGUg
IT0gVmVydGV4TWluWSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhNYXhZKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoaW50ZXJzZWN0aW9uLmVkZ2UgJiYgaW50ZXJz
ZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29u
ID0gKihpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKKyAgICBjb25zdCBGbG9hdFBvbHln
b25FZGdlJiB0aGlzRWRnZSA9ICooaW50ZXJzZWN0aW9uLmVkZ2UpOworCisgICAgaWYgKChpbnRl
cnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpIDwg
dGhpc0VkZ2UudmVydGV4MigpLnkoKSkpCisgICAgICAgIHx8IChpbnRlcnNlY3Rpb24udHlwZSA9
PSBWZXJ0ZXhNYXhZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpID4gdGhpc0VkZ2UudmVydGV4
MigpLnkoKSkpKSB7CisgICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNF
ZGdlLnByZXZpb3VzRWRnZSgpLnZlcnRleEluZGV4MSgpKTsKKyAgICAgICAgdGhpc1ZlcnRleCA9
IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkpOworICAgICAgICBuZXh0
VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDIoKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2Uu
dmVydGV4SW5kZXgxKCkpOworICAgICAgICB0aGlzVmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0
aGlzRWRnZS52ZXJ0ZXhJbmRleDIoKSk7CisgICAgICAgIG5leHRWZXJ0ZXggPSBwb2x5Z29uLnZl
cnRleEF0KHRoaXNFZGdlLm5leHRFZGdlKCkudmVydGV4SW5kZXgyKCkpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXBwZW5kSW50ZXJ2YWxYKGZs
b2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJlc3VsdCkKK3sKKyAg
ICBpZiAoIWluc2lkZSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTaGFwZUludGVydmFsKHgpKTsK
KyAgICBlbHNlCisgICAgICAgIHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMV0ueDIgPSB4OworCisg
ICAgcmV0dXJuICFpbnNpZGU7Cit9CisKK3N0YXRpYyBib29sIGNvbXBhcmVFZGdlSW50ZXJzZWN0
aW9uWChjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24xLCBjb25zdCBFZGdlSW50
ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24yKQoreworICAgIGZsb2F0IHgxID0gaW50ZXJzZWN0aW9u
MS5wb2ludC54KCk7CisgICAgZmxvYXQgeDIgPSBpbnRlcnNlY3Rpb24yLnBvaW50LngoKTsKKyAg
ICByZXR1cm4gKHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlvbjIu
dHlwZSA6IHgxIDwgeDI7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhj
b25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8
U2hhcGVJbnRlcnZhbD4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29u
RWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHksIHksIGVk
Z2VzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGlu
dGVyc2VjdGlvbnM7CisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChj
b21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNl
Y3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKKyAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYXBw
ZW5kKGludGVyc2VjdGlvbik7CisgICAgfQorCisgICAgaWYgKGludGVyc2VjdGlvbnMuc2l6ZSgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzb3J0KGludGVyc2VjdGlvbnMuYmVn
aW4oKSwgaW50ZXJzZWN0aW9ucy5lbmQoKSwgV2ViQ29yZTo6Y29tcGFyZUVkZ2VJbnRlcnNlY3Rp
b25YKTsKKworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICBpbnQgd2luZENvdW50ID0gMDsK
KyAgICBib29sIGluc2lkZSA9IGZhbHNlOworCisgICAgd2hpbGUgKGluZGV4IDwgaW50ZXJzZWN0
aW9ucy5zaXplKCkpIHsKKyAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgdGhpc0ludGVy
c2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXhdOworICAgICAgICBpZiAoaW5kZXggKyAxIDwg
aW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rp
b24mIG5leHRJbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4ICsgMV07CisgICAgICAg
ICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpID09IG5leHRJbnRlcnNlY3Rpb24u
cG9pbnQueCgpKSAmJiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1pblkgfHwgdGhp
c0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1heFkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBuZXh0SW50ZXJzZWN0aW9uLnR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU2tpcCBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVz
IGFyZSBWZXJ0ZXhNYXhZLFZlcnRleE1heFkgYW5kIFZlcnRleE1pblksVmVydGV4TWluWS4KKyAg
ICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hv
c2UgdHlwZXMgYXJlIFZlcnRleE1pblksVmVydGV4TWF4WSBvciBWZXJ0ZXhNYXhZLFZlcnRleE1p
blkgd2l0aCBvbmUgaW50ZXJzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdl
ID0gKnRoaXNJbnRlcnNlY3Rpb24uZWRnZTsKKyAgICAgICAgYm9vbCBldmVuT2RkQ3Jvc3Npbmcg
PSAhd2luZENvdW50OworCisgICAgICAgIGlmIChwb2x5Z29uLmZpbGxSdWxlKCkgPT0gUlVMRV9F
VkVOT0REKSB7CisgICAgICAgICAgICB3aW5kQ291bnQgKz0gKHRoaXNFZGdlLnZlcnRleDIoKS55
KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpKSA/IDEgOiAtMTsKKyAgICAgICAgICAgIGV2ZW5P
ZGRDcm9zc2luZyA9IGV2ZW5PZGRDcm9zc2luZyB8fCAhd2luZENvdW50OworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGV2ZW5PZGRDcm9zc2luZykgeworICAgICAgICAgICAgYm9vbCBlZGdlQ3Jv
c3NpbmcgPSB0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gTm9ybWFsOworICAgICAgICAgICAgaWYg
KCFlZGdlQ3Jvc3NpbmcpIHsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHByZXZWZXJ0ZXg7
CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCB0aGlzVmVydGV4OworICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgbmV4dFZlcnRleDsKKworICAgICAgICAgICAgICAgIGlmIChnZXRWZXJ0ZXhJ
bnRlcnNlY3Rpb25WZXJ0aWNlcyh0aGlzSW50ZXJzZWN0aW9uLCBwcmV2VmVydGV4LCB0aGlzVmVy
dGV4LCBuZXh0VmVydGV4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZlcnRleC55
KCkgPT0geSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkp
ID8gcHJldlZlcnRleC55KCkgPiB5IDogcHJldlZlcnRleC55KCkgPCB5OworICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChwcmV2VmVydGV4LnkoKSA9PSB5KQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWluWSkgPyBuZXh0VmVydGV4LnkoKSA+IHkgOiBuZXh0
VmVydGV4LnkoKSA8IHk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGVkZ2VDcm9zc2luZykKKyAgICAgICAgICAgICAgICBp
bnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCksIGluc2lk
ZSwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgICsraW5kZXg7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKGNvbnN0IEZsb2F0
UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8U2hhcGVJbnRlcnZh
bD4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2Vz
OworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHkxLCB5MiwgZWRnZXMpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSAqZWRnZSA9IGVkZ2VzW2ldOworICAgICAgICBmbG9hdCB4MTsK
KyAgICAgICAgZmxvYXQgeDI7CisKKyAgICAgICAgaWYgKGVkZ2UtPm1pblkoKSA8IHkxKSB7Cisg
ICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MSwgaW50ZXJzZWN0aW9uKTsK
KyAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpIDwgZWRnZS0+dmVydGV4Migp
LnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsKKworICAg
ICAgICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKKyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAgICAgeDIgPSBpbnRlcnNl
Y3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHgyID0gKGVkZ2Ut
PnZlcnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54
KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisgICAgICAgIGlmICh4MSA+IHgyKQorICAgICAg
ICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CisKKyAgICAgICAgaWYgKHgyID4geDEpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFNoYXBlSW50ZXJ2YWwoeDEsIHgyKSk7CisgICAgfQorCisgICAg
c29ydFNoYXBlSW50ZXJ2YWxzKHJlc3VsdCk7Cit9CisKK3ZvaWQgUG9seWdvblNoYXBlOjpnZXRF
eGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNh
bEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFBv
bHlnb24mIHBvbHlnb24gPSBzaGFwZU1hcmdpbkJvdW5kcygpOworICAgIGlmIChwb2x5Z29uLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwor
ICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7CisKKyAgICBWZWN0b3I8
U2hhcGVJbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7CisgICAgY29tcHV0ZVhJ
bnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOworICAgIGNvbXB1
dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHkyWEludGVydmFscyk7CisKKyAg
ICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlU2hhcGVJ
bnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIG1lcmdlZEludGVydmFscyk7CisK
KyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gZWRnZUludGVydmFsczsKKyAgICBjb21wdXRlT3Zl
cmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7
CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7CisgICAgbWVy
Z2VTaGFwZUludGVydmFscyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVk
SW50ZXJ2YWxzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNsdWRlZEludGVy
dmFscy5zaXplKCk7ICsraSkgeworICAgICAgICBTaGFwZUludGVydmFsIGludGVydmFsID0gZXhj
bHVkZWRJbnRlcnZhbHNbaV07CisgICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50
ZXJ2YWwueDEsIGludGVydmFsLngyKSk7CisgICAgfQorfQorCit2b2lkIFBvbHlnb25TaGFwZTo6
Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7CisgICAgaWYgKHBvbHln
b24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxU
b3A7CisgICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKKworICAgIFZl
Y3RvcjxTaGFwZUludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKKyAgICBjb21w
dXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7CisgICAg
Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsK
KworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBjb21tb25JbnRlcnZhbHM7CisgICAgaW50ZXJz
ZWN0U2hhcGVJbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVy
dmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gZWRnZUludGVydmFsczsKKyAgICBj
b21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24sIHkxLCB5MiwgZWRnZUlu
dGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gaW5jbHVkZWRJbnRlcnZhbHM7
CisgICAgc3VidHJhY3RTaGFwZUludGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZh
bHMsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bmNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkgeworICAgICAgICBTaGFwZUludGVydmFsIGlu
dGVydmFsID0gaW5jbHVkZWRJbnRlcnZhbHNbaV07CisgICAgICAgIHJlc3VsdC5hcHBlbmQoTGlu
ZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVydmFsLngyKSk7CisgICAgfQorfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9s
eWdvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgxLCB1
bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKQoreworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHln
b25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMocmVjdC55
KCksIHJlY3QubWF4WSgpLCBlZGdlcykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSBlZGdlc1tpXTsKKyAgICAgICAgaWYgKGVkZ2UtPmVk
Z2VJbmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDEgJiYgZWRnZS0+ZWRnZUluZGV4KCkgIT0gb2Zm
c2V0RWRnZUluZGV4MiAmJiBlZGdlLT5vdmVybGFwc1JlY3QocmVjdCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0KGNvbnN0IEZsb2F0UmVjdCYgcjEsIGNvbnN0IEZsb2F0
UmVjdCYgcjIpCit7CisgICAgaWYgKHIxLnkoKSA8IHIyLnkoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKHIxLnkoKSA9PSByMi55KCkpCisgICAgICAgIHJldHVybiByMS54KCkgPCBy
Mi54KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBvbHlnb25TaGFwZTo6Zmlyc3RJ
bmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRv
cCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYg
cmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IG1pbkludGVydmFsVG9wID0gbWluTG9naWNhbElu
dGVydmFsVG9wOworICAgIGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0gbWluTG9naWNhbEludGVy
dmFsU2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFdpZHRoID0gbWluTG9naWNh
bEludGVydmFsU2l6ZS53aWR0aCgpOworCisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29u
ID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7CisgICAgY29uc3QgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gcG9seWdvbi5ib3VuZGluZ0JveCgpOworICAgIGlmIChtaW5JbnRlcnZhbFdpZHRoID4gYm91
bmRpbmdCb3gud2lkdGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgbWlu
WSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluSW50ZXJ2YWxUb3ApOworICAgIGZsb2F0
IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7CisKKyAgICBpZiAobWF4WSA+IGJvdW5k
aW5nQm94Lm1heFkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMo
bWluSW50ZXJ2YWxUb3AsIGJvdW5kaW5nQm94Lm1heFkoKSwgZWRnZXMpOworCisgICAgZmxvYXQg
ZHggPSBtaW5JbnRlcnZhbFdpZHRoIC8gMjsKKyAgICBmbG9hdCBkeSA9IG1pbkludGVydmFsSGVp
Z2h0IC8gMjsKKyAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VzOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqKGVkZ2VzW2ldKTsKKyAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJldmlvdXNFZGdlKCkudmVydGV4MSgpOwor
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52ZXJ0ZXgxKCk7CisgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKKyAgICAgICAg
VmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRFZGdlQnVmZmVyOworCisgICAgICAgIGlm
ICh2ZXJ0ZXgyLnkoKSA+IHZlcnRleDEueSgpID8gdmVydGV4Mi54KCkgPj0gdmVydGV4MS54KCkg
OiB2ZXJ0ZXgxLngoKSA+PSB2ZXJ0ZXgyLngoKSkgeworICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1
ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKGR4LCAtZHkpKSk7
CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShl
ZGdlLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6
ZShkeCwgZHkpKSk7CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQ
b2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCAtZHkpKSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNSZWZsZXhWZXJ0ZXgodmVydGV4MCwgdmVydGV4MSwgdmVydGV4MikpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJ0ZXgyLngoKSA8PSB2ZXJ0ZXgxLngoKSAmJiB2ZXJ0ZXgwLngoKSA8
PSB2ZXJ0ZXgxLngoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChP
ZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoZHgsIC1keSksIEZsb2F0U2l6ZShk
eCwgZHkpKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2ZXJ0ZXgyLngoKSA+PSB2ZXJ0ZXgxLngo
KSAmJiB2ZXJ0ZXgwLngoKSA+PSB2ZXJ0ZXgxLngoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXRF
ZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4
LCAtZHkpLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0ZXgyLnko
KSA8PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0ZXgwLnkoKSA8PSB2ZXJ0ZXgxLnkoKSkKKyAgICAgICAg
ICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgx
LCBGbG9hdFNpemUoLWR4LCBkeSksIEZsb2F0U2l6ZShkeCwgZHkpKSk7CisgICAgICAgICAgICBl
bHNlIGlmICh2ZXJ0ZXgyLnkoKSA+PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0ZXgwLnkoKSA+PSB2ZXJ0
ZXgxLnkoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQ
b2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCAtZHkpLCBGbG9hdFNpemUoZHgsIC1k
eSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBvZmZz
ZXRFZGdlQnVmZmVyLnNpemUoKTsgKytqKQorICAgICAgICAgICAgaWYgKG9mZnNldEVkZ2VCdWZm
ZXJbal0ubWF4WSgpID49IG1pblkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZXMuYXBwZW5k
KG9mZnNldEVkZ2VCdWZmZXJbal0pOworICAgIH0KKworICAgIG9mZnNldEVkZ2VzLmFwcGVuZChP
ZmZzZXRQb2x5Z29uRWRnZShwb2x5Z29uLCBtaW5JbnRlcnZhbFRvcCwgRmxvYXRTaXplKDAsIGR5
KSkpOworCisgICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbjsKKyAgICBGbG9h
dFJlY3QgZmlyc3RGaXRSZWN0OworICAgIGJvb2wgZmlyc3RGaXRGb3VuZCA9IGZhbHNlOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9mZnNldEVkZ2VzLnNpemUoKSAtIDE7ICsraSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG9mZnNldEVkZ2VzLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0RWRnZXNbaV0uaW50ZXJzZWN0aW9uKG9m
ZnNldEVkZ2VzW2pdLCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbikpIHsKKyAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ob2Zmc2V0RWRnZXNJbnRlcnNl
Y3Rpb24ueCgpIC0gZHgsIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uLnkoKSAtIGR5KTsKKyAgICAg
ICAgICAgICAgICBGbG9hdFJlY3QgcG90ZW50aWFsRmlyc3RGaXRSZWN0KHBvdGVudGlhbEZpcnN0
Rml0TG9jYXRpb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUpOworICAgICAgICAgICAgICAgIGlm
ICgob2Zmc2V0RWRnZXNbaV0uYmFzaXMoKSA9PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGluZVRvcAor
ICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXRFZGdlc1tqXS5iYXNpcygpID09IE9mZnNldFBv
bHlnb25FZGdlOjpMaW5lVG9wCisgICAgICAgICAgICAgICAgICAgIHx8IHBvdGVudGlhbEZpcnN0
Rml0TG9jYXRpb24ueSgpID49IG1pbkludGVydmFsVG9wKQorICAgICAgICAgICAgICAgICAgICAm
JiAoIWZpcnN0Rml0Rm91bmQgfHwgYWJvdmVPclRvVGhlTGVmdChwb3RlbnRpYWxGaXJzdEZpdFJl
Y3QsIGZpcnN0Rml0UmVjdCkpCisgICAgICAgICAgICAgICAgICAgICYmIHBvbHlnb24uY29udGFp
bnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICYmIGZpcnN0
Rml0UmVjdEluUG9seWdvbihwb2x5Z29uLCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIG9mZnNldEVk
Z2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdlc1tqXS5lZGdlSW5kZXgoKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZmlyc3RGaXRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGZpcnN0Rml0UmVjdCA9IHBvdGVudGlhbEZpcnN0Rml0UmVjdDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmlyc3RGaXRGb3Vu
ZCkKKyAgICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChmaXJzdEZpdFJlY3QueSgpKTsK
KyAgICByZXR1cm4gZmlyc3RGaXRGb3VuZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjI4YWMzYWRkMDY1NmQ2NzNiMTI3ZDY4ODhiZjBlODYwMmI2MTgwYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmgK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICog
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBvbHlnb25TaGFwZV9oCisjZGVmaW5l
IFBvbHlnb25TaGFwZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvbHlnb24uaCIKKyNpbmNsdWRlICJT
aGFwZS5oIgorI2luY2x1ZGUgIlNoYXBlSW50ZXJ2YWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBPZmZzZXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIEJhc2lzIHsKKyAgICAgICAgRWRnZSwKKyAgICAgICAgVmVydGV4LAorICAg
ICAgICBMaW5lVG9wCisgICAgfTsKKworICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0
UG9seWdvbkVkZ2UmIGVkZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorICAgICAgICA6IG1f
dmVydGV4MShlZGdlLnZlcnRleDEoKSArIG9mZnNldCkKKyAgICAgICAgLCBtX3ZlcnRleDIoZWRn
ZS52ZXJ0ZXgyKCkgKyBvZmZzZXQpCisgICAgICAgICwgbV9lZGdlSW5kZXgoZWRnZS5lZGdlSW5k
ZXgoKSkKKyAgICAgICAgLCBtX2Jhc2lzKEVkZ2UpCisgICAgeworICAgIH0KKworICAgIE9mZnNl
dFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHJlZmxleFZlcnRleCwgY29uc3QgRmxvYXRT
aXplJiBvZmZzZXQxLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldDIpCisgICAgICAgIDogbV92ZXJ0
ZXgxKHJlZmxleFZlcnRleCArIG9mZnNldDEpCisgICAgICAgICwgbV92ZXJ0ZXgyKHJlZmxleFZl
cnRleCArIG9mZnNldDIpCisgICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCisgICAgICAgICwgbV9i
YXNpcyhWZXJ0ZXgpCisgICAgeworICAgIH0KKworICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0
IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25z
dCBGbG9hdFNpemUmIG9mZnNldCkKKyAgICAgICAgOiBtX3ZlcnRleDEoRmxvYXRQb2ludChwb2x5
Z29uLmJvdW5kaW5nQm94KCkueCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQor
ICAgICAgICAsIG1fdmVydGV4MihGbG9hdFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3goKS5tYXhY
KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCisgICAgICAgICwgbV9lZGdlSW5k
ZXgoLTEpCisgICAgICAgICwgbV9iYXNpcyhMaW5lVG9wKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX3ZlcnRleDE7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRleDI7IH0KKyAgICBpbnQgZWRnZUluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9lZGdlSW5kZXg7IH0KKyAgICBCYXNpcyBiYXNpcygpIGNvbnN0IHsg
cmV0dXJuIG1fYmFzaXM7IH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFBvaW50IG1fdmVydGV4MTsK
KyAgICBGbG9hdFBvaW50IG1fdmVydGV4MjsKKyAgICBpbnQgbV9lZGdlSW5kZXg7CisgICAgQmFz
aXMgbV9iYXNpczsKK307CisKK2NsYXNzIFBvbHlnb25TaGFwZSA6IHB1YmxpYyBTaGFwZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seWdvblNoYXBlKTsKK3B1YmxpYzoKKyAgICBQb2x5
Z29uU2hhcGUoUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1
bGUgZmlsbFJ1bGUpCisgICAgICAgIDogU2hhcGUoKQorICAgICAgICAsIG1fcG9seWdvbih2ZXJ0
aWNlcywgZmlsbFJ1bGUpCisgICAgICAgICwgbV9tYXJnaW5Cb3VuZHMobnVsbHB0cikKKyAgICAg
ICAgLCBtX3BhZGRpbmdCb3VuZHMobnVsbHB0cikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKS5i
b3VuZGluZ0JveCgpKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dp
Y2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlv
dXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKS5ib3VuZGluZ0JveCgpKTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wb2x5Z29uLmlzRW1w
dHkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0
IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0Jikg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExv
Z2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNp
emUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklERTsK
KworcHJpdmF0ZToKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlTWFyZ2luQm91bmRzKCkg
Y29uc3Q7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25z
dDsKKworICAgIEZsb2F0UG9seWdvbiBtX3BvbHlnb247CisgICAgbXV0YWJsZSBPd25QdHI8Rmxv
YXRQb2x5Z29uPiBtX21hcmdpbkJvdW5kczsKKyAgICBtdXRhYmxlIE93blB0cjxGbG9hdFBvbHln
b24+IG1fcGFkZGluZ0JvdW5kczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFBvbHlnb25TaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1MjdmY2ZhNzJhZjNjOTMwMDU1
ZTU5M2I5ZjU0Yzc0N2E0MTcwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcApAQCAtMCwwICsxLDIzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWN0YW5nbGVTaGFwZS5oIgorCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VYSW50ZXJjZXB0KGZsb2F0IHksIGZsb2F0IHJ4LCBmbG9h
dCByeSkKK3sKKyAgICBBU1NFUlQocnkgPiAwKTsKKyAgICByZXR1cm4gcnggKiBzcXJ0KDEgLSAo
eSAqIHkpIC8gKHJ5ICogcnkpKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWUlu
dGVyY2VwdChmbG9hdCB4LCBmbG9hdCByeCwgZmxvYXQgcnkpCit7CisgICAgQVNTRVJUKHJ4ID4g
MCk7CisgICAgcmV0dXJuIHJ5ICogc3FydCgxIC0gKHggKiB4KSAvIChyeCAqIHJ4KSk7Cit9CisK
K0Zsb2F0Um91bmRlZFJlY3QgRmxvYXRSb3VuZGVkUmVjdDo6cGFkZGluZ0JvdW5kcyhmbG9hdCBw
YWRkaW5nKSBjb25zdAoreworICAgIEFTU0VSVChwYWRkaW5nID49IDApOworICAgIGlmICghcGFk
ZGluZyB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGZsb2F0IGJv
dW5kc1ggPSB4KCkgKyBzdGQ6Om1pbih3aWR0aCgpIC8gMiwgcGFkZGluZyk7CisgICAgZmxvYXQg
Ym91bmRzWSA9IHkoKSArIHN0ZDo6bWluKGhlaWdodCgpIC8gMiwgcGFkZGluZyk7CisgICAgZmxv
YXQgYm91bmRzV2lkdGggPSBzdGQ6Om1heCgwLjBmLCB3aWR0aCgpIC0gcGFkZGluZyAqIDIpOwor
ICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9IHN0ZDo6bWF4KDAuMGYsIGhlaWdodCgpIC0gcGFkZGlu
ZyAqIDIpOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1ggPSBzdGQ6Om1heCgwLjBmLCByeCgpIC0g
cGFkZGluZyk7CisgICAgZmxvYXQgYm91bmRzUmFkaXVzWSA9IHN0ZDo6bWF4KDAuMGYsIHJ5KCkg
LSBwYWRkaW5nKTsKKyAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJlY3QoYm91bmRz
WCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6ZShib3VuZHNS
YWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Cit9CisKK0Zsb2F0Um91bmRlZFJlY3QgRmxvYXRSb3Vu
ZGVkUmVjdDo6bWFyZ2luQm91bmRzKGZsb2F0IG1hcmdpbikgY29uc3QKK3sKKyAgICBBU1NFUlQo
bWFyZ2luID49IDApOworICAgIGlmICghbWFyZ2luKQorICAgICAgICByZXR1cm4gKnRoaXM7CisK
KyAgICBmbG9hdCBib3VuZHNYID0geCgpIC0gbWFyZ2luOworICAgIGZsb2F0IGJvdW5kc1kgPSB5
KCkgLSBtYXJnaW47CisgICAgZmxvYXQgYm91bmRzV2lkdGggPSB3aWR0aCgpICsgbWFyZ2luICog
MjsKKyAgICBmbG9hdCBib3VuZHNIZWlnaHQgPSBoZWlnaHQoKSArIG1hcmdpbiAqIDI7CisgICAg
ZmxvYXQgYm91bmRzUmFkaXVzWCA9IHJ4KCkgKyBtYXJnaW47CisgICAgZmxvYXQgYm91bmRzUmFk
aXVzWSA9IHJ5KCkgKyBtYXJnaW47CisgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxvYXRS
ZWN0KGJvdW5kc1gsIGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9hdFNp
emUoYm91bmRzUmFkaXVzWCwgYm91bmRzUmFkaXVzWSkpOworfQorCitGbG9hdFBvaW50IEZsb2F0
Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2VwdEZvcldpZHRoKGZsb2F0IHdpZHRoQXRJbnRlcmNl
cHQpIGNvbnN0Cit7CisgICAgZmxvYXQgeGkgPSAod2lkdGgoKSAtIHdpZHRoQXRJbnRlcmNlcHQp
IC8gMjsKKyAgICBmbG9hdCB5aSA9IHJ5KCkgLSBlbGxpcHNlWUludGVyY2VwdChyeCgpIC0geGks
IHJ4KCksIHJ5KCkpOworICAgIHJldHVybiBGbG9hdFBvaW50KHhpLCB5aSk7Cit9CisKK0Zsb2F0
Um91bmRlZFJlY3QgUmVjdGFuZ2xlU2hhcGU6OnNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMpIHsKKyAgICAgICAgbV9o
YXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzID0gdHJ1ZTsKKyAgICAgICAgbV9wYWRkaW5nQm91
bmRzID0gbV9ib3VuZHMucGFkZGluZ0JvdW5kcyhzaGFwZVBhZGRpbmcoKSk7CisgICAgfQorICAg
IHJldHVybiBtX3BhZGRpbmdCb3VuZHM7Cit9CisKK0Zsb2F0Um91bmRlZFJlY3QgUmVjdGFuZ2xl
U2hhcGU6OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGF2ZUluaXRp
YWxpemVkTWFyZ2luQm91bmRzKSB7CisgICAgICAgIG1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91
bmRzID0gdHJ1ZTsKKyAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBtX2JvdW5kcy5tYXJnaW5Cb3Vu
ZHMoc2hhcGVNYXJnaW4oKSk7CisgICAgfQorICAgIHJldHVybiBtX21hcmdpbkJvdW5kczsKK30K
Kwordm9pZCBSZWN0YW5nbGVTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQp
IGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVNYXJn
aW5Cb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOworICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCAr
IGxvZ2ljYWxIZWlnaHQ7CisKKyAgICBpZiAoeTIgPCBib3VuZHMueSgpIHx8IHkxID49IGJvdW5k
cy5tYXhZKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHgxID0gYm91bmRzLngoKTsK
KyAgICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7CisKKyAgICBpZiAoYm91bmRzLnJ5KCkgPiAw
KSB7CisgICAgICAgIGlmICh5MiA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKSkgeworICAgICAg
ICAgICAgZmxvYXQgeWkgPSB5MiAtIGJvdW5kcy55KCkgLSBib3VuZHMucnkoKTsKKyAgICAgICAg
ICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMu
cnkoKSk7CisgICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAtIHhpOwor
ICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsKKyAgICAg
ICAgfSBlbHNlIGlmICh5MSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSkgeworICAgICAg
ICAgICAgZmxvYXQgeWkgPSAgeTEgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKKyAg
ICAgICAgICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBi
b3VuZHMucnkoKSk7CisgICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAt
IHhpOworICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoeDEsIHgy
KSk7Cit9CisKK3ZvaWQgUmVjdGFuZ2xlU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYg
cmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5kcyA9IHNo
YXBlUGFkZGluZ0JvdW5kcygpOworICAgIGlmIChib3VuZHMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgeTIgPSBsb2dp
Y2FsVG9wICsgbG9naWNhbEhlaWdodDsKKworICAgIGlmICh5MSA8IGJvdW5kcy55KCkgfHwgeTIg
PiBib3VuZHMubWF4WSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB4MSA9IGJvdW5k
cy54KCk7CisgICAgZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOworCisgICAgaWYgKGJvdW5kcy5y
eSgpID4gMCkgeworICAgICAgICBib29sIHkxSW50ZXJjZXB0c0Nvcm5lciA9IHkxIDwgYm91bmRz
LnkoKSArIGJvdW5kcy5yeSgpOworICAgICAgICBib29sIHkySW50ZXJjZXB0c0Nvcm5lciA9IHky
ID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpOworICAgICAgICBmbG9hdCB4aSA9IDA7CisK
KyAgICAgICAgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lciAmJiB5MkludGVyY2VwdHNDb3JuZXIpIHsK
KyAgICAgICAgICAgIGlmICAoeTEgPCBib3VuZHMuaGVpZ2h0KCkgKyAyICogYm91bmRzLnkoKSAt
IHkyKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJvdW5kcy55KCkgLSBib3Vu
ZHMucnkoKTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3Vu
ZHMucngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOworICAg
ICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3Vu
ZHMucnkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoeTFJbnRlcmNlcHRz
Q29ybmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91bmRzLnkoKSAtIGJvdW5k
cy5yeSgpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4
KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh5MkludGVyY2VwdHNDb3JuZXIp
IHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0gKGJvdW5kcy5tYXhZKCkgLSBib3VuZHMu
cnkoKSk7CisgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngo
KSwgYm91bmRzLnJ5KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHkxSW50ZXJjZXB0c0Nv
cm5lciB8fCB5MkludGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIHgxID0gYm91bmRzLngo
KSArIGJvdW5kcy5yeCgpIC0geGk7CisgICAgICAgICAgICB4MiA9IGJvdW5kcy5tYXhYKCkgLSBi
b3VuZHMucngoKSArIHhpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LmFwcGVuZChM
aW5lU2VnbWVudCh4MSwgeDIpKTsKK30KKworYm9vbCBSZWN0YW5nbGVTaGFwZTo6Zmlyc3RJbmNs
dWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVz
dWx0KSBjb25zdAoreworICAgIGZsb2F0IG1pbkludGVydmFsVG9wID0gbWluTG9naWNhbEludGVy
dmFsVG9wOworICAgIGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0gbWluTG9naWNhbEludGVydmFs
U2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFdpZHRoID0gbWluTG9naWNhbElu
dGVydmFsU2l6ZS53aWR0aCgpOworCisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRz
ID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkgfHwgbWlu
SW50ZXJ2YWxXaWR0aCA+IGJvdW5kcy53aWR0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmbG9hdCBtaW5ZID0gc3RkOjptYXgoYm91bmRzLnkoKSwgbWluSW50ZXJ2YWxUb3ApOwor
ICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7CisKKyAgICBpZiAobWF4
WSA+IGJvdW5kcy5tYXhZKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaW50
ZXJ2YWxPdmVybGFwc01pbkNvcm5lciA9IG1pblkgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5KCk7
CisgICAgYm9vbCBpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyID0gbWF4WSA+IGJvdW5kcy5tYXhZ
KCkgLSBib3VuZHMucnkoKTsKKworICAgIGlmICghaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciAm
JiAhaW50ZXJ2YWxPdmVybGFwc01heENvcm5lcikgeworICAgICAgICByZXN1bHQgPSBtaW5ZOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRz
LnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDI7CisgICAgYm9vbCBtaW5Db3JuZXJEZWZpbmVzWCA9
IGZhYnMoY2VudGVyWSAtIG1pblkpID4gZmFicyhjZW50ZXJZIC0gbWF4WSk7CisgICAgYm9vbCBp
bnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzID0gbWluSW50ZXJ2YWxXaWR0aCArIDIgKiBib3VuZHMu
cngoKSA8PSBib3VuZHMud2lkdGgoKTsKKyAgICBGbG9hdFBvaW50IGNvcm5lckludGVyY2VwdCA9
IGJvdW5kcy5jb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChtaW5JbnRlcnZhbFdpZHRoKTsKKworICAg
IGlmIChpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyICYmICghaW50ZXJ2YWxPdmVybGFwc01heENv
cm5lciB8fCBtaW5Db3JuZXJEZWZpbmVzWCkpIHsKKyAgICAgICAgaWYgKGludGVydmFsRml0c1dp
dGhpbkNvcm5lcnMgfHwgYm91bmRzLnkoKSArIGNvcm5lckludGVyY2VwdC55KCkgPCBtaW5ZKSB7
CisgICAgICAgICAgICByZXN1bHQgPSBtaW5ZOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1pbkludGVydmFsSGVpZ2h0IDwgYm91bmRzLmhlaWdodCgp
IC0gKDIgKiBjb3JuZXJJbnRlcmNlcHQueSgpKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY2Vp
bGVkTGF5b3V0VW5pdChib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpbnRlcnZhbE92
ZXJsYXBzTWF4Q29ybmVyICYmICghaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciB8fCAhbWluQ29y
bmVyRGVmaW5lc1gpKSB7CisgICAgICAgIGlmIChpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8
IG1pblkgPD0gIGJvdW5kcy5tYXhZKCkgLSBjb3JuZXJJbnRlcmNlcHQueSgpIC0gbWluSW50ZXJ2
YWxIZWlnaHQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9SZWN0YW5nbGVTaGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5ZWNmMDUwNGJiOTkzYzkxMTAzOTA2MzQ5
MzQ1ZWU0Mjk0NDZkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAg
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUmVjdGFuZ2xlU2hhcGVfaAorI2RlZmluZSBSZWN0YW5nbGVTaGFwZV9oCisKKyNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFJvdW5kZWRSZWN0IDogcHVibGljIEZsb2F0UmVjdCB7CitwdWJsaWM6CisgICAgRmxvYXRS
b3VuZGVkUmVjdCgpIHsgfQorICAgIEZsb2F0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBi
b3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCisgICAgICAgIDogRmxvYXRSZWN0KGJvdW5k
cykKKyAgICAgICAgLCBtX3JhZGlpKHJhZGlpKQorICAgIHsKKyAgICB9CisKKyAgICBmbG9hdCBy
eCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWkud2lkdGgoKTsgfQorICAgIGZsb2F0IHJ5KCkgY29u
c3QgeyByZXR1cm4gbV9yYWRpaS5oZWlnaHQoKTsgfQorICAgIEZsb2F0Um91bmRlZFJlY3QgbWFy
Z2luQm91bmRzKGZsb2F0IG1hcmdpbikgY29uc3Q7CisgICAgRmxvYXRSb3VuZGVkUmVjdCBwYWRk
aW5nQm91bmRzKGZsb2F0IHBhZGRpbmcpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgY29ybmVySW50
ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lkdGgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEZsb2F0
U2l6ZSBtX3JhZGlpOworfTsKKworY2xhc3MgUmVjdGFuZ2xlU2hhcGUgOiBwdWJsaWMgU2hhcGUg
eworcHVibGljOgorICAgIFJlY3RhbmdsZVNoYXBlKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBj
b25zdCBGbG9hdFNpemUmIHJhZGlpKQorICAgICAgICA6IFNoYXBlKCkKKyAgICAgICAgLCBtX2Jv
dW5kcyhib3VuZHMsIHJhZGlpKQorICAgICAgICAsIG1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91
bmRzKGZhbHNlKQorICAgICAgICAsIG1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcyhmYWxz
ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9n
aWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5
b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKSk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qg
c2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91bmRzKCkpOyB9CisgICAgdmly
dHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5kcy5pc0Vt
cHR5KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91
dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxM
b2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRT
aXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3QgT1ZFUlJJREU7
CisKK3ByaXZhdGU6CisgICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZU1hcmdpbkJvdW5kcygpIGNv
bnN0OworICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3Q7CisK
KyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fYm91bmRzOworICAgIG11dGFibGUgRmxvYXRSb3VuZGVk
UmVjdCBtX21hcmdpbkJvdW5kczsKKyAgICBtdXRhYmxlIEZsb2F0Um91bmRlZFJlY3QgbV9wYWRk
aW5nQm91bmRzOworICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5k
cyA6IDE7CisgICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcyA6
IDE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZWN0YW5nbGVT
aGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI3OTIwY2M5ZTQ4ODEzNjg5MTc0ODVjYjAzMzc4ZTlmNDAwMDJmM2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMCww
ICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQor
ICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFwZS5o
IgorCisjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlBvbHlnb25TaGFw
ZS5oIgorI2luY2x1ZGUgIlJlY3RhbmdsZVNoYXBlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVSZWN0YW5nbGVTaGFwZShjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKK3sKKyAgICBBU1NFUlQoYm91bmRzLndp
ZHRoKCkgPj0gMCAmJiBib3VuZHMuaGVpZ2h0KCkgPj0gMCAmJiByYWRpaS53aWR0aCgpID49IDAg
JiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWN0YW5n
bGVTaGFwZShib3VuZHMsIHJhZGlpKSk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBj
cmVhdGVTaGFwZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cykK
K3sKKyAgICBBU1NFUlQocmFkaXVzID49IDApOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUmVj
dGFuZ2xlU2hhcGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpdXMsIGNlbnRlci55KCkgLSBy
YWRpdXMsIHJhZGl1cyoyLCByYWRpdXMqMiksIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpKTsK
K30KKworc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0ZVNoYXBlRWxsaXBzZShjb25zdCBG
bG9hdFBvaW50JiBjZW50ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCit7CisgICAgQVNTRVJU
KHJhZGlpLndpZHRoKCkgPj0gMCAmJiByYWRpaS5oZWlnaHQoKSA+PSAwKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFJlY3RhbmdsZVNoYXBlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaWku
d2lkdGgoKSwgY2VudGVyLnkoKSAtIHJhZGlpLmhlaWdodCgpLCByYWRpaS53aWR0aCgpKjIsIHJh
ZGlpLmhlaWdodCgpKjIpLCByYWRpaSkpOworfQorCitzdGF0aWMgUGFzc093blB0cjxTaGFwZT4g
Y3JlYXRlUG9seWdvblNoYXBlKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGlj
ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUG9seWdv
blNoYXBlKHZlcnRpY2VzLCBmaWxsUnVsZSkpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0UmVj
dCBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsb2dp
Y2FsQm94SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3sKKyAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICByZXR1cm4gcmVjdDsKKyAg
ICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KHJlY3QueSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0gcmVjdC5tYXhYKCks
IHJlY3QuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSk7CisgICAgcmV0dXJuIHJlY3QudHJhbnNwb3Nl
ZFJlY3QoKTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFBvaW50IHBoeXNpY2FsUG9pbnRUb0xv
Z2ljYWwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQsIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBwb2ludDsKKyAgICBpZiAoaXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICByZXR1cm4gRmxvYXRQb2lu
dChwb2ludC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSBwb2ludC54KCkpOworICAgIHJldHVybiBw
b2ludC50cmFuc3Bvc2VkUG9pbnQoKTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFNpemUgcGh5
c2ljYWxTaXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2Rl
KSkKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgcmV0dXJuIHNpemUudHJhbnNwb3NlZFNpemUo
KTsKK30KKworUGFzc093blB0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVNoYXBlKGNvbnN0IEJhc2lj
U2hhcGUqIGJhc2ljU2hhcGUsIGNvbnN0IExheW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwgTGVuZ3RoIHBhZGRpbmcpCit7Cisg
ICAgQVNTRVJUKGJhc2ljU2hhcGUpOworCisgICAgYm9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUg
PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7CisgICAgZmxvYXQgYm94V2lk
dGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94U2l6ZS53aWR0aCgpIDogbG9n
aWNhbEJveFNpemUuaGVpZ2h0KCk7CisgICAgZmxvYXQgYm94SGVpZ2h0ID0gaG9yaXpvbnRhbFdy
aXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUuaGVpZ2h0KCkgOiBsb2dpY2FsQm94U2l6ZS53aWR0
aCgpOworICAgIE93blB0cjxTaGFwZT4gc2hhcGU7CisKKyAgICBzd2l0Y2ggKGJhc2ljU2hhcGUt
PnR5cGUoKSkgeworCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUmVjdGFuZ2xlVHlw
ZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKj4oYmFzaWNTaGFwZSk7CisgICAgICAg
IEZsb2F0UmVjdCBib3VuZHMoCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3Rh
bmdsZS0+eCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJl
Y3RhbmdsZS0+eSgpLCBib3hIZWlnaHQpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0
aChyZWN0YW5nbGUtPndpZHRoKCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVG
b3JMZW5ndGgocmVjdGFuZ2xlLT5oZWlnaHQoKSwgYm94SGVpZ2h0KSk7CisgICAgICAgIExlbmd0
aCByYWRpdXNYTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7CisgICAgICAgIExl
bmd0aCByYWRpdXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7CisgICAgICAg
IEZsb2F0U2l6ZSBjb3JuZXJSYWRpaSgKKyAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRl
ZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRo
KSwKKyAgICAgICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOworICAgICAgICBGbG9hdFJl
Y3QgbG9naWNhbEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxC
b3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVS
ZWN0YW5nbGVTaGFwZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVUb0xvZ2ljYWwoY29ybmVy
UmFkaWksIHdyaXRpbmdNb2RlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
QmFzaWNTaGFwZTo6QmFzaWNTaGFwZUNpcmNsZVR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNT
aGFwZUNpcmNsZSogY2lyY2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUNpcmNsZSo+
KGJhc2ljU2hhcGUpOworICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxvYXRWYWx1ZUZvckxlbmd0
aChjaXJjbGUtPmNlbnRlclgoKSwgYm94V2lkdGgpOworICAgICAgICBmbG9hdCBjZW50ZXJZID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKKyAgICAg
ICAgZmxvYXQgcmFkaXVzID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPnJhZGl1cygpLCBz
dGQ6Om1pbihib3hIZWlnaHQsIGJveFdpZHRoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgbG9naWNh
bENlbnRlciA9IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50
ZXJZKSwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBz
aGFwZSA9IGNyZWF0ZVNoYXBlQ2lyY2xlKGxvZ2ljYWxDZW50ZXIsIHJhZGl1cyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUVsbGlwc2VU
eXBlOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKiBlbGxpcHNlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqPihiYXNpY1NoYXBlKTsKKyAgICAgICAgZmxv
YXQgY2VudGVyWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWCgpLCBib3hX
aWR0aCk7CisgICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlw
c2UtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKKyAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZs
b2F0IHJhZGl1c1kgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1koKSwgYm94
SGVpZ2h0KTsKKyAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2ljYWxQb2lu
dFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94U2l6ZS5o
ZWlnaHQoKSwgd3JpdGluZ01vZGUpOworICAgICAgICBGbG9hdFNpemUgbG9naWNhbFJhZGlpID0g
cGh5c2ljYWxTaXplVG9Mb2dpY2FsKEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSwgd3JpdGlu
Z01vZGUpOworCisgICAgICAgIHNoYXBlID0gY3JlYXRlU2hhcGVFbGxpcHNlKGxvZ2ljYWxDZW50
ZXIsIGxvZ2ljYWxSYWRpaSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQmFz
aWNTaGFwZTo6QmFzaWNTaGFwZVBvbHlnb25UeXBlOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hh
cGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVBvbHlnb24q
PihiYXNpY1NoYXBlKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPExlbmd0aD4mIHZhbHVlcyA9IHBv
bHlnb24tPnZhbHVlcygpOworICAgICAgICBzaXplX3QgdmFsdWVzU2l6ZSA9IHZhbHVlcy5zaXpl
KCk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlc1NpemUgJSAyKSk7CisgICAgICAgIE93blB0cjxW
ZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQ
b2ludD4odmFsdWVzU2l6ZSAvIDIpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlc1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAgRmxvYXRQb2ludCB2ZXJ0ZXgoCisg
ICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJveFdpZHRo
KSwKKyAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpICsgMSks
IGJveEhlaWdodCkpOworICAgICAgICAgICAgKCp2ZXJ0aWNlcylbaSAvIDJdID0gcGh5c2ljYWxQ
b2ludFRvTG9naWNhbCh2ZXJ0ZXgsIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9k
ZSk7CisgICAgICAgIH0KKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVBvbHlnb25TaGFwZSh2ZXJ0
aWNlcy5yZWxlYXNlKCksIHBvbHlnb24tPndpbmRSdWxlKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZVR5cGU6
IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqPihiYXNpY1NoYXBlKTsK
KyAgICAgICAgZmxvYXQgbGVmdCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5sZWZ0
KCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxvYXQgdG9wID0gZmxvYXRWYWx1ZUZvckxlbmd0aChy
ZWN0YW5nbGUtPnRvcCgpLCBib3hIZWlnaHQpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAor
ICAgICAgICAgICAgbGVmdCwKKyAgICAgICAgICAgIHRvcCwKKyAgICAgICAgICAgIGJveFdpZHRo
IC0gbGVmdCAtIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5yaWdodCgpLCBib3hXaWR0
aCksCisgICAgICAgICAgICBib3hIZWlnaHQgLSB0b3AgLSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJl
Y3RhbmdsZS0+Ym90dG9tKCksIGJveEhlaWdodCkpOworICAgICAgICBMZW5ndGggcmFkaXVzWExl
bmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgpOworICAgICAgICBMZW5ndGggcmFkaXVz
WUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWSgpOworICAgICAgICBGbG9hdFNpemUg
Y29ybmVyUmFkaWkoCisgICAgICAgICAgICByYWRpdXNYTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAw
IDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNYTGVuZ3RoLCBib3hXaWR0aCksCisgICAgICAg
ICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0
aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQpKTsKKyAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxC
b3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWln
aHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNoYXBlID0gY3JlYXRlUmVjdGFuZ2xlU2hh
cGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvcm5lclJhZGlpLCB3cml0
aW5nTW9kZSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBzaGFwZS0+bV93cml0aW5nTW9k
ZSA9IHdyaXRpbmdNb2RlOworICAgIHNoYXBlLT5tX21hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5n
dGgobWFyZ2luLCAwKTsKKyAgICBzaGFwZS0+bV9wYWRkaW5nID0gZmxvYXRWYWx1ZUZvckxlbmd0
aChwYWRkaW5nLCAwKTsKKworICAgIHJldHVybiBzaGFwZS5yZWxlYXNlKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZDllY2ZkNzIwYmQwZGQ1MzgwNDEzMThjOTgyNWJmMzM3MTFlNTg3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlX2gKKyNkZWZpbmUgU2hhcGVfaAor
CisjaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKKyNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCisjaW5j
bHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTGluZVNl
Z21lbnQgeworICAgIExpbmVTZWdtZW50KGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2Fs
UmlnaHQpCisgICAgICAgIDogbG9naWNhbExlZnQobG9naWNhbExlZnQpCisgICAgICAgICwgbG9n
aWNhbFJpZ2h0KGxvZ2ljYWxSaWdodCkKKyAgICB7CisgICAgfQorCisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodDsKK307CisKK3R5cGVkZWYg
VmVjdG9yPExpbmVTZWdtZW50PiBTZWdtZW50TGlzdDsKKworCisvLyBBIHJlcHJlc2VudGF0aW9u
IG9mIGEgQmFzaWNTaGFwZSB0aGF0IGVuYWJsZXMgbGF5b3V0IGNvZGUgdG8gZGV0ZXJtaW5lIGhv
dyB0byBicmVhayBhIGxpbmUgdXAgaW50byBzZWdtZW50cworLy8gdGhhdCB3aWxsIGZpdCB3aXRo
aW4gb3IgYXJvdW5kIGEgc2hhcGUuIFRoZSBsaW5lIGlzIGRlZmluZWQgYnkgYSBwYWlyIG9mIGxv
Z2ljYWwgWSBjb29yZGluYXRlcyBhbmQgdGhlCisvLyBjb21wdXRlZCBzZWdtZW50cyBhcmUgcmV0
dXJuZWQgYXMgcGFpcnMgb2YgbG9naWNhbCBYIGNvb3JkaW5hdGVzLiBUaGUgQmFzaWNTaGFwZSBp
dHNlbGYgaXMgZGVmaW5lZCBpbgorLy8gcGh5c2ljYWwgY29vcmRpbmF0ZXMuCisKK2NsYXNzIFNo
YXBlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRlU2hhcGUo
Y29uc3QgQmFzaWNTaGFwZSosIGNvbnN0IExheW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0
aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwgTGVuZ3RoIHBhZGRpbmcpOworCisgICAgdmlydHVhbCB+
U2hhcGUoKSB7IH0KKworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxC
b3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVQYWRk
aW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhM
YXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExp
c3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlz
dCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9n
aWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6
ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdCA9IDA7
CisKK3Byb3RlY3RlZDoKKyAgICBmbG9hdCBzaGFwZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
bWFyZ2luOyB9CisgICAgZmxvYXQgc2hhcGVQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRk
aW5nOyB9CisKK3ByaXZhdGU6CisgICAgV3JpdGluZ01vZGUgbV93cml0aW5nTW9kZTsKKyAgICBm
bG9hdCBtX21hcmdpbjsKKyAgICBmbG9hdCBtX3BhZGRpbmc7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTExNTU4MzIxY2NmOGZlMGMyODAy
N2E0NWZjN2IyMzZhNTc1N2YzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICog
ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFwZUlu
Zm8uaCIKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKKyNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK3RlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIFNoYXBlVmFsdWUqIChSZW5kZXJT
dHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChTaGFwZTo6KmludGVydmFsR2V0dGVy
KShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgorY29uc3QgU2hh
cGUqIFNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpj
b21wdXRlZFNoYXBlKCkgY29uc3QKK3sKKyAgICBpZiAoU2hhcGUqIHNoYXBlID0gbV9zaGFwZS5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuIHNoYXBlOworCisgICAgU2hhcGVWYWx1ZSogc2hhcGVWYWx1
ZSA9IChtX3JlbmRlcmVyLT5zdHlsZSgpLT4qc2hhcGVHZXR0ZXIpKCk7CisgICAgQmFzaWNTaGFw
ZSogc2hhcGUgPSAoc2hhcGVWYWx1ZSAmJiBzaGFwZVZhbHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1
ZTo6U2hhcGUpID8gc2hhcGVWYWx1ZS0+c2hhcGUoKSA6IDA7CisKKyAgICBBU1NFUlQoc2hhcGUp
OworCisgICAgbV9zaGFwZSA9IFNoYXBlOjpjcmVhdGVTaGFwZShzaGFwZSwgTGF5b3V0U2l6ZSht
X3NoYXBlTG9naWNhbFdpZHRoLCBtX3NoYXBlTG9naWNhbEhlaWdodCksIG1fcmVuZGVyZXItPnN0
eWxlKCktPndyaXRpbmdNb2RlKCksIG1fcmVuZGVyZXItPnN0eWxlKCktPnNoYXBlTWFyZ2luKCks
IG1fcmVuZGVyZXItPnN0eWxlKCktPnNoYXBlUGFkZGluZygpKTsKKyAgICBBU1NFUlQobV9zaGFw
ZSk7CisgICAgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFJlbmRl
clR5cGUsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChTaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0PgorYm9vbCBTaGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIs
IGludGVydmFsR2V0dGVyPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUhlaWdodCkKK3sKKyAgICBBU1NFUlQobGluZUhlaWdodCA+PSAw
KTsKKyAgICBtX3NoYXBlTGluZVRvcCA9IGxpbmVUb3AgLSBsb2dpY2FsVG9wT2Zmc2V0KCk7Cisg
ICAgbV9saW5lSGVpZ2h0ID0gbGluZUhlaWdodDsKKyAgICBtX3NlZ21lbnRzLmNsZWFyKCk7CisK
KyAgICBpZiAobGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkKKyAgICAgICAgKGNvbXB1dGVkU2hh
cGUoKS0+KmludGVydmFsR2V0dGVyKShtX3NoYXBlTGluZVRvcCwgc3RkOjptaW4obV9saW5lSGVp
Z2h0LCBzaGFwZUxvZ2ljYWxCb3R0b20oKSAtIGxpbmVUb3ApLCBtX3NlZ21lbnRzKTsKKworICAg
IExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSB0aGlzLT5sb2dpY2FsTGVmdE9mZnNldCgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zZWdtZW50cy5zaXplKCk7IGkrKykgewor
ICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2ljYWxMZWZ0ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0Owor
ICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2ljYWxSaWdodCArPSBsb2dpY2FsTGVmdE9mZnNldDsK
KyAgICB9CisKKyAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7Cit9CisKK3RlbXBsYXRlIGNs
YXNzIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5z
aWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjsKK3RlbXBsYXRlIGNsYXNzIFNoYXBl
SW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmU2hhcGU6OmdldEV4
Y2x1ZGVkSW50ZXJ2YWxzPjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUxM2QzMmE1ZDYwOTVmNWQyZjA5OGU4ZmIw
OTBhNjEyYzU0ZTMzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisqIENvcHlyaWdodCAo
QykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisq
ICAgIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorKiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YKKyogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisqIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBTaGFwZUlu
Zm9faAorI2RlZmluZSBTaGFwZUluZm9faAorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIEluZm9U
eXBlPgorY2xhc3MgTWFwcGVkSW5mbyB7CitwdWJsaWM6CisgICAgc3RhdGljIEluZm9UeXBlKiBl
bnN1cmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkKKyAgICB7CisgICAgICAgIEluZm9NYXAmIGlu
Zm9NYXAgPSBNYXBwZWRJbmZvPEtleVR5cGUsIEluZm9UeXBlPjo6aW5mb01hcCgpOworICAgICAg
ICBpZiAoSW5mb1R5cGUqIGluZm8gPSBpbmZvTWFwLmdldChrZXkpKQorICAgICAgICAgICAgcmV0
dXJuIGluZm87CisgICAgICAgIHR5cGVuYW1lIEluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBp
bmZvTWFwLmFkZChrZXksIEluZm9UeXBlOjpjcmVhdGVJbmZvKGtleSkpOworICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQg
cmVtb3ZlSW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsgaW5mb01hcCgpLnJlbW92ZShrZXkpOyB9
CisgICAgc3RhdGljIEluZm9UeXBlKiBpbmZvKGNvbnN0IEtleVR5cGUqIGtleSkgeyByZXR1cm4g
aW5mb01hcCgpLmdldChrZXkpOyB9Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25z
dCBLZXlUeXBlKiwgT3duUHRyPEluZm9UeXBlPiA+IEluZm9NYXA7CisgICAgc3RhdGljIEluZm9N
YXAmIGluZm9NYXAoKQorICAgIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbmZvTWFw
LCBzdGF0aWNJbmZvTWFwLCAoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNJbmZvTWFwOworICAg
IH0KK307CisKK3RlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIFNoYXBlVmFsdWUqIChSZW5kZXJT
dHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChTaGFwZTo6KmludGVydmFsR2V0dGVy
KShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgorY2xhc3MgU2hh
cGVJbmZvIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5TaGFwZUluZm8oKSB7IH0KKworICAgIHZvaWQgc2V0U2hhcGVTaXplKExheW91dFVuaXQg
bG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpCisgICAgeworICAgICAgICBp
ZiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpIHsKKyAg
ICAgICAgICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9n
aWNhbFdpZHRoKCk7CisgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IG1fcmVuZGVyZXItPmJv
cmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9zaGFwZUxvZ2ljYWxXaWR0aCA9PSBsb2dpY2FsV2lkdGggJiYgbV9zaGFwZUxvZ2ljYWxIZWln
aHQgPT0gbG9naWNhbEhlaWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGlydHlT
aGFwZVNpemUoKTsKKyAgICAgICAgbV9zaGFwZUxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aDsK
KyAgICAgICAgbV9zaGFwZUxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0OworICAgIH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KTsKKyAgICB2b2lkIGNsZWFyU2VnbWVudHMoKSB7IG1f
c2VnbWVudHMuY2xlYXIoKTsgfQorCisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxUb3AoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgpICsgbG9n
aWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxCb3R0b20oKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WSgpICsg
bG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLngoKSArIGxv
Z2ljYWxMZWZ0T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFgoKSAr
IGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLndpZHRo
KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQorCisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGluZVRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9wICsg
bG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJvdHRvbSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9wICsgbV9saW5lSGVpZ2h0ICsgbG9naWNhbFRv
cE9mZnNldCgpOyB9CisKKyAgICBMYXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENP
TlRFTlRfQk9YKSA/IChtX3NoYXBlTG9naWNhbEhlaWdodCArIG1fcmVuZGVyZXItPmJvcmRlckFu
ZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpIDogbV9zaGFwZUxvZ2ljYWxIZWlnaHQ7IH0KKworICAg
IGJvb2wgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGlu
ZVRvcCgpIDwgc2hhcGVMb2dpY2FsQm90dG9tKCkgJiYgc2hhcGVMb2dpY2FsVG9wKCkgPD0gbG9n
aWNhbExpbmVCb3R0b20oKTsgfQorICAgIGJvb2wgbGluZVdpdGhpblNoYXBlQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiAobG9naWNhbExpbmVCb3R0
b20oKSA8PSBzaGFwZUxvZ2ljYWxCb3R0b20oKSk7IH0KKworICAgIHZvaWQgZGlydHlTaGFwZVNp
emUoKSB7IG1fc2hhcGUuY2xlYXIoKTsgfQorICAgIGJvb2wgc2hhcGVTaXplRGlydHkoKSB7IHJl
dHVybiAhbV9zaGFwZS5nZXQoKTsgfQorICAgIGNvbnN0IFJlbmRlclR5cGUqIG93bmVyKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorCitwcm90ZWN0ZWQ6CisgICAgU2hhcGVJbmZvKGNv
bnN0IFJlbmRlclR5cGUqIHJlbmRlcmVyKTogbV9yZW5kZXJlcihyZW5kZXJlcikgeyB9CisKKyAg
ICBjb25zdCBTaGFwZSogY29tcHV0ZWRTaGFwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0
UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOworCisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci0+
c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBtX3JlbmRlcmVyLT5ib3JkZXJB
bmRQYWRkaW5nQmVmb3JlKCkgOiBMYXlvdXRVbml0KCk7IH07CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hT
aXppbmcoKSA9PSBDT05URU5UX0JPWCAmJiAhbV9yZW5kZXJlci0+aXNSZW5kZXJSZWdpb24oKSkg
PyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nU3RhcnQoKSA6IExheW91dFVuaXQoKTsgfQor
CisgICAgTGF5b3V0VW5pdCBtX3NoYXBlTGluZVRvcDsKKyAgICBMYXlvdXRVbml0IG1fbGluZUhl
aWdodDsKKyAgICBTZWdtZW50TGlzdCBtX3NlZ21lbnRzOworCitwcml2YXRlOgorICAgIG11dGFi
bGUgT3duUHRyPFNoYXBlPiBtX3NoYXBlOworCisgICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNh
bFdpZHRoOworICAgIExheW91dFVuaXQgbV9zaGFwZUxvZ2ljYWxIZWlnaHQ7CisgICAgY29uc3Qg
UmVuZGVyVHlwZSogbV9yZW5kZXJlcjsKK307Cit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQxMjk1ZDAzZWRiMjczZmFlN2JhYmVjZDFjNGJhZTA5ZWFhY2UwZGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5m
by5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5mby5oIgorCisjaWYg
RU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvci5oIgorI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGluZVNlZ21lbnRS
YW5nZTo6TGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnQsIGNvbnN0
IElubGluZUl0ZXJhdG9yJiBlbmQpCisgICAgOiBzdGFydChzdGFydC5yb290KCksIHN0YXJ0Lm9i
amVjdCgpLCBzdGFydC5vZmZzZXQoKSkKKyAgICAsIGVuZChlbmQucm9vdCgpLCBlbmQub2JqZWN0
KCksIGVuZC5vZmZzZXQoKSkKKyAgICB7CisgICAgfQorCitib29sIFNoYXBlSW5zaWRlSW5mbzo6
aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKK3sKKyAgICBTaGFwZVZh
bHVlKiBzaGFwZVZhbHVlID0gcmVuZGVyZXItPnN0eWxlKCktPnJlc29sdmVkU2hhcGVJbnNpZGUo
KTsKKyAgICBpZiAoIXNoYXBlVmFsdWUgfHwgc2hhcGVWYWx1ZS0+dHlwZSgpICE9IFNoYXBlVmFs
dWU6OlNoYXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBCYXNpY1NoYXBlKiBzaGFw
ZSA9IHNoYXBlVmFsdWUtPnNoYXBlKCk7CisgICAgcmV0dXJuIHNoYXBlICYmIHNoYXBlLT50eXBl
KCkgIT0gQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTsKK30KKworYm9v
bCBTaGFwZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21lbnRX
aWR0aCkKK3sKKyAgICBjb25zdCBTaGFwZSogc2hhcGUgPSBjb21wdXRlZFNoYXBlKCk7CisgICAg
aWYgKCFzaGFwZSB8fCBtX2xpbmVIZWlnaHQgPD0gMCB8fCBsb2dpY2FsTGluZVRvcCgpID4gc2hh
cGVMb2dpY2FsQm90dG9tKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExheW91dFVu
aXQgbmV3TGluZVRvcDsKKyAgICBpZiAoc2hhcGUtPmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2lj
YWxUb3AobV9zaGFwZUxpbmVUb3AsIExheW91dFNpemUobWluU2VnbWVudFdpZHRoLCBtX2xpbmVI
ZWlnaHQpLCBuZXdMaW5lVG9wKSkgeworICAgICAgICBpZiAobmV3TGluZVRvcCA+IG1fc2hhcGVM
aW5lVG9wKSB7CisgICAgICAgICAgICBtX3NoYXBlTGluZVRvcCA9IG5ld0xpbmVUb3A7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluc2lkZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDA2YjM2NDU0YjlkYWIxYzIwMjY1Nzcw
NWVkNDk3MTg5YmM3ZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlSW5zaWRlSW5mb19oCisjZGVmaW5lIFNo
YXBlSW5zaWRlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUgIlNo
YXBlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElubGluZUl0ZXJhdG9yOwor
Y2xhc3MgUmVuZGVyQmxvY2s7CitjbGFzcyBSZW5kZXJPYmplY3Q7CisKK3N0cnVjdCBMaW5lU2Vn
bWVudEl0ZXJhdG9yIHsKKyAgICBSZW5kZXJPYmplY3QqIHJvb3Q7CisgICAgUmVuZGVyT2JqZWN0
KiBvYmplY3Q7CisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIExpbmVTZWdtZW50SXRlcmF0b3Io
UmVuZGVyT2JqZWN0KiByb290LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0
KQorICAgICAgICA6IHJvb3Qocm9vdCkKKyAgICAgICAgLCBvYmplY3Qob2JqZWN0KQorICAgICAg
ICAsIG9mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KK307CisKK3N0cnVjdCBMaW5lU2VnbWVu
dFJhbmdlIHsKKyAgICBMaW5lU2VnbWVudEl0ZXJhdG9yIHN0YXJ0OworICAgIExpbmVTZWdtZW50
SXRlcmF0b3IgZW5kOworICAgIExpbmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3Im
IHN0YXJ0LCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kKTsKK307CisKK3R5cGVkZWYgVmVjdG9y
PExpbmVTZWdtZW50UmFuZ2U+IFNlZ21lbnRSYW5nZUxpc3Q7CisKK2NsYXNzIFNoYXBlSW5zaWRl
SW5mbyA6IHB1YmxpYyBTaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2
ZWRTaGFwZUluc2lkZSwgJlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlSW5zaWRlSW5mbz4gY3JlYXRlSW5mbyhjb25zdCBS
ZW5kZXJCbG9jayogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaGFwZUluc2lkZUlu
Zm8ocmVuZGVyZXIpKTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmFibGVkRm9yKGNvbnN0IFJl
bmRlckJsb2NrKiByZW5kZXJlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRz
Rm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkgT1ZFUlJJ
REUKKyAgICB7CisgICAgICAgIG1fc2VnbWVudFJhbmdlcy5jbGVhcigpOworICAgICAgICByZXR1
cm4gU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNp
ZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5l
KGxpbmVUb3AsIGxpbmVIZWlnaHQpOworICAgIH0KKworICAgIGJvb2wgaGFzU2VnbWVudHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgJiYg
bV9zZWdtZW50cy5zaXplKCk7CisgICAgfQorICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50
cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzU2VnbWVudHMoKSk7CisgICAgICAg
IHJldHVybiBtX3NlZ21lbnRzOworICAgIH0KKyAgICBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50
UmFuZ2VzKCkgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9CisgICAgY29uc3QgU2VnbWVudFJh
bmdlTGlzdCYgc2VnbWVudFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsg
fQorICAgIGNvbnN0IExpbmVTZWdtZW50KiBjdXJyZW50U2VnbWVudCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIWhhc1NlZ21lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgQVNTRVJUKG1fc2VnbWVudFJhbmdlcy5zaXplKCkgPCBtX3NlZ21lbnRzLnNpemUoKSk7Cisg
ICAgICAgIHJldHVybiAmbV9zZWdtZW50c1ttX3NlZ21lbnRSYW5nZXMuc2l6ZSgpXTsKKyAgICB9
CisgICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcChmbG9hdCBtaW5TZWdtZW50V2lkdGgpOwor
CisgICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIHZhbHVlKSB7IG1fbmVlZHNMYXlvdXQgPSB2
YWx1ZTsgfQorICAgIGJvb2wgbmVlZHNMYXlvdXQoKSB7IHJldHVybiBtX25lZWRzTGF5b3V0OyB9
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2lj
YWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS0+
c2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBTaGFw
ZUluc2lkZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQorICAgIDogU2hhcGVJbmZv
PFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZTaGFwZTo6
Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IChyZW5kZXJlcikKKyAgICAsIG1fbmVlZHNMYXlvdXQoZmFs
c2UpCisgICAgeyB9CisKKyAgICBTZWdtZW50UmFuZ2VMaXN0IG1fc2VnbWVudFJhbmdlczsKKyAg
ICBib29sIG1fbmVlZHNMYXlvdXQ6MTsKK307CisKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNTU4MDM4YjI0N2MzYzg3NTcyZTU4NjBmMDhjODE5MmIyMWJhNDUxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNw
cApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisg
KiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTaGFwZUludGVydmFsLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJbnRlcnZhbFgxQ29tcGFyYXRvciB7CisgICAgYm9v
bCBvcGVyYXRvcigpIChjb25zdCBTaGFwZUludGVydmFsJiBpMSwgY29uc3QgU2hhcGVJbnRlcnZh
bCYgaTIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaTEueDEgPCBpMi54MTsKKyAgICB9
Cit9OworCitib29sIFNoYXBlSW50ZXJ2YWw6OmludGVyc2VjdChjb25zdCBTaGFwZUludGVydmFs
JiBpLCBTaGFwZUludGVydmFsJiBydikgY29uc3QKK3sKKyAgICBpZiAoeDIgPCBpLngxIHx8IHgx
ID4gaS54MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJ2LngxID0gc3RkOjptYXgoeDEs
IGkueDEpOworICAgIHJ2LngyID0gc3RkOjptaW4oeDIsIGkueDIpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIHNvcnRTaGFwZUludGVydmFscyhWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYp
Cit7CisgICAgc3RkOjpzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSwgSW50ZXJ2YWxYMUNvbXBhcmF0
b3IoKSk7Cit9CisKK3ZvaWQgbWVyZ2VTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJ
bnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYyLCBWZWN0b3I8U2hh
cGVJbnRlcnZhbD4mIHJ2KQoreworICAgIGlmICghdjEuc2l6ZSgpKQorICAgICAgICBydi5hcHBl
bmRSYW5nZSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSk7CisgICAgZWxzZSBpZiAoIXYyLnNpemUoKSkK
KyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworICAgIGVsc2Ug
eworICAgICAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gdih2MS5zaXplKCkgKyB2Mi5zaXplKCkp
OworICAgICAgICBTaGFwZUludGVydmFsKiBpbnRlcnZhbCA9IDA7CisKKyAgICAgICAgc3RkOjpt
ZXJnZSh2MS5iZWdpbigpLCB2MS5lbmQoKSwgdjIuYmVnaW4oKSwgdjIuZW5kKCksIHYuYmVnaW4o
KSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWludGVydmFsKQorICAgICAg
ICAgICAgICAgIGludGVydmFsID0gJnZbaV07CisgICAgICAgICAgICBlbHNlIGlmICh2W2ldLngx
ID49IGludGVydmFsLT54MSAmJiB2W2ldLngxIDw9IGludGVydmFsLT54MikgLy8gRklYTUU6IDFz
dCA8PSB0ZXN0IG5vdCBuZWVkZWQ/CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwtPngyID0gc3Rk
OjptYXgoaW50ZXJ2YWwtPngyLCB2W2ldLngyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGludGVydmFs
ID0gJnZbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW50ZXJ2
YWwpCisgICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKKyAgICB9Cit9CisKK3ZvaWQg
aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MSwg
Y29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBy
dikKK3sKKyAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUg
PSB2Mi5zaXplKCk7CisKKyAgICBpZiAoIXYxU2l6ZSB8fCAhdjJTaXplKQorICAgICAgICByZXR1
cm47CisKKyAgICBTaGFwZUludGVydmFsIGludGVydmFsOworICAgIGJvb2wgb3ZlcmxhcCA9IGZh
bHNlOworICAgIHNpemVfdCBpMSA9IDA7CisgICAgc2l6ZV90IGkyID0gMDsKKworICAgIHdoaWxl
IChpMSA8IHYxU2l6ZSAmJiBpMiA8IHYyU2l6ZSkgeworICAgICAgICBTaGFwZUludGVydmFsIHYx
MjsKKyAgICAgICAgaWYgKHYxW2kxXS5pbnRlcnNlY3QodjJbaTJdLCB2MTIpKSB7CisgICAgICAg
ICAgICBpZiAoIW92ZXJsYXAgfHwgIXYxMi5pbnRlcnNlY3QoaW50ZXJ2YWwsIGludGVydmFsKSkg
eworICAgICAgICAgICAgICAgIGlmIChvdmVybGFwKQorICAgICAgICAgICAgICAgICAgICBydi5h
cHBlbmQoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGludGVydmFsID0gdjEyOworICAgICAg
ICAgICAgICAgIG92ZXJsYXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHYxW2kxXS54MiA8IHYyW2kyXS54MikKKyAgICAgICAgICAgICAgICBpMSsrOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGkyKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOwor
ICAgICAgICAgICAgb3ZlcmxhcCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHYxW2kxXS54MSA8
IHYyW2kyXS54MSkKKyAgICAgICAgICAgICAgICBpMSsrOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGkyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob3ZlcmxhcCkK
KyAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKK30KKwordm9pZCBzdWJ0cmFjdFNoYXBlSW50
ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxTaGFw
ZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcnYpCit7CisgICAgc2l6ZV90
IHYxU2l6ZSA9IHYxLnNpemUoKTsKKyAgICBzaXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOworCisg
ICAgaWYgKCF2MVNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdjJTaXplKQorICAg
ICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIHNpemVfdCBpMSA9IDAsIGkyID0gMDsKKyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEu
YmVnaW4oKSwgdjEuZW5kKCkpOworCisgICAgICAgIHdoaWxlIChpMSA8IHJ2LnNpemUoKSAmJiBp
MiA8IHYyU2l6ZSkgeworICAgICAgICAgICAgU2hhcGVJbnRlcnZhbCYgaW50ZXJ2YWwxID0gcnZb
aTFdOworICAgICAgICAgICAgY29uc3QgU2hhcGVJbnRlcnZhbCYgaW50ZXJ2YWwyID0gdjJbaTJd
OworCisgICAgICAgICAgICBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSAmJiBpbnRl
cnZhbDIueDIgPj0gaW50ZXJ2YWwxLngyKQorICAgICAgICAgICAgICAgIHJ2LnJlbW92ZShpMSk7
CisgICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDEpCisgICAg
ICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+
IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAgICBpMSArPSAxOworICAgICAgICAgICAgZWxz
ZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA8IGludGVy
dmFsMS54MikgeworICAgICAgICAgICAgICAgIHJ2Lmluc2VydChpMSwgU2hhcGVJbnRlcnZhbChp
bnRlcnZhbDEueDEsIGludGVydmFsMi54MSkpOworICAgICAgICAgICAgICAgIGludGVydmFsMS54
MSA9IGludGVydmFsMi54MjsKKyAgICAgICAgICAgICAgICBpMiArPSAxOworICAgICAgICAgICAg
fSBlbHNlIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxKSB7CisgICAgICAgICAgICAg
ICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOworICAgICAgICAgICAgICAgIGkyICs9IDE7
CisgICAgICAgICAgICB9IGVsc2UgIHsgLy8gKGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIp
CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngyID0gaW50ZXJ2YWwyLngxOworICAgICAgICAg
ICAgICAgIGkxICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUludGVydmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZmMTRkOGE1YTcyMzJkOTJlZGEzZGZkOTM3
NzhhOTJjZDY5NTQ0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNoYXBlSW50ZXJ2YWxfaAorI2RlZmluZSBTaGFwZUludGVydmFsX2gKKworI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgU2hhcGVJbnRlcnZh
bCB7CitwdWJsaWM6CisgICAgZmxvYXQgeDE7CisgICAgZmxvYXQgeDI7CisKKyAgICBTaGFwZUlu
dGVydmFsKGZsb2F0IHgxID0gMCwgZmxvYXQgeDIgPSAwKQorICAgICAgICA6IHgxKHgxKQorICAg
ICAgICAsIHgyKHgyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGludGVyc2VjdChjb25zdCBT
aGFwZUludGVydmFsJiwgU2hhcGVJbnRlcnZhbCYpIGNvbnN0OworfTsKKwordm9pZCBzb3J0U2hh
cGVJbnRlcnZhbHMoVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7Cit2b2lkIG1lcmdlU2hhcGVJbnRl
cnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFNoYXBlSW50
ZXJ2YWw+JiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7Cit2b2lkIGludGVyc2VjdFNoYXBlSW50
ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBzdWJ0cmFjdFNoYXBlSW50
ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVydmFsPiYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBTaGFwZUludGVydmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxOTJm
NjUwNWQ4MjEyODM5MjgyZmFkOTNlNmUyNjNiMGRhZDIxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNv
cnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICog
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiU2hhcGVPdXRz
aWRlSW5mby5oIgorCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2Jvb2wgU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCog
Ym94KQoreworICAgIFNoYXBlVmFsdWUqIHZhbHVlID0gYm94LT5zdHlsZSgpLT5zaGFwZU91dHNp
ZGUoKTsKKyAgICByZXR1cm4gYm94LT5pc0Zsb2F0aW5nV2l0aFNoYXBlT3V0c2lkZSgpICYmIHZh
bHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6U2hhcGUgJiYgdmFsdWUtPnNoYXBlKCk7Cit9CisK
K2Jvb2wgU2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0
IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkKK3sKKyAgICBpZiAoc2hhcGVTaXplRGly
dHkoKSB8fCBtX2xpbmVUb3AgIT0gbGluZVRvcCB8fCBtX2xpbmVIZWlnaHQgIT0gbGluZUhlaWdo
dCkgeworICAgICAgICBpZiAoU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFw
ZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+Ojpjb21wdXRlU2VnbWVudHNG
b3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpKSB7CisgICAgICAgICAgICBtX2xlZnRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1swXS5sb2dpY2FsTGVmdCAtIHNoYXBl
TG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhID0gbV9zZWdtZW50c1ttX3NlZ21lbnRzLnNpemUoKS0xXS5sb2dpY2FsUmlnaHQgLSBz
aGFwZUxvZ2ljYWxSaWdodCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9sZWZ0
U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7CisgICAgICAgICAgICBtX3JpZ2h0U2Vn
bWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbV9saW5l
VG9wID0gbGluZVRvcDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7Cit9
CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZU91dHNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlT3V0c2lkZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmU1OTA1NmNjMWVkN2QwMjQ2MmVmNGE0NzE2
Y2QzOTdiYmVhM2QzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAg
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZU91dHNpZGVJbmZvX2gKKyNkZWZpbmUg
U2hhcGVPdXRzaWRlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUg
IkxheW91dFNpemUuaCIKKyNpbmNsdWRlICJTaGFwZUluZm8uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBSZW5kZXJCb3g7CisKK2NsYXNzIFNoYXBlT3V0c2lkZUluZm8gOiBwdWJs
aWMgU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFw
ZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+LCBwdWJsaWMgTWFwcGVkSW5mbzxSZW5kZXJCb3gsIFNo
YXBlT3V0c2lkZUluZm8+IHsKK3B1YmxpYzoKKyAgICBMYXlvdXRTaXplIHNoYXBlTG9naWNhbE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFNpemUoc2hhcGVMb2dpY2FsTGVmdCgpLCBzaGFw
ZUxvZ2ljYWxUb3AoKSk7IH0KKworICAgIExheW91dFVuaXQgbGVmdFNlZ21lbnRTaGFwZUJvdW5k
aW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhOyB9CisgICAgTGF5b3V0VW5pdCByaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVs
dGEoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsg
fQorCisgICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFOworCisgICAgc3RhdGljIFBh
c3NPd25QdHI8U2hhcGVPdXRzaWRlSW5mbz4gY3JlYXRlSW5mbyhjb25zdCBSZW5kZXJCb3gqIHJl
bmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgU2hhcGVPdXRzaWRlSW5mbyhyZW5kZXJlcikp
OyB9CisgICAgc3RhdGljIGJvb2wgaXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCopOworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91
bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCktPnNoYXBl
TWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBTaGFwZU91dHNp
ZGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVuZGVyZXIpIDogU2hhcGVJbmZvPFJlbmRlckJveCwg
JlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+
KHJlbmRlcmVyKSB7IH0KKworICAgIExheW91dFVuaXQgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRp
bmdCb3hEZWx0YTsKKyAgICBMYXlvdXRVbml0IG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhOworICAgIExheW91dFVuaXQgbV9saW5lVG9wOworfTsKKworfQorI2VuZGlmCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNpb25T
aGFwZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hh
cGVWYWx1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTlkMzk1NzMyMzgyZjNi
Mjc2YWM1Njc2YTYyZGIxNmYwN2ZlY2I4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNpb25T
aGFwZVZhbHVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVWYWx1ZV9oCi0jZGVmaW5lIEV4
Y2x1c2lvblNoYXBlVmFsdWVfaAotCi0jaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRl
ICJTdHlsZUltYWdlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBFeGNsdXNpb25TaGFwZVZhbHVlIDogcHVibGljIFJlZkNvdW50
ZWQ8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gewotcHVibGljOgotICAgIGVudW0gRXhjbHVzaW9uU2hh
cGVWYWx1ZVR5cGUgewotICAgICAgICAvLyBUaGUgQXV0byB2YWx1ZSBpcyBkZWZpbmVkIGJ5IGEg
bnVsbCBFeGNsdXNpb25TaGFwZVZhbHVlKgotICAgICAgICBTaGFwZSwKLSAgICAgICAgT3V0c2lk
ZSwKLSAgICAgICAgSW1hZ2UKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXhjbHVz
aW9uU2hhcGVWYWx1ZT4gY3JlYXRlU2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNo
YXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGNsdXNpb25TaGFwZVZh
bHVlKHNoYXBlKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hh
cGVWYWx1ZT4gY3JlYXRlT3V0c2lkZVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRXhjbHVzaW9uU2hhcGVWYWx1ZShPdXRzaWRlKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gY3JlYXRlSW1hZ2VWYWx1ZShQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBFeGNsdXNpb25TaGFwZVZhbHVlKGltYWdlKSk7Ci0gICAgfQotCi0gICAgRXhjbHVzaW9u
U2hhcGVWYWx1ZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIEJhc2lj
U2hhcGUqIHNoYXBlKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5nZXQoKTsgfQotICAgIFN0eWxl
SW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotICAgIHZvaWQg
c2V0SW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIGlm
IChtX2ltYWdlICE9IGltYWdlKQotICAgICAgICAgICAgbV9pbWFnZSA9IGltYWdlOwotICAgIH0K
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCk7IH0KLQotcHJpdmF0ZToKLSAgICBF
eGNsdXNpb25TaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGUpCi0gICAgICAg
IDogbV90eXBlKFNoYXBlKQotICAgICAgICAsIG1fc2hhcGUoc2hhcGUpCi0gICAgewotICAgIH0K
LSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKEV4Y2x1c2lvblNoYXBlVmFsdWVUeXBlIHR5cGUpCi0g
ICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgewotICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZh
bHVlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCi0gICAgICAgIDogbV90eXBlKEltYWdl
KQotICAgICAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgewotICAgIH0KLSAgICBFeGNsdXNpb25T
aGFwZVZhbHVlVHlwZSBtX3R5cGU7Ci0gICAgUmVmUHRyPEJhc2ljU2hhcGU+IG1fc2hhcGU7Ci0g
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1faW1hZ2U7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggYjhiMjIw
YWI2YzE0NDE5ZDIwOTkwYmUyMDhhZTM2ODVmNzVjN2I5MC4uYTQwMzdjMjU5MjEwNTkwZGM0NDBh
MjhiZGVkYzhjNDA4ZmJiMGY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC0xNzMzLDkgKzE3MzMsOSBAQCB2b2lkIFJlbmRlclN0eWxl
OjpzZXRCb3JkZXJJbWFnZU91dHNldChMZW5ndGhCb3ggb3V0c2V0KQogICAgIHN1cnJvdW5kLmFj
Y2VzcygpLT5ib3JkZXIubV9pbWFnZS5zZXRPdXRzZXQob3V0c2V0KTsKIH0KIAotRXhjbHVzaW9u
U2hhcGVWYWx1ZSogUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZSgpCitTaGFwZVZhbHVl
KiBSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlKCkKIHsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiwgc091dHNpZGVWYWx1ZSwgKEV4Y2x1
c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChSZWZQdHI8U2hhcGVWYWx1ZT4sIHNPdXRzaWRlVmFsdWUsIChTaGFwZVZhbHVlOjpj
cmVhdGVPdXRzaWRlVmFsdWUoKSkpOwogICAgIHJldHVybiBzT3V0c2lkZVZhbHVlLmdldCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCmluZGV4
IDY5MjIwZjMwN2E3NjViZGQ1MDJmZDk4MWJiMTc3OGFmMmQ3NjMxOWUuLjgzZmUwMjM4ZDI0YTVi
YjUxZmE0YjQ1ZTJmYTA0YzU4M2Q5MzgzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgogI2luY2x1ZGUgIkNvdW50ZXJEaXJlY3RpdmVzLmgiCiAjaW5jbHVkZSAiRGF0YVJl
Zi5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKICNpbmNsdWRlICJGb250QmFz
ZWxpbmUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCkBAIC00OSw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFu
dHMuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIK
KyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjaW5jbHVkZSAiU3R5bGVCYWNrZ3JvdW5kRGF0YS5o
IgogI2luY2x1ZGUgIlN0eWxlQm94RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlRGVwcmVjYXRlZEZs
ZXhpYmxlQm94RGF0YS5oIgpAQCAtMTQ3MCwzMSArMTQ3MCwzMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRLZXJuaW5nKFNWR0xlbmd0aCBrKSB7IGFjY2Vzc1NWR1N0eWxlKCktPnNldEtlcm5pbmco
ayk7IH0KICNlbmRpZgogCi0gICAgdm9pZCBzZXRTaGFwZUluc2lkZShQYXNzUmVmUHRyPEV4Y2x1
c2lvblNoYXBlVmFsdWU+IHZhbHVlKQorICAgIHZvaWQgc2V0U2hhcGVJbnNpZGUoUGFzc1JlZlB0
cjxTaGFwZVZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9zaGFwZUluc2lkZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fc2hhcGVJbnNpZGUgPSB2YWx1ZTsK
ICAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUoKSBjb25zdCB7IHJl
dHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZUluc2lkZS5nZXQoKTsgfQotICAgIEV4
Y2x1c2lvblNoYXBlVmFsdWUqIHJlc29sdmVkU2hhcGVJbnNpZGUoKSBjb25zdAorICAgIFNoYXBl
VmFsdWUqIHNoYXBlSW5zaWRlKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fc2hhcGVJbnNpZGUuZ2V0KCk7IH0KKyAgICBTaGFwZVZhbHVlKiByZXNvbHZlZFNoYXBlSW5z
aWRlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlSW5z
aWRlID0gdGhpcy0+c2hhcGVJbnNpZGUoKTsKLSAgICAgICAgaWYgKHNoYXBlSW5zaWRlICYmIHNo
YXBlSW5zaWRlLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6T3V0c2lkZSkKKyAgICAg
ICAgU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUgPSB0aGlzLT5zaGFwZUluc2lkZSgpOworICAgICAg
ICBpZiAoc2hhcGVJbnNpZGUgJiYgc2hhcGVJbnNpZGUtPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpP
dXRzaWRlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXBlT3V0c2lkZSgpOwogICAgICAgICByZXR1
cm4gc2hhcGVJbnNpZGU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTaGFwZU91dHNpZGUoUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFNoYXBlT3V0c2lk
ZShQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fc2hhcGVPdXRz
aWRlID0gdmFsdWU7CiAgICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlT3V0c2lk
ZSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZS5n
ZXQoKTsgfQorICAgIFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSgpIGNvbnN0IHsgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZS5nZXQoKTsgfQogCi0gICAgc3RhdGlj
IEV4Y2x1c2lvblNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZUluc2lkZSgpOwotICAgIHN0YXRpYyBF
eGNsdXNpb25TaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVPdXRzaWRlKCkgeyByZXR1cm4gMDsgfQor
ICAgIHN0YXRpYyBTaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVJbnNpZGUoKTsKKyAgICBzdGF0aWMg
U2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlT3V0c2lkZSgpIHsgcmV0dXJuIDA7IH0KIAogICAgIHZv
aWQgc2V0Q2xpcFBhdGgoUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gb3BlcmF0aW9uKQog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFwZVZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY3NGFlZWIyOWY4MjVjYmE1OTM4NTdiMTA5YTlkMWFiNDQ0OWNiMGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhcGVWYWx1ZS5oCkBA
IC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFw
ZVZhbHVlX2gKKyNkZWZpbmUgU2hhcGVWYWx1ZV9oCisKKyNpbmNsdWRlICJCYXNpY1NoYXBlcy5o
IgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXBlVmFsdWUgOiBwdWJsaWMgUmVmQ291
bnRlZDxTaGFwZVZhbHVlPiB7CitwdWJsaWM6CisgICAgZW51bSBTaGFwZVZhbHVlVHlwZSB7Cisg
ICAgICAgIC8vIFRoZSBBdXRvIHZhbHVlIGlzIGRlZmluZWQgYnkgYSBudWxsIFNoYXBlVmFsdWUq
CisgICAgICAgIFNoYXBlLAorICAgICAgICBPdXRzaWRlLAorICAgICAgICBJbWFnZQorICAgIH07
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBjcmVhdGVTaGFwZVZhbHVlKFBh
c3NSZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNoYXBlVmFsdWUoc2hhcGUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTaGFwZVZhbHVlPiBjcmVhdGVPdXRzaWRlVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTaGFwZVZhbHVlKE91dHNpZGUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBjcmVhdGVJbWFnZVZhbHVlKFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXBlVmFs
dWUoaW1hZ2UpKTsKKyAgICB9CisKKyAgICBTaGFwZVZhbHVlVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisgICAgQmFzaWNTaGFwZSogc2hhcGUoKSBjb25zdCB7IHJldHVybiBt
X3NoYXBlLmdldCgpOyB9CisgICAgU3R5bGVJbWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X2ltYWdlLmdldCgpOyB9CisgICAgdm9pZCBzZXRJbWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IGltYWdlKQorICAgIHsKKyAgICAgICAgaWYgKG1faW1hZ2UgIT0gaW1hZ2UpCisgICAgICAgICAg
ICBtX2ltYWdlID0gaW1hZ2U7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFw
ZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKTsgfQor
Citwcml2YXRlOgorICAgIFNoYXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZSkK
KyAgICAgICAgOiBtX3R5cGUoU2hhcGUpCisgICAgICAgICwgbV9zaGFwZShzaGFwZSkKKyAgICB7
CisgICAgfQorICAgIFNoYXBlVmFsdWUoU2hhcGVWYWx1ZVR5cGUgdHlwZSkKKyAgICAgICAgOiBt
X3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIFNoYXBlVmFsdWUoUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBpbWFnZSkKKyAgICAgICAgOiBtX3R5cGUoSW1hZ2UpCisgICAgICAgICwgbV9pbWFn
ZShpbWFnZSkKKyAgICB7CisgICAgfQorICAgIFNoYXBlVmFsdWVUeXBlIG1fdHlwZTsKKyAgICBS
ZWZQdHI8QmFzaWNTaGFwZT4gbV9zaGFwZTsKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFn
ZTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCAwYTNjN2E4Y2Fj
MWJjMjBhMGU0NDVkOTczM2Q3MDVhNjA1YmQxMWNjLi4wNzY3YWQ4YzMxZmM3ZGY4ZGZhZDljOGFk
YTk0OTliZTBjOWY0OWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTMwLDEwICszMCwxMCBA
QAogI2luY2x1ZGUgIkNvdW50ZXJEaXJlY3RpdmVzLmgiCiAjaW5jbHVkZSAiQ3Vyc29yRGF0YS5o
IgogI2luY2x1ZGUgIkRhdGFSZWYuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgi
CiAjaW5jbHVkZSAiRmlsbExheWVyLmgiCiAjaW5jbHVkZSAiTGluZUNsYW1wVmFsdWUuaCIKICNp
bmNsdWRlICJOaW5lUGllY2VJbWFnZS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC0xMzYsOCArMTM2LDggQEAgcHVibGljOgogCiAgICAgTGVuZ3Ro
U2l6ZSBtX3BhZ2VTaXplOwogCi0gICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IG1fc2hh
cGVJbnNpZGU7Ci0gICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IG1fc2hhcGVPdXRzaWRl
OworICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBtX3NoYXBlSW5zaWRlOworICAgIFJlZlB0cjxTaGFw
ZVZhbHVlPiBtX3NoYXBlT3V0c2lkZTsKICAgICBMZW5ndGggbV9zaGFwZU1hcmdpbjsKICAgICBM
ZW5ndGggbV9zaGFwZVBhZGRpbmc7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDE5YmI0ZWNhNmFk
M2M3NGE0ZjU4NGNjNzNhNzYyNjhmZjlkOGUyNGEuLjJmYjg4OWRmZTIxN2Q4MTAyYmRiMWQ1Y2U0
MjBlMWYzMWVkN2JlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtNDEsNiArNDEsNyBAQCBzZXQo
V2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
dGV4dCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucyIKICAgICAiJHtXRUJDT1JFX0RJUn0v
cmVuZGVyaW5nIgorICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc2hhcGVzIgogICAgICIk
e1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3R5bGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N0b3Jh
Z2UiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2ZyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggM2Y4
OGE4MzZhZWUxMjcwYjliYTA5ODhlMGI4YjUyNTJmYTllN2E2OS4uMDA2ZmM1OTU1MTFkMTllMGYw
MDc4YTVjZjUwODZhMTQzMDc1NDBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTkzLDYgKzkz
LDcgQEAgc2V0KFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS90ZXh0IgogICAgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zIgogICAgICIke1dF
QkNPUkVfRElSfS9yZW5kZXJpbmciCisgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zaGFw
ZXMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zdHlsZSIKICAgICAiJHtXRUJDT1JF
X0RJUn0vc3RvcmFnZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnIgpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZkMzdmZTYyNjQ4N2I0Y2Y0NzUw
YzA2MjY4YzMyYzZhMzFkMWU3NGIuLmVjOWQwMzY3YzBhMmI5ZGI3MTdhMTE1M2YyNTE3NGM0ZTQy
ODk5ZmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxMy0wNi0wNyAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9i
ZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NTUyBFeGNsdXNpb25zXSBTcGxpdCBDU1Mg
RXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgdGhlIHJlbmRlcmluZy9zaGFwZXMgZGlyZWN0
b3J5CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6CisKIDIw
MTMtMDYtMDYgIFl1a2kgU2VraWd1Y2hpICA8eXVraS5zZWtpZ3VjaGlAYWNjZXNzLWNvbXBhbnku
Y29tPgogCiAgICAgICAgIHN2bi1hcHBseSBjYW5ub3QgYXBwbHkgcGF0Y2hlcyB3aGljaCBpcyBn
ZW5lcmF0ZWQgYnkgZ2l0IHRvIGZpbGVzIHRoYXQgY29udGFpbiBzcGFjZSBjaGFyYWN0ZXJzIGlu
IHRoZWlyIHBhdGgKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxp
c3RzLnR4dCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAppbmRleCBj
ZGQ2YTk5OGI3MDVlMTBiMTc2YjI2ODdhYzA3MGEwOGRjZDIxYTM4Li45OTgwMTkxMjExZDMzZjg0
YzZkMjIyMDNkNGNlMTEyNDM5Y2MzN2FiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtl
TGlzdHMudHh0CkBAIC03Nyw2ICs3Nyw3IEBAIHNldChEdW1wUmVuZGVyVHJlZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwCiAgICAg
JHtXRUJDT1JFX0RJUn0vcGx1Z2lucwogICAgICR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZworICAg
ICR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zaGFwZXMKICAgICAke1dFQkNPUkVfRElSfS9yZW5k
ZXJpbmcvc3R5bGUKICAgICAke1dFQkNPUkVfRElSfS9oaXN0b3J5CiAgICAgJHtXRUJDT1JFX0RJ
Un0vbG9hZGVyCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204176</attachid>
            <date>2013-06-10 11:51:28 -0700</date>
            <delta_ts>2013-06-10 13:38:39 -0700</delta_ts>
            <desc>Updated, incorporating feedback</desc>
            <filename>bug-117162-20130610114951.patch</filename>
            <type>text/plain</type>
            <size>290726</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJjMWUzY2Q5NTBkNGZk
NTM0M2NjOGUzZGY2MDkwODgzY2Q1MTgyOC4uZGE5ZTNhZjdiMGMxMzkzN2JkNmEyMzBhNWEzMzMw
NDRhOWM2MDJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMCBAQAorMjAxMy0wNi0xMCAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSBz
cGxpdCBiZXR3ZWVuIHRoZSBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBzcGVjaWZpY2F0
aW9ucywKKyAgICAgICAgc29tZSByZW5hbWluZyBpcyBuZWNlc3NhcnkuIEluIGdlbmVyYWwsIHRo
aXMgcGF0Y2ggcmVtb3ZlcyAnRXhjbHVzaW9uJyBmcm9tCisgICAgICAgIGFueSBTaGFwZXMgY29k
ZSwgd2hpbGUgb3JnYW5pemluZyB0aGUgcmVuZGVyaW5nIHNoYXBlcyBjb2RlIGludG8gYSAnc2hh
cGVzJworICAgICAgICBmb2xkZXIuCisKKyAgICAgICAgUmVuYW1lczoKKyAgICAgICAgRXhjbHVz
aW9uU2hhcGUgLT4gU2hhcGUKKyAgICAgICAgRXhjbHVzaW9uW1JlY3RhbmdsZXxQb2x5Z29uXSAt
PiBbUmVjdGFuZ2xlfFBvbHlnb25dU2hhcGUKKyAgICAgICAgRXhjbHVzaW9uIC0+IFNoYXBlCisK
KyAgICAgICAgUmVmYWN0b3JpbmcsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLnByaToK
KyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFj
dG9yOjpwcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaDoK
KyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5U2hhcGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlTaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5U2hhcGU6OmNyZWF0ZUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRl
ZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcik6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Ymxl
bmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclNoYXBlOjpQcm9wZXJ0
eVdyYXBwZXJTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
ZW5zdXJlUHJvcGVydHlNYXApOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6
OkxheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpzaGFwZUluc2lk
ZUluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnVwZGF0ZVNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6c2hhcGVJbmZvUmVxdWlyZXNSZWxheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZVNoYXBlU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lv
bnNBZnRlckNoaWxkTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNl
cnRGbG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0
ZUxvZ2ljYWxMb2NhdGlvbkZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpwb3NpdGlvbk5ld0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbnN1cmVTaGFwZUluc2lkZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNoYXBlSW5zaWRlSW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0U2hhcGVJbnNpZGVJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGlu
Z01hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6eVBvc2l0aW9uRm9yRmxv
YXRJbmNsdWRpbmdNYXJnaW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFNoYXBlSW5z
aWRlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OkxpbmVXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURp
cmVjdGlvblBvc2l0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0Qmlk
aVJ1bnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdExvZ2ljYWxMaW5lVG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVMaW5lQm91bmRhcmllc0ZvclNo
YXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExpbmVU
b3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRTZWdtZW50QnJlYWspOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp3aWxs
QmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzdHlsZURpZENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVwZGF0ZVNoYXBlT3V0c2lkZUluZm9B
ZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNoYXBlT3V0c2lkZUluZm8pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRPZmZzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OmxlZnRTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUmVmbGV4VmVydGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVYSW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Omlud2FyZEVkZ2VOb3JtYWwpOgorICAgICAgICAoV2ViQ29yZTo6b3V0d2FyZEVkZ2VO
b3JtYWwpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQXJjKToKKyAgICAgICAgKFdlYkNvcmU6
OnNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZVNoYXBlUGFkZGluZ0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU2hhcGVNYXJn
aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpzaGFwZVBhZGRpbmdC
b3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpzaGFwZU1hcmdpbkJvdW5k
cyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjphcHBlbmRJbnRlcnZhbFgpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cGFyZUVkZ2VJbnRlcnNlY3Rpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2pl
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRl
cnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpnZXRJbmNsdWRlZEludGVy
dmFscyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZpdFJlY3RJblBvbHlnb24pOgorICAgICAg
ICAoV2ViQ29yZTo6YWJvdmVPclRvVGhlTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29u
U2hhcGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJlbmRl
cmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oLgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0UG9s
eWdvbkVkZ2U6Ok9mZnNldFBvbHlnb25FZGdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBv
bHlnb25FZGdlOjplZGdlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0UG9seWdvbkVk
Z2U6OmJhc2lzKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6UG9seWdvblNoYXBl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6ZWxsaXBzZVhJbnRlcmNlcHQpOgorICAgICAgICAoV2ViQ29yZTo6
ZWxsaXBzZVlJbnRlcmNlcHQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6
cGFkZGluZ0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0OjptYXJn
aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6Y29ybmVySW50
ZXJjZXB0Rm9yV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OnNoYXBl
UGFkZGluZ0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6c2hhcGVN
YXJnaW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6OmdldEV4Y2x1
ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpnZXRJbmNs
dWRlZEludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Zmlyc3RJ
bmNsdWRlZEludGVydmFsTG9naWNhbFRvcCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9S
ZWN0YW5nbGVTaGFwZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblJlY3RhbmdsZS5oLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdDo6
RmxvYXRSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Ojpy
eCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0OjpyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6UmVjdGFuZ2xlU2hhcGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlY3Rhbmds
ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNoYXBlQ2lyY2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVNoYXBlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQ
b2x5Z29uU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6cGh5c2ljYWxSZWN0VG9Mb2dpY2FsKToK
KyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6cGh5c2ljYWxTaXplVG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpj
cmVhdGVTaGFwZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmguCisgICAgICAg
IChXZWJDb3JlOjpMaW5lU2VnbWVudDo6TGluZVNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6On5TaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6c2hhcGVNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OnNoYXBlUGFkZGluZyk6CisgICAgICAgICogcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAuCisgICAgICAgIChXZWJDb3JlOjo6OmNvbXB1
dGVkU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKToK
KyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oLgorICAgICAgICAoV2Vi
Q29yZTo6TWFwcGVkSW5mbzo6ZW5zdXJlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJ
bmZvOjpyZW1vdmVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcHBlZEluZm86OmluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6aW5mb01hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86On5TaGFwZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpz
ZXRTaGFwZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpjbGVhclNlZ21lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsQm90dG9tKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFwZUluZm86OnNoYXBlTG9naWNhbFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5m
bzo6c2hhcGVMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpzaGFw
ZUxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGlu
ZVRvcCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmxvZ2ljYWxMaW5lQm90dG9tKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcyk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmxpbmVXaXRoaW5TaGFwZUJvdW5kcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmRpcnR5U2hhcGVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5mbzo6c2hhcGVTaXplRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVJbmZvOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OlNoYXBlSW5mbyk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmxvZ2ljYWxUb3BPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpsb2dpY2FsTGVmdE9mZnNldCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpMaW5lU2VnbWVudFJhbmdlOjpMaW5lU2VnbWVudFJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlSW5zaWRlSW5mbzo6YWRqdXN0TG9naWNhbExpbmVUb3ApOgorICAgICAgICAqIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmguCisgICAgICAgIChXZWJDb3Jl
OjpMaW5lU2VnbWVudEl0ZXJhdG9yOjpMaW5lU2VnbWVudEl0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6Y3JlYXRlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFwZUluc2lkZUluZm86Omhhc1NlZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5z
aWRlSW5mbzo6c2VnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpz
ZWdtZW50UmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6Y3VycmVu
dFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpzZXROZWVkc0xh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86Om5lZWRzTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6U2hhcGVJbnNpZGVJbmZvKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OkludGVydmFsWDFDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW50ZXJ2YWw6OmludGVyc2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0
U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VTaGFwZUludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjppbnRlcnNlY3RTaGFwZUludGVydmFscyk6CisgICAgICAgIChX
ZWJDb3JlOjpzdWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW50ZXJ2YWwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25JbnRlcnZhbC5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnRlcnZhbDo6
U2hhcGVJbnRlcnZhbCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJ
bmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86
OmlzRW5hYmxlZEZvcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjb21w
dXRlU2VnbWVudHNGb3JMaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0
c2lkZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvLmguCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZv
OjpzaGFwZUxvZ2ljYWxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5m
bzo6bGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGVPdXRzaWRlSW5mbzo6cmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OmNyZWF0ZUluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6U2hhcGVPdXRzaWRlSW5mbyk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TaGFwZVZhbHVlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVW
YWx1ZS5oLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFwZVZhbHVlOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6
OnNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlVmFsdWU6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
VmFsdWU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6U2hhcGVW
YWx1ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEuaDoKKwogMjAxMy0wNi0xMCAgT3R0byBEZXJlayBDaGV1bmcgIDxvdGNoZXVuZ0ByaW0uY29t
PgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBTdG9yZSBQYXJzZWRDb29raWVzIGFzIFJlZlB0cnMg
aW5zdGVhZCBvZiBQYXNzUmVmUHRycyBpbiBDb29raWVEYXRhYmFzZUJhY2tpbmdTdG9yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCBlYTMwYzVlYzI2ODkyYjZlNmFkZDZhODVkYzAyMzFmMGZiNDAyYjlhLi43ODYxZmIy
Y2MzMTg2YjUyMDRkZTU2MjkzYWRhZTEyYTEwYjRlNjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEzLTA2LTA3ICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KKworICAg
ICAgICBbQ1NTIFNoYXBlc11bQ1NTIEV4Y2x1c2lvbnNdIFNwbGl0IENTUyBFeGNsdXNpb25zIGFu
ZCBDU1MgU2hhcGVzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNzE2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGluZyB0aGUgcmVuZGVyaW5nL3NoYXBlcyBkaXJlY3RvcnkKKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorCiAyMDEzLTA2LTA2ICBSb2dlciBGb25nICA8cm9nZXJfZm9u
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgY29uZmlndXJhdGlvbiBm
aXguIFdlYktpdEV4cG9ydEdlbmVyYXRvcidzIGluY2x1ZGUgcGF0aCBzaG91bGQgZmFsbCBiYWNr
IHRvIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDc2NmZmZmQ3MWM3YmU2M2MzYTI2NjNlOGE2MDcxNmFkYWM0OWFm
YzYuLjQ0ODg0ZjczZWNjNWRiNzBmYjNiNWFhYzhlNmU5MzViNmZlYjVjZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxMy0wNi0xMCAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9i
ZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NTUyBFeGNsdXNpb25zXSBTcGxpdCBDU1Mg
RXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgdGhlIHJlbmRlcmluZy9zaGFwZXMgZGlyZWN0
b3J5CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKwogMjAxMy0wNi0wOSAgSmFlIEh5dW4g
UGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFtDb29yZGluYXRlZEdy
YXBoaWNzXSBUeXBvIGluIGFyZ3VtZW50IGRlY29kZXIgZm9yIENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4ZTgzNzM1OWM5MzU2NmRjNTU2YTRlM2YyODc5
Y2M2Yjc5NzIxZWZkLi43ODVhNmE3MWI3ZTFiOTkwMzlmZGU4NzJkNTM1ZTNhMjMyMTA2NGIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNzYsNiArNzYsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L3JlbmRlcmluZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL21hdGhtbCIK
KyAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3NoYXBlcyIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcmVuZGVyaW5nL3N0eWxlIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3ZnIgog
ICAgICIke1dFQkNPUkVfRElSfS9zdG9yYWdlIgpAQCAtMjA5MywxMyArMjA5NCw2IEBAIHNldChX
ZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvQmlkaVJ1bi5jcHAKICAgICByZW5kZXJpbmcv
Q291bnRlck5vZGUuY3BwCiAgICAgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAotICAgIHJlbmRl
cmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdv
bi5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAotICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNw
cAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwCi0gICAgcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwCiAgICAgcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmNwcAogICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAogICAg
IHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKQEAgLTIyMTQsNiArMjIwOCwxNCBA
QCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxT
dWJTdXAuY3BwCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3Bw
CiAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAKKyAgICByZW5kZXJpbmcv
c2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3Bw
CisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCisgICAgcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluc2lkZUluZm8uY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFs
LmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKKwogICAgIHJl
bmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUvQ29udGVu
dERhdGEuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBjNmFjNzc4YzQ5OWI1ZWZmNDZmNDhiMmZiZjhlNDFiMGZkMGQ2
ZWM4Li4wNTc0YjhhZmE4YThjNDY4Y2NlOGY4N2FjMjllOGIyMGJhZjVmYjg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtOTAsNiArOTAsNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQo
c3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbiBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUgXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcgXAogCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggODQx
YTU0MTk1MDRiODYwN2VjMjRhYTQzZjE3Yzk2MTkyNmY1Y2JmMS4uOTRkZmU2YzlmMmUyNzkzMWZl
MzIyZWYxMmZmOTE5N2I5OGY1MDY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC00Mzg1LDIwICs0Mzg1LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmgg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uUmVjdGFuZ2xlLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXApAQCAtNDYzMyw2ICs0NjE5LDIwIEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxTdWJTdXAuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxVbmRlck92ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFVuZGVyT3Zlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1BvbHlnb25TaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9s
eWdvblNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xl
U2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNo
YXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZUluZm8uaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlSW50ZXJ2YWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
SW50ZXJ2YWwuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oIFwKQEAgLTQ2NDYsNyAr
NDY0Niw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0N1cnNvckRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1
cnNvckxpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0RhdGFSZWYuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oIFwKQEAgLTQ2NjMsNiArNDY2Miw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaCBcCisJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRhLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAw
YjRhNGZkOWQwNmRkZDg1M2YyMDZjMTUyYjA3ZGMwMmMyZjJhNjc5Li4wN2JhOGJkOTc3YWY3ODNm
ZDExNWYzMGNkNjFkYzRlZjI0ZDg0YjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTExNDUsMTMgKzExNDUs
NiBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvQmlkaVJ1bi5jcHAgXAogICAgIHJlbmRl
cmluZy9Db3VudGVyTm9kZS5jcHAgXAogICAgIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgXAot
ICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNs
dXNpb25Qb2x5Z29uLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAg
XAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluZm8uY3BwIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIFwK
ICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIFwKICAgICByZW5kZXJpbmcv
Rml4ZWRUYWJsZUxheW91dC5jcHAgXAogICAgIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxl
ci5jcHAgXApAQCAtMTI0NSw2ICsxMjM4LDEzIEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJXb3JkQnJlYWsuY3BwIFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAg
XAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFw
ZXMvUG9seWdvblNoYXBlLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFw
ZS5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIFwKKyAgICByZW5kZXJpbmcv
c2hhcGVzL1NoYXBlSW5mby5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJ
bmZvLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcCBcCisgICAg
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0
eWxlL0Jhc2ljU2hhcGVzLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRhLmNw
cCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmNwcCBcCkBAIC0yNDAz
LDEzICsyNDAzLDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmgg
XAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5oIFwKICAgICByZW5kZXJpbmcvRWxsaXBzaXNC
b3guaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggXAotICAgIHJlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUu
aCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmggXAotICAgIHJlbmRlcmluZy9FeGNs
dXNpb25TaGFwZUluZm8uaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIFwKICAgICBy
ZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBcCiAgICAgcmVuZGVyaW5nL0ZpeGVkVGFi
bGVMYXlvdXQuaCBcCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIFwK
QEAgLTI1MTMsMTggKzI1MDYsMjUgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRl
cldvcmRCcmVhay5oIFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5oIFwKICAgICByZW5k
ZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hh
cGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oIFwKKyAgICByZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmgg
XAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmggXAorICAgIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0
c2lkZUluZm8uaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmggXAogICAgIHJl
bmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ291bnRl
ckRpcmVjdGl2ZXMuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1cnNvckRhdGEuaCBcCiAgICAg
cmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3QuaCBcCi0gICAgcmVuZGVyaW5nL3N0eWxlL0V4Y2x1
c2lvblNoYXBlVmFsdWUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oIFwKICAg
ICByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9O
aW5lUGllY2VJbWFnZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oIFwKICAg
ICByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1No
YWRvd0RhdGEuaCBcCisgICAgcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUuaCBcCiAgICAgcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxl
L1N0eWxlQm94RGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5o
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcmkKaW5kZXggNTMwMmM0Y2UzZGZhODZlNGVlZWI3YjcxYzI0YTY2NzI4M2Y3
YTA2Zi4uYjVlMzM0YjBiMGM1NGQyYzgxMTk3ZDM0NjM1ZTVjMDEyMDM0ZmFkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcmkKQEAgLTg1LDYgKzg1LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJ
Ui9wbHVnaW5zIFwKICAgICAkJFNPVVJDRV9ESVIvcmVuZGVyaW5nIFwKICAgICAkJFNPVVJDRV9E
SVIvcmVuZGVyaW5nL21hdGhtbCBcCisgICAgJCRTT1VSQ0VfRElSL3JlbmRlcmluZy9zaGFwZXMg
XAogICAgICQkU09VUkNFX0RJUi9yZW5kZXJpbmcvc3R5bGUgXAogICAgICQkU09VUkNFX0RJUi9y
ZW5kZXJpbmcvc3ZnIFwKICAgICAkJFNPVVJDRV9ESVIvc3RvcmFnZSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCBlODA3MjAxYjQxMTBi
OWNhY2U3NWYwZTE2MDc0ZDMyZDJlYzBkNzY5Li4wZDk1YTIyOTJjZjUwZTBhN2NlNTU3Zjk2ZTJi
YjIwNGI0NDYyMDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oKQEAgLTU0MjIsMTIgKzU0MjIsNiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9X
aW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJv
ZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbkludGVydmFs
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Q
b2x5Z29uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25SZWN0YW5nbGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXEV4Y2x1c2lvblNoYXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KQEAgLTYzMDYsNiArNjMwMCwxMiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWly
b3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlv
bnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hhcGUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5n
bGVTaGFwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFNoYXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcU2hhcGVJbnNpZGVJbmZvLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnRlcnZhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUluZm8uY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdQYXRoRGF0YS5jcHAiPgog
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBA
IC0xMjEwOSwxMSArMTIxMDksNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXGJyZWFrX2xpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcQ291bnRlck5vZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xFbGxpcHNpc0JveC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XEV4Y2x1c2lvbkludGVydmFsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVmZmVjdFJlbmRlcmVy
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRml4ZWRUYWJsZUxh
eW91dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZsb3dUaHJl
YWRDb250cm9sbGVyLmgiIC8+CkBAIC0xMjE5Nyw2ICsxMjE5MiwxMiBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclNlbGVjdGlvbkluZm8uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTbGlkZXIuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29u
U2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNc
UmVjdGFuZ2xlU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzaGFwZXNcU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVPdXRzaWRlSW5mby5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdCbG9jay5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdDb250YWlu
ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVy
U1ZHR3JhZGllbnRTdG9wLmgiIC8+CkBAIC0xMjI2OSw3ICsxMjI3MCw2IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcQ3Vyc29yRGF0YS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEN1cnNvckxpc3QuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxEYXRhUmVmLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcRXhjbHVzaW9uU2hhcGVW
YWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEZp
bGxMYXllci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxl
XEdyaWRQb3NpdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHN0eWxlXEdyaWRUcmFja1NpemUuaCIgLz4KQEAgLTEyMjgwLDYgKzEyMjgwLDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxSZW5kZXJTdHlsZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFJlbmRlclN0eWxlQ29u
c3RhbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVc
U2hhZG93RGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0
eWxlXFNoYXBlVmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzdHlsZVxTdHlsZUJhY2tncm91bmREYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVCb3hEYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVDYWNoZWRJbWFnZS5oIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0
ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0
ZXJzCmluZGV4IGY1ZTg3MjM4YzdmMjA4Yjc1OGEwZmQ3MTYxOGQwMmY0ZDIyZGM3MDMuLjVlMmNl
MDllYTRmNGMzZjg1MzJhOGIyY2RhMzFhZDJlNjQwODNhMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTI0
MzIsMjMgKzI0MzIsMjMgQEAKICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xFbGxpcHNpc0JveC5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJp
bmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hhcGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5jcHAiPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5jcHAiPgogICAgICAg
PEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0YW5nbGUuY3BwIj4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuY3BwIj4KICAgICAg
IDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGUuY3BwIj4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmNwcCI+
CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5jcHAiPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXHNoYXBlc1xTaGFwZUludGVydmFsLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmlu
ZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwIj4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVPdXRzaWRlSW5mby5jcHAiPgogICAg
ICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAiPgpA
QCAtOTEyMCwxOSArOTEyMCwyMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXEVsbGlwc2lzQm94LmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25JbnRlcnZhbC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcUG9seWdvblNoYXBlLmgiPgorICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4K
KyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcUmVjdGFuZ2xlU2hhcGUuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XEV4Y2x1c2lvblBvbHlnb24uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc2hhcGVzXFNoYXBlLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNs
dXNpb25TaGFwZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFw
ZXNcU2hhcGVJbnNpZGVJbmZvLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmlu
ZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCI+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUluZm8uaCI+CiAgICAgICA8
RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVmZmVjdFJlbmRlcmVyLmgiPgpAQCAtOTU4
OCw5ICs5NTkxLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHls
ZVxEYXRhUmVmLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHls
ZVxFeGNsdXNpb25TaGFwZVZhbHVlLmgiPgotICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzdHlsZVxGaWxsTGF5ZXIuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdHls
ZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtOTYyMSw2ICs5NjIxLDkgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFkb3dEYXRhLmgiPgogICAg
ICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTaGFwZVZhbHVlLmgiPgor
ICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTdHlsZUJhY2tncm91
bmREYXRhLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KQEAgLTE1MTg0LDQgKzE1MTg3LDQgQEAKICAgICAgIDxGaWx0ZXI+cmVuZGVy
aW5nPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAgIDwvSXRlbUdyb3VwPgotPC9Q
cm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0NTBm
MmM1ZjViZDY0MDRjZmZjZDc5OTVlNjZhN2ZkZjkzNTRmOTg3Li40YzQ4N2VhNTNhMTUzOWQwZDhh
ZDhlMzUzN2FjN2U5NzExMWUyOGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODM1LDE0ICsxODM1LDYgQEAKIAkJNkU2N0Qy
QTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNDEyODBFOEE0MDA4NzU4
RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLzsgfTsKIAkJNkU2N0QyQTcxMjgwRThBNDAw
ODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTC5oICovOyB9OwogCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5z
aW9uczNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi87IH07Ci0JCTZFODc5
OEJBMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg3OThCNDE1RjgxRTRBMDBCRkU0
QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwICovOyB9OwotCQk2RTg3OThCQjE1RjgxRTRBMDBC
RkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI1MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25J
bnRlcnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTZFODc5OEJDMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4QjYxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi87IH07Ci0JCTZFODc5OEJE
MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI3MTVGODFFNEEwMEJGRTRBQSAv
KiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLzsgfTsKLQkJNkU4Nzk4QkUxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFODc5OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5j
cHAgKi87IH07Ci0JCTZFODc5OEJGMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4Nzk4Qjkx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkVBRjM0MEYxNjEzODY5QTAwODU5NjI1IC8q
IEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24u
Y3BwICovOyB9OwotCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBRjM0
MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCAqLzsgfTsKIAkJNkVCQzVF
QUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAv
KiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07CiAJCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAv
KiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87
IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNDUxMkE4
OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi87IH07CkBAIC0zMjYzLDggKzMy
NTUsNiBAQAogCQk5OENFNDMyQTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xvYWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThDRTQzMjkxMjlFMDBF
NTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLzsgfTsKIAkJOThFQjFGOTUxMzEzRkUwNTAwRDBF
MUVBIC8qIE5vdEltcGxlbWVudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QTFC
NkY5NzE1ODg2OUM4MDAxMUE4QzQgLyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBMUI2Rjk2MTU4ODY5Qzgw
MDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwICovOyB9OwotCQk5QTlDRUY4RDE2
M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTlDRUY4QjE2M0IzRUExMDBE
RTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgKi87IH07Ci0JCTlBOUNFRjhF
MTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTlDRUY4QzE2M0IzRUExMDBE
RTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMUFCMDdDMTY0OEM3QzQwMDUxRjNGMiAv
KiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMUFCMDdCMTY0OEM3QzQwMDUxRjNGMiAv
KiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKIAkJOUIyNERF
OEUxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI0REU4QzE1MTk0Qjk1MDBDNTlDMjcgLyog
SFRNTEJESUVsZW1lbnQuaCAqLzsgfTsKIAkJOUIyRDhBNzkxNDk5N0NDRjAwRUNFRjNFIC8qIFVu
ZG9TdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTczOSw3ICs1NzI5LDcgQEAKIAkJRkQw
NkRGQTUxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA2REZBMzEz
NEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAqLzsgfTsK
IAkJRkQwNkRGQTYxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwNkRG
QTQxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oICovOyB9
OwogCQlGRDE2NjBBNTEzNzg3QzZEMDAxRkZBN0IgLyogRGVub3JtYWxEaXNhYmxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQxNjYwQTQxMzc4N0M2
RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCAqLzsgfTsKLQkJRkQxQUYxNTAxNjU2RjE1
MTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBFeGNs
dXNpb25TaGFwZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMUFGMTRFMTY1NkYx
MjEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkQyM0ExMjUxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZEMjNBMTIzMTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAgKi87IH07CiAJCUZEMjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAv
KiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyM0ExMjQxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi87IH07CiAJCUZEMkRCRjEyMTJCMDQ4QTMwMEVE
OThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVy
YXRlLmZyYW1ld29yayAqLzsgfTsKQEAgLTU4NTYsNiArNTg0NiwyMCBAQAogCQlGRDMxNjBDMDEy
QjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzMTYwQkExMkIwMjcyQTAwQzFBMzU5IC8qIEZGVEZy
YW1lTWFjLmNwcCAqLzsgfTsKIAkJRkQzNTkxOEYxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFy
YW1UaW1lbGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRDM1OTE4RDEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCAq
LzsgfTsKIAkJRkQzNTkxOTAxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzNTkxOEUx
MzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oICovOyB9OworCQlGRDQ1QTk0
RjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTUw
MTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgxMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUlu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
RDQ1QTk1MTE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4MzE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGVJbnNpZGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlT3V0c2lk
ZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
MDhBODg3MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTMxNzVEM0ZCODAw
QzIxRUM4IC8qIFNoYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZEMDhBODdFMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi87IH07CisJ
CUZENDVBOTU0MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODAxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlSW5mby5jcHAgKi87IH07CisJCUZENDVBOTU1MTc1RDNGQjgwMEMyMUVDOCAvKiBT
aGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQwOEE4ODIxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5jcHAg
Ki87IH07CisJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODg2
MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCAqLzsgfTsKKwkJRkQ0NUE5
NTcxNzVENDE0QzAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0IxNzVEMzkyNjAwMkNEMzYwIC8qIFBv
bHlnb25TaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUZENDVBOTU4MTc1RDQxNEMwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0QxNzVEMzky
NjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTkxNzVENDE3MTAwQzIxRUM4IC8qIFBvbHln
b25TaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDA4QTg3QTE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmNwcCAqLzsgfTsKKwkJ
RkQ0NUE5NUExNzVENDE3MTAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdDMTc1RDM5MjYwMDJD
RDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgKi87IH07CisJCUZENDVBOTVCMTc1RDQxRUUwMEMy
MUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDA4QTg4NTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVB
OTVDMTc1RDQyMEQwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODg0MTc1RDM5MjYwMDJDRDM2MCAv
KiBTaGFwZUludGVydmFsLmNwcCAqLzsgfTsKIAkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENFIC8q
IFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZENTM3MzUwMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgKi87IH07CiAJCUZE
NTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTExMzdCNjUxODAwMDA4RENFIC8qIFpl
cm9Qb2xlLmggKi87IH07CiAJCUZENTM3MzU2MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQ1MzczNTQxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbC5jcHAgKi87IH07CkBAIC01ODc4LDggKzU4ODIsNiBAQAogCQlGRDZFRDJDODEzNkI4RTY2
MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZFRDJDNjEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1p
Y3NDb21wcmVzc29yLmggKi87IH07CiAJCUZENkYyNTJDMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQ2RjI1MjkxM0Y1RUYwRTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAgKi87IH07CiAJCUZENkYyNTJEMTNGNUVGMEUwMDY1MTY1RiAv
KiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkYyNTJBMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLzsgfTsKLQkJRkQ3NDhBQkYxNUJGNzRFRDAwNTlDRjBE
IC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc0OEFCRDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmNwcCAqLzsgfTsKLQkJRkQ3NDhBQzAxNUJGNzRFRDAwNTlDRjBE
IC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3NDhBQkUxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZENzg2OEI5MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkQ3ODY4QjcxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5j
cHAgKi87IH07CiAJCUZENzg2OEJBMTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCAq
LzsgfTsKIAkJRkQ3RjI5OTExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJEU1BLZXJuZWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3RjI5
OEExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwICovOyB9OwpAQCAt
NTk0MCw4ICs1OTQyLDYgQEAKIAkJRkRCMDUyRTAxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3Vt
bWluZ0p1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGREIwNTJERTE1NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uaCAq
LzsgfTsKIAkJRkRCMTcwMDUxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREIx
NzAwMzE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCAqLzsgfTsK
IAkJRkRCMTcwMDYxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCMTcwMDQxNEEy
QkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oICovOyB9OwotCQlGREI4RDFE
QTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREI4RDFEOTE2QjBDMEQ3MDAzNDBGMTAg
LyogRXhjbHVzaW9uU2hhcGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJRkRCOEQxRTUxNkIwQ0M5NzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNo
YXBlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGREI4RDFEQjE2QjBDMEY2MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmNwcCAqLzsg
fTsKIAkJRkRCRDFERkMxNjdGRTI3RDAwNTFBMTFFIC8qIEpTT3NjaWxsYXRvck5vZGVDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRCRDFE
RkIxNjdGRTI3RDAwNTFBMTFFIC8qIEpTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwICovOyB9Owog
CQlGREJENDgwQzE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREJE
NDgwQTE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAg
Ki87IH07CiAJCUZEQkQ0ODBEMTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGREJENDgwQjE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5oICovOyB9OwpAQCAtODIyOCwxNCArODIyOCw2IEBACiAJCTZFNjdEMkE0MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNp
b25zM0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjQxNUY4MUU0QTAw
QkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4Y2x1c2lvbkludGVydmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNkU4Nzk4QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvbkludGVydmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5OEI2MTVGODFFNEEwMEJGRTRBQSAvKiBF
eGNsdXNpb25SZWN0YW5nbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25SZWN0YW5nbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjgxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lv
blNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lv
blNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjkxNUY4MUU0
QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEV4Y2x1c2lvblNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZF
QUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblBvbHlnb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RUFGMzQwRTE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVz
aW9uUG9seWdvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25Q
b2x5Z29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkM1RDgwMTM4QjRDNEUw
MEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0
NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2NEFycmF5LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFy
cmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQ2NEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUUxMzhCNTBGMjAw
QTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzA2
LDggKzk2OTgsNiBAQAogCQk5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xvYWRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rTG9hZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBs
ZW1lbnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RJbXBsZW1lbnRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QTFCNkY5NjE1ODg2OUM4MDAxMUE4
QzQgLyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTlBOUNFRjhCMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFwZU91
dHNpZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1
c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
QTlDRUY4QzE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMUFCMDc5MTY0OEM2OUQwMDUxRjNG
MiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3QjE2
NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIyNERF
OEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhUTUxCRElFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjU4MCw4ICsxMjU3MCwyMiBAQAogCQlGRDAwRDdBMzE0QTNGNjE5MDA3MzQwMTEg
LyogU2luY1Jlc2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW5j
UmVzYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMDZERkEzMTM0QTRE
RUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwNkRGQTQxMzRBNERFRjAwNkY1RDdE
IC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0ExNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5Z29uU2hhcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAg
LyogUG9seWdvblNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHln
b25TaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3QzE3NUQzOTI2
MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVjdGFuZ2xlU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdGFuZ2xlU2hhcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0YxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZEMDhBODgwMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGVJbmZvLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNo
YXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZUluZm8uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODIxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlSW5zaWRlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTaGFwZUluc2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4
QTg4MzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlSW5zaWRlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRDA4QTg4NDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZUludGVydmFsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlSW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVJ
bnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4NjE3NUQzOTI2
MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lkZUluZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVPdXRzaWRlSW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDE2NjBBNDEzNzg3QzZEMDAxRkZBN0IgLyogRGVu
b3JtYWxEaXNhYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZW5vcm1h
bERpc2FibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEMUFGMTRFMTY1NkYx
MjEwMEM2RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWUuaDsgcGF0aCA9IHN0eWxlL0V4Y2x1c2lv
blNoYXBlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQxQUYxNEUxNjU2
RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU2hhcGVWYWx1ZS5oOyBwYXRoID0gc3R5bGUvU2hhcGVWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRDIzQTEyMzEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRDIzQTEyNDEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkQyREJGMEUxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IG5hbWUgPSBBY2NlbGVyYXRlLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4i
OyB9OwpAQCAtMTI3NDIsOCArMTI3NDYsNiBAQAogCQlGRDZGMjUyOTEzRjVFRjBFMDA2NTE2NUYg
LyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENkYyNTJBMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZENkYyNTJCMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZENzQ4QUJEMTVCRjc0RUQwMDU5
Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQ3NDhBQkUxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ3
ODY4QjcxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDc4NjhCODEzNkI5OTkyMDBE
NDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRDdGMjk4QTEzRDRDMENCMDBBRDk1MzUgLyogV2F2ZVNoYXBlckRTUEtl
cm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXZlU2hhcGVy
RFNQS2VybmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyODA3LDggKzEy
ODA5LDYgQEAKIAkJRkRCMDUyREUxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3VtbWluZ0p1bmN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU3VtbWluZ0p1bmN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQjE3MDAzMTRBMkJBQjIwMEEy
QjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkRCMTcwMDQxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJl
c2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdWx0aUNoYW5uZWxS
ZXNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkRCOEQxRDkxNkIwQzBE
NzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNsdXNpb25TaGFwZUluZm8u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREJEMURGQjE2N0ZFMjdEMDA1MUEx
MUUgLyogSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkRCRDQ4MEExNTlCQzY4NzAwOTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZEQkQ0ODBCMTU5QkM2ODcwMDkzRUI0RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2VOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTIyLDcg
KzE4OTIyLDYgQEAKIAkJCQlCQzIyNzJBMTBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5o
ICovLAogCQkJCUJDMjI3MkFDMEU4MkU4RjMwMEU3Rjk3NSAvKiBDdXJzb3JMaXN0LmggKi8sCiAJ
CQkJQkMyMjc0NkUwRTgzNjY0NTAwRTdGOTc1IC8qIERhdGFSZWYuaCAqLywKLQkJCQlGRDFBRjE0
RTE2NTZGMTIxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hhcGVWYWx1ZS5oICovLAogCQkJCUJDNUVC
NjlDMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuY3BwICovLAogCQkJCUJDNUVCNjlEMEU4
MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuaCAqLywKIAkJCQlBMTI3MDVDMjE2NTZCRDY1MDBD
MkUyN0MgLyogR3JpZFBvc2l0aW9uLmggKi8sCkBAIC0xODk0MCw2ICsxODkzOSw3IEBACiAJCQkJ
QkM1RUI2NjcwRTgxQ0I3MTAwQjI1OTY1IC8qIFJlbmRlclN0eWxlQ29uc3RhbnRzLmggKi8sCiAJ
CQkJQkM1RUI4QzEwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwICovLAogCQkJCUJD
NUVCOEMyMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggKi8sCisJCQkJRkQxQUYxNEUx
NjU2RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCAqLywKIAkJCQlCQzVFQjZBMDBFODFEQzRG
MDBCMjU5NjUgLyogU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI2QTEwRTgx
REM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCAqLywKIAkJCQlCQzVFQjY3QzBF
ODFENDIwMDBCMjU5NjUgLyogU3R5bGVCb3hEYXRhLmNwcCAqLywKQEAgLTE5ODcyLDYgKzE5ODcy
LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNDM5MDQ2QzIx
MkRBMjVDRTAwQUY4MEEyIC8qIG1hdGhtbCAqLywKKwkJCQlGRDA4QTg3OTE3NUQzOTI2MDAyQ0Qz
NjAgLyogc2hhcGVzICovLAogCQkJCUJDOEM4RkFBMEREQ0QyRjIwMEI1OTJGNCAvKiBzdHlsZSAq
LywKIAkJCQkwODhDMkY3NDEyMzkwMDgwMDAzRDY1Q0UgLyogc3ZnICovLAogCQkJCUE4Q0ZGMDRC
MEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuY3BwICovLApAQCAtMTk4ODUsMjAg
KzE5ODg2LDYgQEAKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyogQ291bnRlck5vZGUu
aCAqLywKIAkJCQlBOENGRjZDQTBBMTU2MUNEMDAwQTQyMzQgLyogRWxsaXBzaXNCb3guY3BwICov
LAogCQkJCUE4Q0ZGNkJEMEExNTYxMTgwMDBBNDIzNCAvKiBFbGxpcHNpc0JveC5oICovLAotCQkJ
CTZFODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5jcHAgKi8sCi0J
CQkJNkU4Nzk4QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi8sCi0J
CQkJNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovLAot
CQkJCTZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmggKi8sCi0J
CQkJNkU4Nzk4QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8s
Ci0JCQkJNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oICov
LAotCQkJCTZFODc5OEI4MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi8s
Ci0JCQkJNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggKi8sCi0J
CQkJRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5jcHAgKi8s
Ci0JCQkJRkRCOEQxRDkxNkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5oICov
LAotCQkJCUZENzQ4QUJEMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uY3BwICovLAotCQkJCUZENzQ4QUJFMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaCAqLywKLQkJCQk5QTlDRUY4QjE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8sCi0JCQkJOUE5Q0VGOEMxNjNCM0VBMTAwREU3RUZF
IC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCAqLywKIAkJCQkzMTMxM0Y2MzE0NDNCMzVF
MDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAogCQkJCTMxMzEzRjY0MTQ0
M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAogCQkJCUE4Q0ZGMDQ4
MEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmNwcCAqLywKQEAgLTIwNTUyLDYg
KzIwNTM5LDI3IEBACiAJCQlwYXRoID0gb3BlbmdsOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJRkQwOEE4NzkxNzVEMzkyNjAwMkNEMzYwIC8qIHNoYXBlcyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkQwOEE4N0ExNzVEMzkyNjAw
MkNEMzYwIC8qIFBvbHlnb25TaGFwZS5jcHAgKi8sCisJCQkJRkQwOEE4N0IxNzVEMzkyNjAwMkNE
MzYwIC8qIFBvbHlnb25TaGFwZS5oICovLAorCQkJCUZEMDhBODdDMTc1RDM5MjYwMDJDRDM2MCAv
KiBSZWN0YW5nbGVTaGFwZS5jcHAgKi8sCisJCQkJRkQwOEE4N0QxNzVEMzkyNjAwMkNEMzYwIC8q
IFJlY3RhbmdsZVNoYXBlLmggKi8sCisJCQkJRkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYwIC8qIFNo
YXBlLmNwcCAqLywKKwkJCQlGRDA4QTg3RjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuaCAqLywK
KwkJCQlGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLywKKwkJCQlG
RDA4QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmggKi8sCisJCQkJRkQwOEE4ODIx
NzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgKi8sCisJCQkJRkQwOEE4ODMx
NzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5oICovLAorCQkJCUZEMDhBODg0MTc1
RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmNwcCAqLywKKwkJCQlGRDA4QTg4NTE3NUQz
OTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5oICovLAorCQkJCUZEMDhBODg2MTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCAqLywKKwkJCQlGRDA4QTg4NzE3NUQzOTI2
MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICovLAorCQkJKTsKKwkJCXBhdGggPSBzaGFw
ZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGRDMxNUZBMjEyQjAyNUIx
MDBDMUEzNTkgLyogd2ViYXVkaW8gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMjE3MTYsMTQgKzIxNzI0LDYgQEAKIAkJCQkxNDhBRkRBNTBBRjU4MzYwMDA4
Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NjdDRTBC
MTQ1QUJDMTMwMDVFNjREQiAvKiBFeGNlcHRpb25IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzY3Q0UwQzE0NUFCQzEzMDA1RTY0REIgLyogRXhjZXB0aW9uSW50ZXJmYWNlcy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNkU4Nzk4QkIxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVy
dmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RUFGMzQxMDE2MTM4NjlBMDA4NTk2MjUgLyogRXhj
bHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZF
NEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkU4Nzk4QkYx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlG
REI4RDFEQTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlGRDc0OEFDMDE1QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQk5QTlDRUY4RTE2M0IzRUExMDBERTdFRkUgLyog
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkQxQUYxNTAx
NjU2RjE1MTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEwMjQ1NzUyMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMz
RE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjk4Nyw2ICsyMjk4Nyw3IEBACiAJCQkJODQ3
MzBEOTIxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3MDU5OTc4MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTcwNTk5N0ExMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTU3MTc1RDQxNEMwMEMyMUVDOCAvKiBQb2x5Z29u
U2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzRFMjBBMTBBMUY0NEYwMEY5NUU2RiAvKiBQ
b3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjY4RTE4QjBBREQ5NjI0MDA0MTI4
RTAgLyogUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkMxMjg3NzBCMzNBQTZEMDBD
NjkzRDUgLyogUG9wdXBNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzMDI4LDYgKzIz
MDI5LDcgQEAKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAgLyogUmF3RGF0YURvY3VtZW50
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAzQzEyQjAyNjc2MDBDMUEzNTkgLyog
UmVhbHRpbWVBbmFseXNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MzY4RTgwQzIyNkUzMjAw
NUVGQjVGIC8qIFJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTU4MTc1RDQxNEMwMEMy
MUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRUEzQkIxNTg1
Q0Y1NTAwNEZBQTI2IC8qIFJlZkNvdW50ZWRTdXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5ODMxQUU0QTE1NDIyNUM5MDBGRTI2NDQgLyogUmVmZXJyZXJQb2xpY3kuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQUI0MTgyMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtMjMyOTgsNiArMjMzMDAsMTIgQEAKIAkJCQlCQzVFQjhDNDBFODIwMzFCMDBCMjU5
NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTZEMTY5NjQxMzQ2QjRDMTAw
MEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0U4MEExOTg5
Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NEYx
NzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1MDE3
NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1
MTE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbnNpZGVJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBp
biBIZWFkZXJzICovLAorCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVk
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0IxRjAyRjEzQjAyNUQyMDBGNTEwM0YgLyog
U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RUEzMDk5
RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDM0Miw2
ICsyNDM1MCwxMyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJRkQ0NUE5NUMxNzVENDIw
RDAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5
NTkxNzVENDE3MTAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGRDQ1QTk1QTE3NUQ0MTcxMDBDMjFFQzggLyogUmVjdGFuZ2xlU2hhcGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkQ0NUE5NTMxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUZENDVBOTU0MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluZm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTUxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRl
SW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1NjE3NUQzRkI4MDBDMjFFQzggLyog
U2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUUxQjFEMDBGRjU5ODY5
MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyOUMx
NkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3NkNERDJGMjExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVM
aXN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQ5MTcsMTMgKzI0OTMyLDYgQEAKIAkJCQk5NzNE
QzYzRjE0NUE5NDA5MDAyODQyQzIgLyogRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3Q0FDREIxMTNDRTg3NUMwMEJCQkUzRiAvKiBFeGNlcHRpb25Db2Rl
UGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4QUZEQTYwQUY1ODM2MDAwOEND
NzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4Nzk4QkEx
NUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTZFQUYzNDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNpb25Qb2x5Z29uLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTZFODc5OEJDMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0
YW5nbGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4Nzk4QkUxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvblNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZEQjhEMUU1MTZCMENDOTcw
MDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkQ3
NDhBQkYxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk5QTlDRUY4RDE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMDI0NTc1MTE2Q0VBQTI3MDAw
RTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU2N0QyQTYx
MjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0NERBQjVCMTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA2ZjQ1Y2JhZjIzN2FhYTMyYjMwYWU1NWQyOGJk
YjdjNTk5ODhiMzQ4Li5iN2FkZjg3ZjZhNTJhYTg2NWQzNzA0NjhkNGEyYzY4OWYyMjk1NTJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFs
dWUuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKQEAgLTI2OTksMjQgKzI2OTksMjQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnQK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlOgogICAgICAgICAgICAg
aWYgKCFzdHlsZS0+c2hhcGVJbnNpZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAg
ICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVl
OjpPdXRzaWRlKQorICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZUluc2lkZSgpLT50eXBlKCkg
PT0gU2hhcGVWYWx1ZTo6T3V0c2lkZSkKICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT3V0c2lkZVNoYXBlKTsKLSAgICAg
ICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBl
VmFsdWU6OkltYWdlKSB7CisgICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5
cGUoKSA9PSBTaGFwZVZhbHVlOjpJbWFnZSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+
c2hhcGVJbnNpZGUoKS0+aW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxl
LT5zaGFwZUluc2lkZSgpLT5pbWFnZSgpLT5jc3NWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+
dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlKTsKKyAgICAgICAgICAgIEFTU0VS
VChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlNoYXBlKTsKICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZUZvckJhc2ljU2hhcGUoc3R5bGUtPnNoYXBlSW5zaWRlKCkt
PnNoYXBlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlOgog
ICAgICAgICAgICAgaWYgKCFzdHlsZS0+c2hhcGVPdXRzaWRlKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZU91dHNpZGUoKS0+dHlwZSgpID09IEV4Y2x1
c2lvblNoYXBlVmFsdWU6OkltYWdlKSB7CisgICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlT3V0
c2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6SW1hZ2UpIHsKICAgICAgICAgICAgICAgICBp
ZiAoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5pbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5pbWFnZSgpLT5jc3NWYWx1ZSgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChzdHlsZS0+c2hh
cGVPdXRzaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSk7CisgICAg
ICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1
ZTo6U2hhcGUpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yQmFzaWNTaGFwZShzdHlsZS0+
c2hhcGVPdXRzaWRlKCktPnNoYXBlKCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCA2NzJjYTRlMTk1NTIx
OTUzZDkwZmI1ODc0NmJkOWE4YWFiZWJjZDNlLi4zNzJjMWIzZjQ2ODA4MWY1NmM3ZDRlYTgxNDM3
NDM3MzcyYjg2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaApAQCAt
MTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGludGVybmFs
bHkgZm9yIGNvdW50ZXIgbmFtZXMgKGFzIG9wcG9zZWQgdG8gY291bnRlciB2YWx1ZXMpCiAgICAg
ICAgIENTU19DT1VOVEVSX05BTUUgPSAxMTAsCiAKLSAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGJ5
IHRoZSBDU1MgRXhjbHVzaW9ucyBkcmFmdAorICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgdGhl
IENTUyBTaGFwZXMgZHJhZnQKICAgICAgICAgQ1NTX1NIQVBFID0gMTExLAogCiAgICAgICAgIC8v
IFVzZWQgYnkgYm9yZGVyIGltYWdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9E
ZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVk
U3R5bGVCdWlsZGVyLmNwcAppbmRleCA1NmU4M2ViNTU5Mjk2M2ZhMDkxOTVhMWMwY2M4NmYzNWZm
MGE3ZGY1Li5jMzZmZjI0OGZlNWQyZTU3YTQxYWVmYzMxOGIzNjA2MzJiMzJhZmIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC00OCw3ICs0
OCw3IEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUgIlNoYXBl
VmFsdWUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTkzMywxMCArMTkz
MywxMCBAQCBwdWJsaWM6CiB9OwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi10ZW1wbGF0ZSA8
RXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8RXhjbHVz
aW9uU2hhcGVWYWx1ZT4pLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoKmluaXRpYWxGdW5jdGlvbiko
KT4KLWNsYXNzIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZSB7Cit0ZW1wbGF0ZSA8U2hhcGVW
YWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4pLCBTaGFwZVZh
bHVlKiAoKmluaXRpYWxGdW5jdGlvbikoKT4KK2NsYXNzIEFwcGx5UHJvcGVydHlTaGFwZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNz
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5
bGUsIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rp
b24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKQEAgLTE5NDUs
MjAgKzE5NDUsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIDApOwogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMjU3MTogTGF5
b3V0IGZvciB0aGUgdmFsdWUgJ291dHNpZGUtc2hhcGUnIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQK
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlT3V0c2lkZVNoYXBlKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBTaGFwZVZhbHVl
OjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBl
VmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVWYWx1ZShiYXNp
Y1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBlID0gU2hhcGVWYWx1ZTo6Y3JlYXRl
U2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVW
YWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgc2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxFeGNsdXNpb25TaGFw
ZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAgICAgICAg
IH0KIAogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQog
ICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8RXhjbHVzaW9uU2hhcGVWYWx1ZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRy
PEV4Y2x1c2lvblNoYXBlVmFsdWU+LCBzZXR0ZXJGdW5jdGlvbiwgRXhjbHVzaW9uU2hhcGVWYWx1
ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgUHJvcGVydHlI
YW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U2hhcGVWYWx1ZSosIGdl
dHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+LCBzZXR0ZXJGdW5jdGlvbiwgU2hh
cGVWYWx1ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKICAgICAgICAgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmlu
aXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CiAgICAgfQogfTsKQEAgLTIzNDMsOCArMjM0
Myw4IEBAIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6OkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIoKQog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdFNoYXBlTWFyZ2luLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6c2hh
cGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6aW5p
dGlhbFNoYXBlTWFyZ2luPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZVBhZGRpbmcsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJl
bmRlclN0eWxlOjpzaGFwZVBhZGRpbmcsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVQYWRkaW5nLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZVBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCBBcHBseVBy
b3BlcnR5RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGU+Ojpj
cmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlT3V0c2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlPCZSZW5kZXJTdHlsZTo6
c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxl
Ojppbml0aWFsU2hhcGVPdXRzaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgQXBwbHlQcm9wZXJ0eVNoYXBl
PCZSZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGUsIEFwcGx5
UHJvcGVydHlTaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpz
ZXRTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlT3V0c2lkZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CiAjZW5kaWYKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
aGl0ZVNwYWNlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxl
Ojp3aGl0ZVNwYWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjpzZXRXaGl0ZVNwYWNlLCBF
V2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsV2hpdGVTcGFjZT46OmNyZWF0ZUhhbmRs
ZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2lkb3dzLCBBcHBseVBy
b3BlcnR5QXV0bzxzaG9ydCwgJlJlbmRlclN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHlsZTo6c2V0
V2lkb3dzLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9XaWRvd3MsICZSZW5kZXJTdHlsZTo6c2V0SGFz
QXV0b1dpZG93cz46OmNyZWF0ZUhhbmRsZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggNTI0NDAwM2Nk
MWMwOTc3OTY5ZWMwZWUxOWQ1ZDE0NTY1MGExZWYwOS4uZmNhNjI2ZjgwZDY2YTEyYjEyNmE0YTgx
NjU1ZmJmZmM0ZjJjMjM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMTQ0LDEwICsxNDQsMTAgQEAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3Qg
QW5pbWF0aW9uQmFzZSosIENsaXAKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBB
bmltYXRpb25CYXNlKiwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogZnJvbSwgRXhjbHVzaW9uU2hhcGVW
YWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxTaGFw
ZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIFNoYXBlVmFsdWUqIGZyb20s
IFNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgLy8gRklYTUUgQnVnIDEw
MjcyMzogU2hhcGUtaW5zaWRlIHNob3VsZCBiZSBhYmxlIHRvIGFuaW1hdGUgYSB2YWx1ZSBvZiAn
b3V0c2lkZS1zaGFwZScgd2hlbiBzaGFwZS1vdXRzaWRlIGlzIHNldCB0byBhIEJhc2ljU2hhcGUK
LSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlIHx8IHRv
LT50eXBlKCkgIT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6U2hhcGUpCisgICAgaWYgKGZyb20tPnR5
cGUoKSAhPSBTaGFwZVZhbHVlOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlNo
YXBlKQogICAgICAgICByZXR1cm4gdG87CiAKICAgICBjb25zdCBCYXNpY1NoYXBlKiBmcm9tU2hh
cGUgPSBmcm9tLT5zaGFwZSgpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFz
ZSosIEV4CiAgICAgaWYgKCFmcm9tU2hhcGUtPmNhbkJsZW5kKHRvU2hhcGUpKQogICAgICAgICBy
ZXR1cm4gdG87CiAKLSAgICByZXR1cm4gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVW
YWx1ZSh0b1NoYXBlLT5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIFNo
YXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUodG9TaGFwZS0+YmxlbmQoZnJvbVNoYXBlLCBwcm9n
cmVzcykpOwogfQogI2VuZGlmCiAKQEAgLTQwNSwxMCArNDA1LDEwIEBAIHB1YmxpYzoKIH07CiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLWNsYXNzIFByb3BlcnR5V3JhcHBlckV4Y2x1c2lvblNo
YXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8RXhjbHVzaW9uU2hhcGVWYWx1
ZT4geworY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3Bl
cnR5V3JhcHBlcjxTaGFwZVZhbHVlPiB7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyRXhj
bHVzaW9uU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShQ
YXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KSkKLSAgICAgICAgOiBSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcCwgU2hhcGVWYWx1ZSog
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPikpCisgICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKICAgICB7CiAgICAgfQog
fTsKQEAgLTExNjUsNyArMTE2NSw3IEBAIHZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmVuc3Vy
ZVByb3BlcnR5TWFwKCkKICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoLCAmUmVuZGVyU3R5bGU6
OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OnNldENsaXBQYXRoKSk7CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLSAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXJFeGNsdXNpb25TaGFwZShDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5
bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlKSk7CisgICAgZ1By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVy
dHlXZWJraXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZUluc2lkZSwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZUluc2lkZSkpOwogI2VuZGlmCiAKICAgICBnUHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6
Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRl
clN0eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNp
dGVkTGlua0NvbHVtblJ1bGVDb2xvcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25JbnRlcnZhbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMGVm
N2E5OGJhYTY4MTA5YTg4OTE5NThhYjljOTAxNTYzYzg3Y2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvbkludGVydmFsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwot
ICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgiCi0KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVj
dCBJbnRlcnZhbFgxQ29tcGFyYXRvciB7Ci0gICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBFeGNs
dXNpb25JbnRlcnZhbCYgaTEsIGNvbnN0IEV4Y2x1c2lvbkludGVydmFsJiBpMikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBpMS54MSA8IGkyLngxOwotICAgIH0KLX07Ci0KLWJvb2wgRXhj
bHVzaW9uSW50ZXJ2YWw6OmludGVyc2VjdChjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYgaSwgRXhj
bHVzaW9uSW50ZXJ2YWwmIHJ2KSBjb25zdAotewotICAgIGlmICh4MiA8IGkueDEgfHwgeDEgPiBp
LngyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcnYueDEgPSBzdGQ6Om1heCh4MSwgaS54
MSk7Ci0gICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54Mik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgc29ydEV4Y2x1c2lvbkludGVydmFscyhWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiB2KQotewotICAgIHN0ZDo6c29ydCh2LmJlZ2luKCksIHYuZW5kKCksIEludGVydmFsWDFDb21w
YXJhdG9yKCkpOwotfQotCi12b2lkIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiB2MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcnYpCi17Ci0gICAgaWYgKCF2MS5zaXpl
KCkpCi0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgpKTsKLSAgICBl
bHNlIGlmICghdjIuc2l6ZSgpKQotICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2
MS5lbmQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4g
dih2MS5zaXplKCkgKyB2Mi5zaXplKCkpOwotICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCogaW50
ZXJ2YWwgPSAwOwotCi0gICAgICAgIHN0ZDo6bWVyZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCksIHYy
LmJlZ2luKCksIHYyLmVuZCgpLCB2LmJlZ2luKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOwot
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgewotICAgICAg
ICAgICAgaWYgKCFpbnRlcnZhbCkKLSAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2W2ldOwot
ICAgICAgICAgICAgZWxzZSBpZiAodltpXS54MSA+PSBpbnRlcnZhbC0+eDEgJiYgdltpXS54MSA8
PSBpbnRlcnZhbC0+eDIpIC8vIEZJWE1FOiAxc3QgPD0gdGVzdCBub3QgbmVlZGVkPwotICAgICAg
ICAgICAgICAgIGludGVydmFsLT54MiA9IHN0ZDo6bWF4KGludGVydmFsLT54MiwgdltpXS54Mik7
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFs
KTsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2W2ldOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGludGVydmFsKQotICAgICAgICAgICAgcnYuYXBwZW5kKCpp
bnRlcnZhbCk7Ci0gICAgfQotfQotCi12b2lkIGludGVyc2VjdEV4Y2x1c2lvbkludGVydmFscyhj
b25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYgdjIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJ2KQotewotICAgIHNp
emVfdCB2MVNpemUgPSB2MS5zaXplKCk7Ci0gICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsK
LQotICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4
Y2x1c2lvbkludGVydmFsIGludGVydmFsOwotICAgIGJvb2wgb3ZlcmxhcCA9IGZhbHNlOwotICAg
IHNpemVfdCBpMSA9IDA7Ci0gICAgc2l6ZV90IGkyID0gMDsKLQotICAgIHdoaWxlIChpMSA8IHYx
U2l6ZSAmJiBpMiA8IHYyU2l6ZSkgewotICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCB2MTI7Ci0g
ICAgICAgIGlmICh2MVtpMV0uaW50ZXJzZWN0KHYyW2kyXSwgdjEyKSkgewotICAgICAgICAgICAg
aWYgKCFvdmVybGFwIHx8ICF2MTIuaW50ZXJzZWN0KGludGVydmFsLCBpbnRlcnZhbCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCkKLSAgICAgICAgICAgICAgICAgICAgcnYuYXBwZW5k
KGludGVydmFsKTsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbCA9IHYxMjsKLSAgICAgICAgICAg
ICAgICBvdmVybGFwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2MVtp
MV0ueDIgPCB2MltpMl0ueDIpCi0gICAgICAgICAgICAgICAgaTErKzsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBpMisrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKG92ZXJsYXApCi0gICAgICAgICAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKLSAgICAg
ICAgICAgIG92ZXJsYXAgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICh2MVtpMV0ueDEgPCB2Mltp
Ml0ueDEpCi0gICAgICAgICAgICAgICAgaTErKzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBpMisrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG92ZXJsYXApCi0gICAg
ICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci19Ci0KLXZvaWQgc3VidHJhY3RFeGNsdXNpb25JbnRl
cnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiBydikKLXsK
LSAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOwotICAgIHNpemVfdCB2MlNpemUgPSB2Mi5z
aXplKCk7Ci0KLSAgICBpZiAoIXYxU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2
MlNpemUpCi0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgc2l6ZV90IGkxID0gMCwgaTIgPSAwOwotICAgICAgICBydi5hcHBl
bmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7Ci0KLSAgICAgICAgd2hpbGUgKGkxIDwgcnYu
c2l6ZSgpICYmIGkyIDwgdjJTaXplKSB7Ci0gICAgICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCYg
aW50ZXJ2YWwxID0gcnZbaTFdOwotICAgICAgICAgICAgY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwm
IGludGVydmFsMiA9IHYyW2kyXTsKLQotICAgICAgICAgICAgaWYgKGludGVydmFsMi54MSA8PSBp
bnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKLSAgICAgICAgICAg
ICAgICBydi5yZW1vdmUoaTEpOwotICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngyIDwg
aW50ZXJ2YWwxLngxKQotICAgICAgICAgICAgICAgIGkyICs9IDE7Ci0gICAgICAgICAgICBlbHNl
IGlmIChpbnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDIpCi0gICAgICAgICAgICAgICAgaTEgKz0g
MTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGludGVydmFsMS54MSAmJiBp
bnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDIpIHsKLSAgICAgICAgICAgICAgICBydi5pbnNlcnQo
aTEsIEV4Y2x1c2lvbkludGVydmFsKGludGVydmFsMS54MSwgaW50ZXJ2YWwyLngxKSk7Ci0gICAg
ICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOwotICAgICAgICAgICAgICAg
IGkyICs9IDE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGludGVydmFsMi54MSA8PSBpbnRlcnZh
bDEueDEpIHsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDEgPSBpbnRlcnZhbDIueDI7Ci0g
ICAgICAgICAgICAgICAgaTIgKz0gMTsKLSAgICAgICAgICAgIH0gZWxzZSAgeyAvLyAoaW50ZXJ2
YWwyLngyID49IGludGVydmFsMS54MikKLSAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDIgPSBp
bnRlcnZhbDIueDE7Ci0gICAgICAgICAgICAgICAgaTEgKz0gMTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNWQzMWZlYjE4MTEzZGU4YzFlNDM0MWUwMTAzNzA4Yjc3NGNhMzUxZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAq
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAq
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvbkludGVydmFsX2gKLSNkZWZpbmUgRXhjbHVzaW9u
SW50ZXJ2YWxfaAotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0cnVjdCBFeGNsdXNpb25JbnRlcnZhbCB7Ci1wdWJsaWM6Ci0gICAgZmxvYXQgeDE7
Ci0gICAgZmxvYXQgeDI7Ci0KLSAgICBFeGNsdXNpb25JbnRlcnZhbChmbG9hdCB4MSA9IDAsIGZs
b2F0IHgyID0gMCkKLSAgICAgICAgOiB4MSh4MSkKLSAgICAgICAgLCB4Mih4MikKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBpbnRlcnNlY3QoY29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmLCBFeGNs
dXNpb25JbnRlcnZhbCYpIGNvbnN0OwotfTsKLQotdm9pZCBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxz
KFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKTsKLXZvaWQgbWVyZ2VFeGNsdXNpb25JbnRlcnZh
bHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4mLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jik7Ci12b2lkIGludGVyc2Vj
dEV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiwgY29u
c3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4m
KTsKLXZvaWQgc3VidHJhY3RFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEV4Y2x1c2lvbkludGVydmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25Qb2x5Z29uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlmOTc4ZjMwYjU4
ZTIxNGI4NGE5ZDNkMWY4ZDQwODdhZTBiMmEyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9s
eWdvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25Qb2x5Z29uLmgiCi0KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRWRnZUludGVy
c2VjdGlvblR5cGUgewotICAgIE5vcm1hbCwKLSAgICBWZXJ0ZXhNaW5ZLAotICAgIFZlcnRleE1h
eFksCi0gICAgVmVydGV4WUJvdGgKLX07Ci0KLXN0cnVjdCBFZGdlSW50ZXJzZWN0aW9uIHsKLSAg
ICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlOwotICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0g
ICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQg
bGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVy
dGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuICgocG9pbnQueCgp
IC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4
Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGlzUmVmbGV4VmVydGV4KGNvbnN0IEZsb2F0UG9pbnQmIHByZXZW
ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYgbmV4dFZl
cnRleCkKLXsKLSAgICByZXR1cm4gbGVmdFNpZGUocHJldlZlcnRleCwgbmV4dFZlcnRleCwgdmVy
dGV4KSA8IDA7Ci19Ci0KLXN0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0aW9uJiBy
ZXN1bHQpCi17Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICplZGdlUG9pbnRl
cjsKLQotICAgIGlmIChlZGdlLm1pblkoKSA+IHkgfHwgZWRnZS5tYXhZKCkgPCB5KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52
ZXJ0ZXgxKCk7Ci0gICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4Migp
OwotICAgIGZsb2F0IGR5ID0gdmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKTsKLQotICAgIGZsb2F0
IGludGVyc2VjdGlvblg7Ci0gICAgRWRnZUludGVyc2VjdGlvblR5cGUgaW50ZXJzZWN0aW9uVHlw
ZTsKLQotICAgIGlmICghZHkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleFlC
b3RoOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gZWRnZS5taW5YKCk7Ci0gICAgfSBlbHNlIGlm
ICh5ID09IGVkZ2UubWluWSgpKSB7Ci0gICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhN
aW5ZOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpIDwgdmVydGV4Mi55KCkp
ID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKLSAgICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5t
YXhZKCkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1heFk7Ci0gICAgICAg
IGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPiB2ZXJ0ZXgyLnkoKSkgPyB2ZXJ0ZXgxLngo
KSA6IHZlcnRleDIueCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludGVyc2VjdGlvblR5cGUg
PSBOb3JtYWw7Ci0gICAgICAgIGludGVyc2VjdGlvblggPSAoKHkgLSB2ZXJ0ZXgxLnkoKSkgKiAo
dmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgLyBkeSkgKyB2ZXJ0ZXgxLngoKTsKLSAgICB9Ci0K
LSAgICByZXN1bHQuZWRnZSA9IGVkZ2VQb2ludGVyOwotICAgIHJlc3VsdC50eXBlID0gaW50ZXJz
ZWN0aW9uVHlwZTsKLSAgICByZXN1bHQucG9pbnQuc2V0KGludGVyc2VjdGlvblgsIHkpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIGlud2FyZEVkZ2VO
b3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKLXsKLSAgICBGbG9hdFNpemUgZWRn
ZURlbHRhID0gZWRnZS52ZXJ0ZXgyKCkgLSBlZGdlLnZlcnRleDEoKTsKLSAgICBpZiAoIWVkZ2VE
ZWx0YS53aWR0aCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKChlZGdlRGVsdGEuaGVpZ2h0
KCkgPiAwID8gLTEgOiAxKSwgMCk7Ci0gICAgaWYgKCFlZGdlRGVsdGEuaGVpZ2h0KCkpCi0gICAg
ICAgIHJldHVybiBGbG9hdFNpemUoMCwgKGVkZ2VEZWx0YS53aWR0aCgpID4gMCA/IDEgOiAtMSkp
OwotICAgIGZsb2F0IGVkZ2VMZW5ndGggPSBlZGdlRGVsdGEuZGlhZ29uYWxMZW5ndGgoKTsKLSAg
ICByZXR1cm4gRmxvYXRTaXplKC1lZGdlRGVsdGEuaGVpZ2h0KCkgLyBlZGdlTGVuZ3RoLCBlZGdl
RGVsdGEud2lkdGgoKSAvIGVkZ2VMZW5ndGgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0U2l6
ZSBvdXR3YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlKQotewotICAg
IHJldHVybiAtaW53YXJkRWRnZU5vcm1hbChlZGdlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk
IGFwcGVuZEFyYyhWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzLCBjb25zdCBGbG9hdFBvaW50
JiBhcmNDZW50ZXIsIGZsb2F0IGFyY1JhZGl1cywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRBcmNW
ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZEFyY1ZlcnRleCwgYm9vbCBwYWRkaW5nKQotewot
ICAgIGZsb2F0IHN0YXJ0QW5nbGUgPSBhdGFuMihzdGFydEFyY1ZlcnRleC55KCkgLSBhcmNDZW50
ZXIueSgpLCBzdGFydEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKLSAgICBmbG9hdCBl
bmRBbmdsZSA9IGF0YW4yKGVuZEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgpLCBlbmRBcmNW
ZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7Ci0gICAgY29uc3QgZmxvYXQgdHdvUEkgPSBwaUZs
b2F0ICogMjsKLSAgICBpZiAoc3RhcnRBbmdsZSA8IDApCi0gICAgICAgIHN0YXJ0QW5nbGUgKz0g
dHdvUEk7Ci0gICAgaWYgKGVuZEFuZ2xlIDwgMCkKLSAgICAgICAgZW5kQW5nbGUgKz0gdHdvUEk7
Ci0gICAgZmxvYXQgYW5nbGUgPSAoc3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSA/IChzdGFydEFuZ2xl
IC0gZW5kQW5nbGUpIDogKHN0YXJ0QW5nbGUgKyB0d29QSSAtIGVuZEFuZ2xlKTsKLSAgICBjb25z
dCBmbG9hdCBhcmNTZWdtZW50Q291bnQgPSA2OyAvLyBBbiBldmVuIG51bWJlciBzbyB0aGF0IG9u
ZSBhcmMgdmVydGV4IHdpbGwgYmUgZWFjdGx5IGFyY1JhZGl1cyBmcm9tIGFyY0NlbnRlci4KLSAg
ICBmbG9hdCBhcmNTZWdtZW50QW5nbGUgPSAgKChwYWRkaW5nKSA/IC1hbmdsZSA6IHR3b1BJIC0g
YW5nbGUpIC8gYXJjU2VnbWVudENvdW50OwotCi0gICAgdmVydGljZXMuYXBwZW5kKHN0YXJ0QXJj
VmVydGV4KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJjU2VnbWVudENvdW50OyAr
K2kpIHsKLSAgICAgICAgZmxvYXQgYW5nbGUgPSBzdGFydEFuZ2xlICsgYXJjU2VnbWVudEFuZ2xl
ICogaTsKLSAgICAgICAgdmVydGljZXMuYXBwZW5kKGFyY0NlbnRlciArIEZsb2F0UG9pbnQoY29z
KGFuZ2xlKSAqIGFyY1JhZGl1cywgc2luKGFuZ2xlKSAqIGFyY1JhZGl1cykpOwotICAgIH0KLSAg
ICB2ZXJ0aWNlcy5hcHBlbmQoZW5kQXJjVmVydGV4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk
IHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNl
cykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVydGljZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIHZlcnRpY2VzW2ldLnNldChMYXlvdXRVbml0KHZlcnRpY2VzW2ldLngoKSkudG9G
bG9hdCgpLCBMYXlvdXRVbml0KHZlcnRpY2VzW2ldLnkoKSkudG9GbG9hdCgpKTsKLX0KLQotc3Rh
dGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBlUGFkZGluZ0Jv
dW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHBhZGRpbmcsIFdpbmRSdWxl
IGZpbGxSdWxlKQotewotICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBwYWRkZWRWZXJ0
aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKSk7Ci0gICAgRmxvYXRQb2lu
dCBpbnRlcnNlY3Rpb247Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seWdvbi5u
dW1iZXJPZkVkZ2VzKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0
aGlzRWRnZSA9IHBvbHlnb24uZWRnZUF0KGkpOwotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25F
ZGdlJiBwcmV2RWRnZSA9IHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpOwotICAgICAgICBPZmZzZXRQ
b2x5Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRnZSwgaW53YXJkRWRnZU5vcm1hbCh0aGlz
RWRnZSkgKiBwYWRkaW5nKTsKLSAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9mZnNldEVk
Z2UocHJldkVkZ2UsIGlud2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogcGFkZGluZyk7Ci0KLSAg
ICAgICAgaWYgKHByZXZPZmZzZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50
ZXJzZWN0aW9uKSkKLSAgICAgICAgICAgIHBhZGRlZFZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0
aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoaXNSZWZsZXhWZXJ0ZXgocHJldkVkZ2UudmVydGV4MSgp
LCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDIoKSkpCi0gICAgICAgICAgICBh
cHBlbmRBcmMoKnBhZGRlZFZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHBhZGRpbmcsIHBy
ZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4MSgpLCB0cnVlKTsK
LSAgICB9Ci0KLSAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCpwYWRkZWRWZXJ0aWNl
cyk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24ocGFkZGVkVmVydGljZXMu
cmVsZWFzZSgpLCBmaWxsUnVsZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIFBhc3NPd25QdHI8Rmxv
YXRQb2x5Z29uPiBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMoY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uLCBmbG9hdCBtYXJnaW4sIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIE93blB0cjxW
ZWN0b3I8RmxvYXRQb2ludD4gPiBtYXJnaW5WZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
RmxvYXRQb2ludD4oKSk7Ci0gICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb247Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRnZUF0KGkp
OwotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNFZGdlLnBy
ZXZpb3VzRWRnZSgpOwotICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0
aGlzRWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogbWFyZ2luKTsKLSAgICAgICAg
T2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9mZnNldEVkZ2UocHJldkVkZ2UsIG91dHdhcmRFZGdlTm9y
bWFsKHByZXZFZGdlKSAqIG1hcmdpbik7Ci0KLSAgICAgICAgaWYgKHByZXZPZmZzZXRFZGdlLmlu
dGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9uKSkKLSAgICAgICAgICAgIG1h
cmdpblZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYXBwZW5kQXJjKCptYXJnaW5WZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4MSgpLCBtYXJn
aW4sIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4MSgpLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCgqbWFyZ2lu
VmVydGljZXMpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29uKG1hcmdpblZl
cnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKLX0KLQotY29uc3QgRmxvYXRQb2x5Z29uJiBF
eGNsdXNpb25Qb2x5Z29uOjpzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAotewotICAgIEFTU0VS
VChzaGFwZVBhZGRpbmcoKSA+PSAwKTsKLSAgICBpZiAoIXNoYXBlUGFkZGluZygpKQotICAgICAg
ICByZXR1cm4gbV9wb2x5Z29uOwotCi0gICAgaWYgKCFtX3BhZGRpbmdCb3VuZHMpCi0gICAgICAg
IG1fcGFkZGluZ0JvdW5kcyA9IGNvbXB1dGVTaGFwZVBhZGRpbmdCb3VuZHMobV9wb2x5Z29uLCBz
aGFwZVBhZGRpbmcoKSwgbV9wb2x5Z29uLmZpbGxSdWxlKCkpOwotCi0gICAgcmV0dXJuICptX3Bh
ZGRpbmdCb3VuZHM7Ci19Ci0KLWNvbnN0IEZsb2F0UG9seWdvbiYgRXhjbHVzaW9uUG9seWdvbjo6
c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAotewotICAgIEFTU0VSVChzaGFwZU1hcmdpbigpID49
IDApOwotICAgIGlmICghc2hhcGVNYXJnaW4oKSkKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbjsK
LQotICAgIGlmICghbV9tYXJnaW5Cb3VuZHMpCi0gICAgICAgIG1fbWFyZ2luQm91bmRzID0gY29t
cHV0ZVNoYXBlTWFyZ2luQm91bmRzKG1fcG9seWdvbiwgc2hhcGVNYXJnaW4oKSwgbV9wb2x5Z29u
LmZpbGxSdWxlKCkpOwotCi0gICAgcmV0dXJuICptX21hcmdpbkJvdW5kczsKLX0KLQotc3RhdGlj
IGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVkZ2VJbnRl
cnNlY3Rpb24mIGludGVyc2VjdGlvbiwgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgRmxvYXRQb2lu
dCYgdGhpc1ZlcnRleCwgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKLXsKLSAgICBpZiAoaW50ZXJz
ZWN0aW9uLnR5cGUgIT0gVmVydGV4TWluWSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhN
YXhZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoaW50ZXJzZWN0aW9uLmVk
Z2UgJiYgaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7Ci0gICAgY29uc3QgRmxvYXRQb2x5
Z29uJiBwb2x5Z29uID0gKihpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKLSAgICBjb25z
dCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICooaW50ZXJzZWN0aW9uLmVkZ2UpOwotCi0g
ICAgaWYgKChpbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZICYmICh0aGlzRWRnZS52ZXJ0
ZXgxKCkueSgpIDwgdGhpc0VkZ2UudmVydGV4MigpLnkoKSkpCi0gICAgICAgIHx8IChpbnRlcnNl
Y3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpID4gdGhp
c0VkZ2UudmVydGV4MigpLnkoKSkpKSB7Ci0gICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZl
cnRleEF0KHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpLnZlcnRleEluZGV4MSgpKTsKLSAgICAgICAg
dGhpc1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkpOwot
ICAgICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRl
eDIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVydGV4
QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkpOwotICAgICAgICB0aGlzVmVydGV4ID0gcG9seWdv
bi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDIoKSk7Ci0gICAgICAgIG5leHRWZXJ0ZXgg
PSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLm5leHRFZGdlKCkudmVydGV4SW5kZXgyKCkpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYXBwZW5k
SW50ZXJ2YWxYKGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiByZXN1bHQpCi17Ci0gICAgaWYgKCFpbnNpZGUpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoRXhj
bHVzaW9uSW50ZXJ2YWwoeCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXpl
KCkgLSAxXS54MiA9IHg7Ci0KLSAgICByZXR1cm4gIWluc2lkZTsKLX0KLQotc3RhdGljIGJvb2wg
Y29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2Vj
dGlvbjEsIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjIpCi17Ci0gICAgZmxv
YXQgeDEgPSBpbnRlcnNlY3Rpb24xLnBvaW50LngoKTsKLSAgICBmbG9hdCB4MiA9IGludGVyc2Vj
dGlvbjIucG9pbnQueCgpOwotICAgIHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50
eXBlIDwgaW50ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4MjsKLX0KLQotc3RhdGljIHZvaWQgY29t
cHV0ZVhJbnRlcnNlY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeSwg
Ym9vbCBpc01pblksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKLXsKLSAgICBW
ZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwotICAgIGlmICghcG9seWdvbi5v
dmVybGFwcGluZ0VkZ2VzKHksIHksIGVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVj
dG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7Ci0gICAgRWRnZUludGVyc2VjdGlv
biBpbnRlcnNlY3Rpb247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tpXSwgeSwg
aW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKLSAgICAg
ICAgICAgIGludGVyc2VjdGlvbnMuYXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgfQotCi0gICAg
aWYgKGludGVyc2VjdGlvbnMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3Rk
Ojpzb3J0KGludGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50ZXJzZWN0aW9ucy5lbmQoKSwgV2ViQ29y
ZTo6Y29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKTsKLQotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
LSAgICBpbnQgd2luZENvdW50ID0gMDsKLSAgICBib29sIGluc2lkZSA9IGZhbHNlOwotCi0gICAg
d2hpbGUgKGluZGV4IDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgY29uc3QgRWRn
ZUludGVyc2VjdGlvbiYgdGhpc0ludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXhdOwot
ICAgICAgICBpZiAoaW5kZXggKyAxIDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIG5leHRJbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rp
b25zW2luZGV4ICsgMV07Ci0gICAgICAgICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQu
eCgpID09IG5leHRJbnRlcnNlY3Rpb24ucG9pbnQueCgpKSAmJiAodGhpc0ludGVyc2VjdGlvbi50
eXBlID09IFZlcnRleE1pblkgfHwgdGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1heFkp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBuZXh0SW50
ZXJzZWN0aW9uLnR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwYWlycyBvZiBp
bnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNYXhZLFZlcnRleE1heFkgYW5kIFZl
cnRleE1pblksVmVydGV4TWluWS4KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHBh
aXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJlIFZlcnRleE1pblksVmVydGV4TWF4
WSBvciBWZXJ0ZXhNYXhZLFZlcnRleE1pblkgd2l0aCBvbmUgaW50ZXJzZWN0aW9uLgotICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rpb24uZWRnZTsKLSAgICAg
ICAgYm9vbCBldmVuT2RkQ3Jvc3NpbmcgPSAhd2luZENvdW50OwotCi0gICAgICAgIGlmIChwb2x5
Z29uLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7Ci0gICAgICAgICAgICB3aW5kQ291bnQg
Kz0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpKSA/IDEg
OiAtMTsKLSAgICAgICAgICAgIGV2ZW5PZGRDcm9zc2luZyA9IGV2ZW5PZGRDcm9zc2luZyB8fCAh
d2luZENvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV2ZW5PZGRDcm9zc2luZykgewot
ICAgICAgICAgICAgYm9vbCBlZGdlQ3Jvc3NpbmcgPSB0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0g
Tm9ybWFsOwotICAgICAgICAgICAgaWYgKCFlZGdlQ3Jvc3NpbmcpIHsKLSAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IHByZXZWZXJ0ZXg7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCB0aGlz
VmVydGV4OwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV4dFZlcnRleDsKLQotICAgICAg
ICAgICAgICAgIGlmIChnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyh0aGlzSW50ZXJzZWN0
aW9uLCBwcmV2VmVydGV4LCB0aGlzVmVydGV4LCBuZXh0VmVydGV4KSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAobmV4dFZlcnRleC55KCkgPT0geSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gcHJldlZlcnRleC55KCkgPiB5IDogcHJldlZlcnRl
eC55KCkgPCB5OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmV2VmVydGV4LnkoKSA9
PSB5KQotICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWluWSkgPyBu
ZXh0VmVydGV4LnkoKSA+IHkgOiBuZXh0VmVydGV4LnkoKSA8IHk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVkZ2VDcm9z
c2luZykKLSAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludGVy
c2VjdGlvbi5wb2ludC54KCksIGluc2lkZSwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAg
ICsraW5kZXg7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjb21wdXRlT3ZlcmxhcHBpbmdFZGdl
WFByb2plY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeTEsIGZsb2F0
IHkyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCi17Ci0gICAgVmVjdG9yPGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBp
bmdFZGdlcyh5MSwgeTIsIGVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRWRnZUludGVy
c2VjdGlvbiBpbnRlcnNlY3Rpb247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2Vz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBl
ZGdlc1tpXTsKLSAgICAgICAgZmxvYXQgeDE7Ci0gICAgICAgIGZsb2F0IHgyOwotCi0gICAgICAg
IGlmIChlZGdlLT5taW5ZKCkgPCB5MSkgewotICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rp
b24oZWRnZSwgeTEsIGludGVyc2VjdGlvbik7Ci0gICAgICAgICAgICB4MSA9IGludGVyc2VjdGlv
bi5wb2ludC54KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeDEgPSAoZWRnZS0+dmVy
dGV4MSgpLnkoKSA8IGVkZ2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngoKSA6
IGVkZ2UtPnZlcnRleDIoKS54KCk7Ci0KLSAgICAgICAgaWYgKGVkZ2UtPm1heFkoKSA+IHkyKSB7
Ci0gICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MiwgaW50ZXJzZWN0aW9u
KTsKLSAgICAgICAgICAgIHgyID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICB4MiA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpID4gZWRnZS0+dmVydGV4
MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsKLQot
ICAgICAgICBpZiAoeDEgPiB4MikKLSAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIpOwotCi0g
ICAgICAgIGlmICh4MiA+IHgxKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChFeGNsdXNpb25J
bnRlcnZhbCh4MSwgeDIpKTsKLSAgICB9Ci0KLSAgICBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxzKHJl
c3VsdCk7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMo
TGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRM
aXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0g
c2hhcGVNYXJnaW5Cb3VuZHMoKTsKLSAgICBpZiAocG9seWdvbi5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IGxv
Z2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFs
PiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMo
cG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rp
b25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNs
dXNpb25JbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOwotICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2
YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJbnRlcnZhbHMpOwotCi0gICAg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVPdmVy
bGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsK
LQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7Ci0gICAg
bWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBl
eGNsdWRlZEludGVydmFscyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjbHVk
ZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRXhjbHVzaW9uSW50ZXJ2YWwgaW50
ZXJ2YWwgPSBleGNsdWRlZEludGVydmFsc1tpXTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5l
U2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRXhj
bHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17
Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7
Ci0gICAgaWYgKHBvbHlnb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9h
dCB5MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodDsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJ
bnRlcnZhbHM7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5
MVhJbnRlcnZhbHMpOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFs
c2UsIHkyWEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGNvbW1v
bkludGVydmFsczsKLSAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50ZXJ2YWxz
LCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9u
SW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9q
ZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiBpbmNsdWRlZEludGVydmFsczsKLSAgICBzdWJ0cmFjdEV4Y2x1c2lv
bkludGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2
YWxzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5z
aXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25JbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1
ZGVkSW50ZXJ2YWxzW2ldOwotICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVy
dmFsLngxLCBpbnRlcnZhbC54MikpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBib29sIGZp
cnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0
RWRnZUluZGV4MikKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2Vz
OwotICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHJlY3QueSgpLCByZWN0Lm1heFko
KSwgZWRnZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25F
ZGdlKiBlZGdlID0gZWRnZXNbaV07Ci0gICAgICAgIGlmIChlZGdlLT5lZGdlSW5kZXgoKSAhPSBv
ZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJbmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDIg
JiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYWJvdmVP
clRvVGhlTGVmdChjb25zdCBGbG9hdFJlY3QmIHIxLCBjb25zdCBGbG9hdFJlY3QmIHIyKQotewot
ICAgIGlmIChyMS55KCkgPCByMi55KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChy
MS55KCkgPT0gcjIueSgpKQotICAgICAgICByZXR1cm4gcjEueCgpIDwgcjIueCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBFeGNsdXNpb25Qb2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50
ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBM
YXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNv
bnN0Ci17Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7
Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhl
aWdodCgpOwotICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplLndpZHRoKCk7Ci0KLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZVBh
ZGRpbmdCb3VuZHMoKTsKLSAgICBjb25zdCBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBwb2x5Z29u
LmJvdW5kaW5nQm94KCk7Ci0gICAgaWYgKG1pbkludGVydmFsV2lkdGggPiBib3VuZGluZ0JveC53
aWR0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBtaW5ZID0gc3RkOjpt
YXgoYm91bmRpbmdCb3gueSgpLCBtaW5JbnRlcnZhbFRvcCk7Ci0gICAgZmxvYXQgbWF4WSA9IG1p
blkgKyBtaW5JbnRlcnZhbEhlaWdodDsKLQotICAgIGlmIChtYXhZID4gYm91bmRpbmdCb3gubWF4
WSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5
Z29uRWRnZSo+IGVkZ2VzOwotICAgIHBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhtaW5JbnRlcnZh
bFRvcCwgYm91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7Ci0KLSAgICBmbG9hdCBkeCA9IG1pbklu
dGVydmFsV2lkdGggLyAyOwotICAgIGZsb2F0IGR5ID0gbWluSW50ZXJ2YWxIZWlnaHQgLyAyOwot
ICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZXM7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmxv
YXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOwotICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXgxKCk7Ci0gICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKLSAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOwotICAgICAgICBWZWN0b3I8T2Zm
c2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VCdWZmZXI7Ci0KLSAgICAgICAgaWYgKHZlcnRleDIu
eSgpID4gdmVydGV4MS55KCkgPyB2ZXJ0ZXgyLngoKSA+PSB2ZXJ0ZXgxLngoKSA6IHZlcnRleDEu
eCgpID49IHZlcnRleDIueCgpKSB7Ci0gICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVu
ZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoZHgsIC1keSkpKTsKLSAgICAgICAg
ICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0
U2l6ZSgtZHgsIGR5KSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb2Zmc2V0RWRn
ZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKGR4LCBkeSkp
KTsKLSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIC1keSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
c1JlZmxleFZlcnRleCh2ZXJ0ZXgwLCB2ZXJ0ZXgxLCB2ZXJ0ZXgyKSkgewotICAgICAgICAgICAg
aWYgKHZlcnRleDIueCgpIDw9IHZlcnRleDEueCgpICYmIHZlcnRleDAueCgpIDw9IHZlcnRleDEu
eCgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZShkeCwgLWR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueCgpID49IHZlcnRleDEueCgpICYmIHZlcnRl
eDAueCgpID49IHZlcnRleDEueCgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIu
YXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZs
b2F0U2l6ZSgtZHgsIGR5KSkpOwotICAgICAgICAgICAgaWYgKHZlcnRleDIueSgpIDw9IHZlcnRl
eDEueSgpICYmIHZlcnRleDAueSgpIDw9IHZlcnRleDEueSgpKQotICAgICAgICAgICAgICAgIG9m
ZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6
ZSgtZHgsIGR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZl
cnRleDIueSgpID49IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpID49IHZlcnRleDEueSgpKQot
ICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0U2l6ZShkeCwgLWR5KSkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG9mZnNldEVkZ2VCdWZm
ZXIuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBpZiAob2Zmc2V0RWRnZUJ1ZmZlcltqXS5tYXhZ
KCkgPj0gbWluWSkKLSAgICAgICAgICAgICAgICBvZmZzZXRFZGdlcy5hcHBlbmQob2Zmc2V0RWRn
ZUJ1ZmZlcltqXSk7Ci0gICAgfQotCi0gICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHBvbHlnb24sIG1pbkludGVydmFsVG9wLCBGbG9hdFNpemUoMCwgZHkpKSk7Ci0KLSAg
ICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uOwotICAgIEZsb2F0UmVjdCBmaXJz
dEZpdFJlY3Q7Ci0gICAgYm9vbCBmaXJzdEZpdEZvdW5kID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb2Zmc2V0RWRnZXMuc2l6ZSgpOyArK2opIHsK
LSAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlc1tpXS5pbnRlcnNlY3Rpb24ob2Zmc2V0RWRnZXNb
al0sIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbihvZmZzZXRFZGdlc0ludGVyc2VjdGlvbi54KCkg
LSBkeCwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueSgpIC0gZHkpOwotICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QocG90ZW50aWFsRmlyc3RGaXRMb2NhdGlv
biwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKChvZmZzZXRF
ZGdlc1tpXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCi0gICAgICAgICAg
ICAgICAgICAgIHx8IG9mZnNldEVkZ2VzW2pdLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6
OkxpbmVUb3AKLSAgICAgICAgICAgICAgICAgICAgfHwgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlv
bi55KCkgPj0gbWluSW50ZXJ2YWxUb3ApCi0gICAgICAgICAgICAgICAgICAgICYmICghZmlyc3RG
aXRGb3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgZmlyc3RG
aXRSZWN0KSkKLSAgICAgICAgICAgICAgICAgICAgJiYgcG9seWdvbi5jb250YWlucyhvZmZzZXRF
ZGdlc0ludGVyc2VjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRSZWN0SW5Q
b2x5Z29uKHBvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRnZXNbaV0uZWRn
ZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRS
ZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmaXJzdEZpdEZvdW5kKQotICAgICAg
ICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGZpcnN0Rml0UmVjdC55KCkpOwotICAgIHJldHVy
biBmaXJzdEZpdEZvdW5kOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzg4NTUzYWIyMWQwNjQ0MWJlYmEzMDE5YWMwYjlhNTI4NmE1ZmVlMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAq
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAq
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblBvbHlnb25faAotI2RlZmluZSBFeGNsdXNpb25Q
b2x5Z29uX2gKLQotI2luY2x1ZGUgIkV4Y2x1c2lvbkludGVydmFsLmgiCi0jaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGUuaCIKLSNpbmNsdWRlICJGbG9hdFBvbHlnb24uaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBPZmZzZXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsK
LXB1YmxpYzoKLSAgICBlbnVtIEJhc2lzIHsKLSAgICAgICAgRWRnZSwKLSAgICAgICAgVmVydGV4
LAotICAgICAgICBMaW5lVG9wCi0gICAgfTsKLQotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotICAgICAg
ICA6IG1fdmVydGV4MShlZGdlLnZlcnRleDEoKSArIG9mZnNldCkKLSAgICAgICAgLCBtX3ZlcnRl
eDIoZWRnZS52ZXJ0ZXgyKCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV9lZGdlSW5kZXgoZWRnZS5l
ZGdlSW5kZXgoKSkKLSAgICAgICAgLCBtX2Jhc2lzKEVkZ2UpCi0gICAgewotICAgIH0KLQotICAg
IE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHJlZmxleFZlcnRleCwgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQxLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldDIpCi0gICAgICAgIDog
bV92ZXJ0ZXgxKHJlZmxleFZlcnRleCArIG9mZnNldDEpCi0gICAgICAgICwgbV92ZXJ0ZXgyKHJl
ZmxleFZlcnRleCArIG9mZnNldDIpCi0gICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCi0gICAgICAg
ICwgbV9iYXNpcyhWZXJ0ZXgpCi0gICAgewotICAgIH0KLQotICAgIE9mZnNldFBvbHlnb25FZGdl
KGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9w
LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLSAgICAgICAgOiBtX3ZlcnRleDEoRmxvYXRQb2lu
dChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zm
c2V0KQotICAgICAgICAsIG1fdmVydGV4MihGbG9hdFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3go
KS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV9l
ZGdlSW5kZXgoLTEpCi0gICAgICAgICwgbV9iYXNpcyhMaW5lVG9wKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX3ZlcnRleDE7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRl
eDIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRleDI7IH0KLSAgICBpbnQgZWRnZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZGdlSW5kZXg7IH0KLSAgICBCYXNpcyBiYXNpcygpIGNv
bnN0IHsgcmV0dXJuIG1fYmFzaXM7IH0KLQotcHJpdmF0ZToKLSAgICBGbG9hdFBvaW50IG1fdmVy
dGV4MTsKLSAgICBGbG9hdFBvaW50IG1fdmVydGV4MjsKLSAgICBpbnQgbV9lZGdlSW5kZXg7Ci0g
ICAgQmFzaXMgbV9iYXNpczsKLX07Ci0KLWNsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMg
RXhjbHVzaW9uU2hhcGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHln
b24pOwotcHVibGljOgotICAgIEV4Y2x1c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8Rmxv
YXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCi0gICAgICAgIDogRXhjbHVz
aW9uU2hhcGUoKQotICAgICAgICAsIG1fcG9seWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUpCi0gICAg
ICAgICwgbV9tYXJnaW5Cb3VuZHMobnVsbHB0cikKLSAgICAgICAgLCBtX3BhZGRpbmdCb3VuZHMo
bnVsbHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFy
Z2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKS5ib3VuZGluZ0JveCgpKTsgfQotICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdC
b3VuZHMoKS5ib3VuZGluZ0JveCgpKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wb2x5Z29uLmlzRW1wdHkoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBt
aW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZh
bFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBjb25z
dCBGbG9hdFBvbHlnb24mIHNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3Q7Ci0gICAgY29uc3QgRmxv
YXRQb2x5Z29uJiBzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdDsKLQotICAgIEZsb2F0UG9seWdv
biBtX3BvbHlnb247Ci0gICAgbXV0YWJsZSBPd25QdHI8RmxvYXRQb2x5Z29uPiBtX21hcmdpbkJv
dW5kczsKLSAgICBtdXRhYmxlIE93blB0cjxGbG9hdFBvbHlnb24+IG1fcGFkZGluZ0JvdW5kczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEV4Y2x1c2lvblBvbHln
b25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3Rh
bmdsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiNTIwMjZlOGExZTE2Y2Y0ZTNmOWI2
YzlkMmFiMWQyNWYwZWZiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkV4Y2x1c2lvblJlY3RhbmdsZS5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGVs
bGlwc2VYSW50ZXJjZXB0KGZsb2F0IHksIGZsb2F0IHJ4LCBmbG9hdCByeSkKLXsKLSAgICBBU1NF
UlQocnkgPiAwKTsKLSAgICByZXR1cm4gcnggKiBzcXJ0KDEgLSAoeSAqIHkpIC8gKHJ5ICogcnkp
KTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWUludGVyY2VwdChmbG9hdCB4LCBm
bG9hdCByeCwgZmxvYXQgcnkpCi17Ci0gICAgQVNTRVJUKHJ4ID4gMCk7Ci0gICAgcmV0dXJuIHJ5
ICogc3FydCgxIC0gKHggKiB4KSAvIChyeCAqIHJ4KSk7Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3Qg
RmxvYXRSb3VuZGVkUmVjdDo6cGFkZGluZ0JvdW5kcyhmbG9hdCBwYWRkaW5nKSBjb25zdAotewot
ICAgIEFTU0VSVChwYWRkaW5nID49IDApOwotICAgIGlmICghcGFkZGluZyB8fCBpc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkgKyBzdGQ6
Om1pbih3aWR0aCgpIC8gMiwgcGFkZGluZyk7Ci0gICAgZmxvYXQgYm91bmRzWSA9IHkoKSArIHN0
ZDo6bWluKGhlaWdodCgpIC8gMiwgcGFkZGluZyk7Ci0gICAgZmxvYXQgYm91bmRzV2lkdGggPSBz
dGQ6Om1heCgwLjBmLCB3aWR0aCgpIC0gcGFkZGluZyAqIDIpOwotICAgIGZsb2F0IGJvdW5kc0hl
aWdodCA9IHN0ZDo6bWF4KDAuMGYsIGhlaWdodCgpIC0gcGFkZGluZyAqIDIpOwotICAgIGZsb2F0
IGJvdW5kc1JhZGl1c1ggPSBzdGQ6Om1heCgwLjBmLCByeCgpIC0gcGFkZGluZyk7Ci0gICAgZmxv
YXQgYm91bmRzUmFkaXVzWSA9IHN0ZDo6bWF4KDAuMGYsIHJ5KCkgLSBwYWRkaW5nKTsKLSAgICBy
ZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJlY3QoYm91bmRzWCwgYm91bmRzWSwgYm91bmRz
V2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6ZShib3VuZHNSYWRpdXNYLCBib3VuZHNSYWRp
dXNZKSk7Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgRmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91
bmRzKGZsb2F0IG1hcmdpbikgY29uc3QKLXsKLSAgICBBU1NFUlQobWFyZ2luID49IDApOwotICAg
IGlmICghbWFyZ2luKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBmbG9hdCBib3VuZHNY
ID0geCgpIC0gbWFyZ2luOwotICAgIGZsb2F0IGJvdW5kc1kgPSB5KCkgLSBtYXJnaW47Ci0gICAg
ZmxvYXQgYm91bmRzV2lkdGggPSB3aWR0aCgpICsgbWFyZ2luICogMjsKLSAgICBmbG9hdCBib3Vu
ZHNIZWlnaHQgPSBoZWlnaHQoKSArIG1hcmdpbiAqIDI7Ci0gICAgZmxvYXQgYm91bmRzUmFkaXVz
WCA9IHJ4KCkgKyBtYXJnaW47Ci0gICAgZmxvYXQgYm91bmRzUmFkaXVzWSA9IHJ5KCkgKyBtYXJn
aW47Ci0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxvYXRSZWN0KGJvdW5kc1gsIGJvdW5k
c1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9hdFNpemUoYm91bmRzUmFkaXVzWCwg
Ym91bmRzUmFkaXVzWSkpOwotfQotCi1GbG9hdFBvaW50IEZsb2F0Um91bmRlZFJlY3Q6OmNvcm5l
ckludGVyY2VwdEZvcldpZHRoKGZsb2F0IHdpZHRoQXRJbnRlcmNlcHQpIGNvbnN0Ci17Ci0gICAg
ZmxvYXQgeGkgPSAod2lkdGgoKSAtIHdpZHRoQXRJbnRlcmNlcHQpIC8gMjsKLSAgICBmbG9hdCB5
aSA9IHJ5KCkgLSBlbGxpcHNlWUludGVyY2VwdChyeCgpIC0geGksIHJ4KCksIHJ5KCkpOwotICAg
IHJldHVybiBGbG9hdFBvaW50KHhpLCB5aSk7Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgRXhjbHVz
aW9uUmVjdGFuZ2xlOjpzaGFwZVBhZGRpbmdCb3VuZHMoKSBjb25zdAotewotICAgIGlmICghbV9o
YXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKSB7Ci0gICAgICAgIG1faGF2ZUluaXRpYWxpemVk
UGFkZGluZ0JvdW5kcyA9IHRydWU7Ci0gICAgICAgIG1fcGFkZGluZ0JvdW5kcyA9IG1fYm91bmRz
LnBhZGRpbmdCb3VuZHMoc2hhcGVQYWRkaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9wYWRk
aW5nQm91bmRzOwotfQotCi1GbG9hdFJvdW5kZWRSZWN0IEV4Y2x1c2lvblJlY3RhbmdsZTo6c2hh
cGVNYXJnaW5Cb3VuZHMoKSBjb25zdAotewotICAgIGlmICghbV9oYXZlSW5pdGlhbGl6ZWRNYXJn
aW5Cb3VuZHMpIHsKLSAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMgPSB0cnVl
OwotICAgICAgICBtX21hcmdpbkJvdW5kcyA9IG1fYm91bmRzLm1hcmdpbkJvdW5kcyhzaGFwZU1h
cmdpbigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbWFyZ2luQm91bmRzOwotfQotCi12b2lkIEV4
Y2x1c2lvblJlY3RhbmdsZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0
Ci17Ci0gICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91bmRzID0gc2hhcGVNYXJnaW5Cb3Vu
ZHMoKTsKLSAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2lj
YWxIZWlnaHQ7Ci0KLSAgICBpZiAoeTIgPCBib3VuZHMueSgpIHx8IHkxID49IGJvdW5kcy5tYXhZ
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHgxID0gYm91bmRzLngoKTsKLSAgICBm
bG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7Ci0KLSAgICBpZiAoYm91bmRzLnJ5KCkgPiAwKSB7Ci0g
ICAgICAgIGlmICh5MiA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKSkgewotICAgICAgICAgICAg
ZmxvYXQgeWkgPSB5MiAtIGJvdW5kcy55KCkgLSBib3VuZHMucnkoKTsKLSAgICAgICAgICAgIGZs
b2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7
Ci0gICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAtIHhpOwotICAgICAg
ICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsKLSAgICAgICAgfSBl
bHNlIGlmICh5MSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKSkgewotICAgICAgICAgICAg
ZmxvYXQgeWkgPSAgeTEgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKLSAgICAgICAg
ICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMu
cnkoKSk7Ci0gICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAtIHhpOwot
ICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoeDEsIHgyKSk7Ci19
Ci0KLXZvaWQgRXhjbHVzaW9uUmVjdGFuZ2xlOjpnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJl
c3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFw
ZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9naWNh
bFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBpZiAoeTEgPCBib3VuZHMueSgpIHx8IHkyID4g
Ym91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeDEgPSBib3VuZHMu
eCgpOwotICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKLQotICAgIGlmIChib3VuZHMucnko
KSA+IDApIHsKLSAgICAgICAgYm9vbCB5MUludGVyY2VwdHNDb3JuZXIgPSB5MSA8IGJvdW5kcy55
KCkgKyBib3VuZHMucnkoKTsKLSAgICAgICAgYm9vbCB5MkludGVyY2VwdHNDb3JuZXIgPSB5MiA+
IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKLSAgICAgICAgZmxvYXQgeGkgPSAwOwotCi0g
ICAgICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgJiYgeTJJbnRlcmNlcHRzQ29ybmVyKSB7Ci0g
ICAgICAgICAgICBpZiAgKHkxIDwgYm91bmRzLmhlaWdodCgpICsgMiAqIGJvdW5kcy55KCkgLSB5
MikgewotICAgICAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3VuZHMueSgpIC0gYm91bmRz
LnJ5KCk7Ci0gICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRz
LnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpKTsKLSAgICAg
ICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRz
LnJ5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHkxSW50ZXJjZXB0c0Nv
cm5lcikgewotICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJvdW5kcy55KCkgLSBib3VuZHMu
cnkoKTsKLSAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5kcy5yeCgp
LCBib3VuZHMucnkoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeTJJbnRlcmNlcHRzQ29ybmVyKSB7
Ci0gICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5
KCkpOwotICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCks
IGJvdW5kcy5yeSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh5MUludGVyY2VwdHNDb3Ju
ZXIgfHwgeTJJbnRlcmNlcHRzQ29ybmVyKSB7Ci0gICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkg
KyBib3VuZHMucngoKSAtIHhpOwotICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91
bmRzLnJ4KCkgKyB4aTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoTGlu
ZVNlZ21lbnQoeDEsIHgyKSk7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uUmVjdGFuZ2xlOjpmaXJzdElu
Y2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9w
LCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiBy
ZXN1bHQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50
ZXJ2YWxUb3A7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLmhlaWdodCgpOwotICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2Fs
SW50ZXJ2YWxTaXplLndpZHRoKCk7Ci0KLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBib3Vu
ZHMgPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSB8fCBt
aW5JbnRlcnZhbFdpZHRoID4gYm91bmRzLndpZHRoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZHMueSgpLCBtaW5JbnRlcnZhbFRvcCk7
Ci0gICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKLQotICAgIGlmICht
YXhZID4gYm91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBp
bnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyID0gbWluWSA8IGJvdW5kcy55KCkgKyBib3VuZHMucnko
KTsKLSAgICBib29sIGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgPSBtYXhZID4gYm91bmRzLm1h
eFkoKSAtIGJvdW5kcy5yeSgpOwotCi0gICAgaWYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVy
ICYmICFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyKSB7Ci0gICAgICAgIHJlc3VsdCA9IG1pblk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGZsb2F0IGNlbnRlclkgPSBib3Vu
ZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMjsKLSAgICBib29sIG1pbkNvcm5lckRlZmluZXNY
ID0gZmFicyhjZW50ZXJZIC0gbWluWSkgPiBmYWJzKGNlbnRlclkgLSBtYXhZKTsKLSAgICBib29s
IGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgPSBtaW5JbnRlcnZhbFdpZHRoICsgMiAqIGJvdW5k
cy5yeCgpIDw9IGJvdW5kcy53aWR0aCgpOwotICAgIEZsb2F0UG9pbnQgY29ybmVySW50ZXJjZXB0
ID0gYm91bmRzLmNvcm5lckludGVyY2VwdEZvcldpZHRoKG1pbkludGVydmFsV2lkdGgpOwotCi0g
ICAgaWYgKGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWF4
Q29ybmVyIHx8IG1pbkNvcm5lckRlZmluZXNYKSkgewotICAgICAgICBpZiAoaW50ZXJ2YWxGaXRz
V2l0aGluQ29ybmVycyB8fCBib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0LnkoKSA8IG1pblkp
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAobWluSW50ZXJ2YWxIZWlnaHQgPCBib3VuZHMuaGVpZ2h0
KCkgLSAoMiAqIGNvcm5lckludGVyY2VwdC55KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBj
ZWlsZWRMYXlvdXRVbml0KGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQueSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludGVydmFs
T3ZlcmxhcHNNYXhDb3JuZXIgJiYgKCFpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyIHx8ICFtaW5D
b3JuZXJEZWZpbmVzWCkpIHsKLSAgICAgICAgaWYgKGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMg
fHwgbWluWSA8PSAgYm91bmRzLm1heFkoKSAtIGNvcm5lckludGVyY2VwdC55KCkgLSBtaW5JbnRl
cnZhbEhlaWdodCkgewotICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uUmVjdGFuZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOWZkYWMxNjNj
MTJlZTczZDJiZTg5M2VmMzE4OGJkMzI3N2MyYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJl
Y3RhbmdsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
RXhjbHVzaW9uUmVjdGFuZ2xlX2gKLSNkZWZpbmUgRXhjbHVzaW9uUmVjdGFuZ2xlX2gKLQotI2lu
Y2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZsb2F0Um91bmRlZFJlY3QgOiBwdWJsaWMgRmxvYXRSZWN0IHsKLXB1Ymxp
YzoKLSAgICBGbG9hdFJvdW5kZWRSZWN0KCkgeyB9Ci0gICAgRmxvYXRSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKLSAgICAgICAgOiBG
bG9hdFJlY3QoYm91bmRzKQotICAgICAgICAsIG1fcmFkaWkocmFkaWkpCi0gICAgewotICAgIH0K
LQotICAgIGZsb2F0IHJ4KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpaS53aWR0aCgpOyB9Ci0gICAg
ZmxvYXQgcnkoKSBjb25zdCB7IHJldHVybiBtX3JhZGlpLmhlaWdodCgpOyB9Ci0gICAgRmxvYXRS
b3VuZGVkUmVjdCBtYXJnaW5Cb3VuZHMoZmxvYXQgbWFyZ2luKSBjb25zdDsKLSAgICBGbG9hdFJv
dW5kZWRSZWN0IHBhZGRpbmdCb3VuZHMoZmxvYXQgcGFkZGluZykgY29uc3Q7Ci0gICAgRmxvYXRQ
b2ludCBjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3aWR0aCkgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgRmxvYXRTaXplIG1fcmFkaWk7Ci19OwotCi1jbGFzcyBFeGNsdXNpb25SZWN0YW5n
bGUgOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewotcHVibGljOgotICAgIEV4Y2x1c2lvblJlY3Rh
bmdsZShjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKLSAg
ICAgICAgOiBFeGNsdXNpb25TaGFwZSgpCi0gICAgICAgICwgbV9ib3VuZHMoYm91bmRzLCByYWRp
aSkKLSAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcyhmYWxzZSkKLSAgICAg
ICAgLCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMoZmFsc2UpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFy
Z2luQm91bmRzKCkpOyB9Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2lj
YWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91
dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ib3VuZHMuaXNFbXB0eSgpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3As
IExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRV
bml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbElu
dGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9WRVJSSURFOwotCi1wcml2YXRlOgotICAg
IEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdDsKLSAgICBGbG9hdFJv
dW5kZWRSZWN0IHNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0OwotCi0gICAgRmxvYXRSb3VuZGVk
UmVjdCBtX2JvdW5kczsKLSAgICBtdXRhYmxlIEZsb2F0Um91bmRlZFJlY3QgbV9tYXJnaW5Cb3Vu
ZHM7Ci0gICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRSZWN0IG1fcGFkZGluZ0JvdW5kczsKLSAgICBt
dXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMgOiAxOwotICAgIG11dGFi
bGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMgOiAxOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uUmVjdGFuZ2xlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmZmU2NDBkYjVkNzYxNzQ0YTRhMDFiNjgwNWI4NWM3OGNiYjA2N2Q3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICog
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25T
aGFwZS5oIgotCi0jaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkV4
Y2x1c2lvblBvbHlnb24uaCIKLSNpbmNsdWRlICJFeGNsdXNpb25SZWN0YW5nbGUuaCIKLSNpbmNs
dWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRl
ICJXaW5kUnVsZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3Rm
L093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lv
blJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRp
aSkKLXsKLSAgICBBU1NFUlQoYm91bmRzLndpZHRoKCkgPj0gMCAmJiBib3VuZHMuaGVpZ2h0KCkg
Pj0gMCAmJiByYWRpaS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7Ci0gICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5nbGUoYm91bmRzLCByYWRpaSkpOwot
fQotCi1zdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZT4gY3JlYXRlRXhjbHVzaW9uQ2ly
Y2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxvYXQgcmFkaXVzKQotewotICAgIEFTU0VS
VChyYWRpdXMgPj0gMCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5n
bGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpdXMsIGNlbnRlci55KCkgLSByYWRpdXMsIHJh
ZGl1cyoyLCByYWRpdXMqMiksIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpKTsKLX0KLQotc3Rh
dGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoY29u
c3QgRmxvYXRQb2ludCYgY2VudGVyLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQotewotICAgIEFT
U0VSVChyYWRpaS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KGNlbnRlci54KCkg
LSByYWRpaS53aWR0aCgpLCBjZW50ZXIueSgpIC0gcmFkaWkuaGVpZ2h0KCksIHJhZGlpLndpZHRo
KCkqMiwgcmFkaWkuaGVpZ2h0KCkqMiksIHJhZGlpKSk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRy
PEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9y
PEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUG9seWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUpKTsKLX0K
LQotc3RhdGljIGlubGluZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkK
LSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgaWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LnkoKSwgbG9naWNh
bEJveEhlaWdodCAtIHJlY3QubWF4WCgpLCByZWN0LmhlaWdodCgpLCByZWN0LndpZHRoKCkpOwot
ICAgIHJldHVybiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxv
YXRQb2ludCBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCBsb2dpY2FsQm94SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICBp
ZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQotICAgICAgICByZXR1cm4g
cG9pbnQ7Ci0gICAgaWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkK
LSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9pbnQueSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0g
cG9pbnQueCgpKTsKLSAgICByZXR1cm4gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb25zdCBGbG9hdFNp
emUmIHNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIGlmIChpc0hvcml6b250
YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIHJl
dHVybiBzaXplLnRyYW5zcG9zZWRTaXplKCk7Ci19Ci0KLVBhc3NPd25QdHI8RXhjbHVzaW9uU2hh
cGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNpb25TaGFwZShjb25zdCBCYXNpY1NoYXBl
KiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94U2l6ZSwgV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKQotewotICAgIEFT
U0VSVChiYXNpY1NoYXBlKTsKLQotICAgIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGZsb2F0IGJveFdpZHRoID0g
aG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUud2lkdGgoKSA6IGxvZ2ljYWxC
b3hTaXplLmhlaWdodCgpOwotICAgIGZsb2F0IGJveEhlaWdodCA9IGhvcml6b250YWxXcml0aW5n
TW9kZSA/IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpIDogbG9naWNhbEJveFNpemUud2lkdGgoKTsK
LSAgICBPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGV4Y2x1c2lvblNoYXBlOwotCi0gICAgc3dpdGNo
IChiYXNpY1NoYXBlLT50eXBlKCkpIHsKLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFw
ZVJlY3RhbmdsZVR5cGU6IHsKLSAgICAgICAgY29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVj
dGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSo+KGJhc2ljU2hh
cGUpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZv
ckxlbmd0aChyZWN0YW5nbGUtPngoKSwgYm94V2lkdGgpLAotICAgICAgICAgICAgZmxvYXRWYWx1
ZUZvckxlbmd0aChyZWN0YW5nbGUtPnkoKSwgYm94SGVpZ2h0KSwKLSAgICAgICAgICAgIGZsb2F0
VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT53aWR0aCgpLCBib3hXaWR0aCksCi0gICAgICAgICAg
ICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+aGVpZ2h0KCksIGJveEhlaWdodCkpOwot
ICAgICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgp
OwotICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVz
WSgpOwotICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCi0gICAgICAgICAgICByYWRpdXNY
TGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNYTGVu
Z3RoLCBib3hXaWR0aCksCi0gICAgICAgICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkg
PyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQpKTsKLSAg
ICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91
bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwotCi0gICAgICAgIGV4
Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUmVjdGFuZ2xlKGxvZ2ljYWxCb3VuZHMsIHBo
eXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwgd3JpdGluZ01vZGUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlQ2lyY2xlVHlw
ZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKiBjaXJjbGUgPSBzdGF0aWNfY2Fz
dDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIGZsb2F0IGNl
bnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWCgpLCBib3hXaWR0aCk7
Ci0gICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2Vu
dGVyWSgpLCBib3hIZWlnaHQpOwotICAgICAgICBmbG9hdCByYWRpdXMgPSBmbG9hdFZhbHVlRm9y
TGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWluKGJveEhlaWdodCwgYm94V2lkdGgpKTsK
LSAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2ljYWxQb2ludFRvTG9naWNh
bChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwg
d3JpdGluZ01vZGUpOwotCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9u
Q2lyY2xlKGxvZ2ljYWxDZW50ZXIsIHJhZGl1cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUVsbGlwc2VUeXBlOiB7Ci0gICAgICAgIGNv
bnN0IEJhc2ljU2hhcGVFbGxpcHNlKiBlbGxpcHNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNT
aGFwZUVsbGlwc2UqPihiYXNpY1NoYXBlKTsKLSAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWCgpLCBib3hXaWR0aCk7Ci0gICAgICAgIGZs
b2F0IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRlclkoKSwgYm94
SGVpZ2h0KTsKLSAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxs
aXBzZS0+cmFkaXVzWCgpLCBib3hXaWR0aCk7Ci0gICAgICAgIGZsb2F0IHJhZGl1c1kgPSBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1koKSwgYm94SGVpZ2h0KTsKLSAgICAgICAg
RmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBv
aW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01v
ZGUpOwotICAgICAgICBGbG9hdFNpemUgbG9naWNhbFJhZGlpID0gcGh5c2ljYWxTaXplVG9Mb2dp
Y2FsKEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSwgd3JpdGluZ01vZGUpOwotCi0gICAgICAg
IGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uRWxsaXBzZShsb2dpY2FsQ2VudGVyLCBs
b2dpY2FsUmFkaWkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEJhc2ljU2hh
cGU6OkJhc2ljU2hhcGVQb2x5Z29uVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlUG9s
eWdvbiogcG9seWdvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKj4oYmFz
aWNTaGFwZSk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxMZW5ndGg+JiB2YWx1ZXMgPSBwb2x5Z29u
LT52YWx1ZXMoKTsKLSAgICAgICAgc2l6ZV90IHZhbHVlc1NpemUgPSB2YWx1ZXMuc2l6ZSgpOwot
ICAgICAgICBBU1NFUlQoISh2YWx1ZXNTaXplICUgMikpOwotICAgICAgICBPd25QdHI8VmVjdG9y
PEZsb2F0UG9pbnQ+ID4gdmVydGljZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+
KHZhbHVlc1NpemUgLyAyKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXNTaXplOyBpICs9IDIpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdmVydGV4KAotICAgICAg
ICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkpLCBib3hXaWR0aCksCi0g
ICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSArIDEpLCBib3hI
ZWlnaHQpKTsKLSAgICAgICAgICAgICgqdmVydGljZXMpW2kgLyAyXSA9IHBoeXNpY2FsUG9pbnRU
b0xvZ2ljYWwodmVydGV4LCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25Qb2x5
Z29uKHZlcnRpY2VzLnJlbGVhc2UoKSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFu
Z2xlVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUqIHJlY3Rh
bmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSo+KGJhc2lj
U2hhcGUpOwotICAgICAgICBmbG9hdCBsZWZ0ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5n
bGUtPmxlZnQoKSwgYm94V2lkdGgpOwotICAgICAgICBmbG9hdCB0b3AgPSBmbG9hdFZhbHVlRm9y
TGVuZ3RoKHJlY3RhbmdsZS0+dG9wKCksIGJveEhlaWdodCk7Ci0gICAgICAgIEZsb2F0UmVjdCBi
b3VuZHMoCi0gICAgICAgICAgICBsZWZ0LAotICAgICAgICAgICAgdG9wLAotICAgICAgICAgICAg
Ym94V2lkdGggLSBsZWZ0IC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnJpZ2h0KCks
IGJveFdpZHRoKSwKLSAgICAgICAgICAgIGJveEhlaWdodCAtIHRvcCAtIGZsb2F0VmFsdWVGb3JM
ZW5ndGgocmVjdGFuZ2xlLT5ib3R0b20oKSwgYm94SGVpZ2h0KSk7Ci0gICAgICAgIExlbmd0aCBy
YWRpdXNYTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7Ci0gICAgICAgIExlbmd0
aCByYWRpdXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7Ci0gICAgICAgIEZs
b2F0U2l6ZSBjb3JuZXJSYWRpaSgKLSAgICAgICAgICAgIHJhZGl1c1hMZW5ndGguaXNVbmRlZmlu
ZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwK
LSAgICAgICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOwotICAgICAgICBGbG9hdFJlY3Qg
bG9naWNhbEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChib3VuZHMsIGxvZ2ljYWxCb3hT
aXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hhcGUgPSBj
cmVhdGVFeGNsdXNpb25SZWN0YW5nbGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9Mb2dp
Y2FsKGNvcm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAg
ICBleGNsdXNpb25TaGFwZS0+bV93cml0aW5nTW9kZSA9IHdyaXRpbmdNb2RlOwotICAgIGV4Y2x1
c2lvblNoYXBlLT5tX21hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgobWFyZ2luLCAwKTsKLSAg
ICBleGNsdXNpb25TaGFwZS0+bV9wYWRkaW5nID0gZmxvYXRWYWx1ZUZvckxlbmd0aChwYWRkaW5n
LCAwKTsKLQotICAgIHJldHVybiBleGNsdXNpb25TaGFwZS5yZWxlYXNlKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZDUxZjA0MTY4MjMyMTgyMTUyYzMy
ODAzZmE3M2ZhNDg5ZDQ1MWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFwZV9o
Ci0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlX2gKLQotI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgiCi0j
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RydWN0IExpbmVTZWdtZW50IHsKLSAgICBMaW5lU2VnbWVudChmbG9h
dCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0KQotICAgICAgICA6IGxvZ2ljYWxMZWZ0
KGxvZ2ljYWxMZWZ0KQotICAgICAgICAsIGxvZ2ljYWxSaWdodChsb2dpY2FsUmlnaHQpCi0gICAg
ewotICAgIH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnQ7Ci0gICAgTGF5b3V0VW5pdCBs
b2dpY2FsUmlnaHQ7Ci19OwotCi10eXBlZGVmIFZlY3RvcjxMaW5lU2VnbWVudD4gU2VnbWVudExp
c3Q7Ci0KLQotLy8gQSByZXByZXNlbnRhdGlvbiBvZiBhIEJhc2ljU2hhcGUgdGhhdCBlbmFibGVz
IGxheW91dCBjb2RlIHRvIGRldGVybWluZSBob3cgdG8gYnJlYWsgYSBsaW5lIHVwIGludG8gc2Vn
bWVudHMKLS8vIHRoYXQgd2lsbCBmaXQgd2l0aGluIG9yIGFyb3VuZCBhIHNoYXBlLiBUaGUgbGlu
ZSBpcyBkZWZpbmVkIGJ5IGEgcGFpciBvZiBsb2dpY2FsIFkgY29vcmRpbmF0ZXMgYW5kIHRoZQot
Ly8gY29tcHV0ZWQgc2VnbWVudHMgYXJlIHJldHVybmVkIGFzIHBhaXJzIG9mIGxvZ2ljYWwgWCBj
b29yZGluYXRlcy4gVGhlIEJhc2ljU2hhcGUgaXRzZWxmIGlzIGRlZmluZWQgaW4KLS8vIHBoeXNp
Y2FsIGNvb3JkaW5hdGVzLgotCi1jbGFzcyBFeGNsdXNpb25TaGFwZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNv
bnN0IEJhc2ljU2hhcGUqLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94U2l6ZSwgV3JpdGlu
Z01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKTsKLQotICAgIHZpcnR1YWwgfkV4
Y2x1c2lvblNoYXBlKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVNYXJnaW5M
b2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IHNo
YXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRl
cnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVy
dmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRl
cnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExh
eW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29u
c3QgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZmxvYXQgc2hhcGVNYXJnaW4oKSBjb25zdCB7IHJl
dHVybiBtX21hcmdpbjsgfQotICAgIGZsb2F0IHNoYXBlUGFkZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fcGFkZGluZzsgfQotCi1wcml2YXRlOgotICAgIFdyaXRpbmdNb2RlIG1fd3JpdGluZ01vZGU7
Ci0gICAgZmxvYXQgbV9tYXJnaW47Ci0gICAgZmxvYXQgbV9wYWRkaW5nOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhjbHVzaW9uU2hhcGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWYxNGY4MjJiNzg1NDFlZGUzZTNjNDhiODM0ZDgyYzMyOGFjZTFi
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlSW5mby5oIgotCi0jaWYgRU5BQkxFKENT
U19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotI2luY2x1ZGUgIlJlbmRl
ckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9u
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotdGVt
cGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxl
Ojoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1c2lvblNoYXBlOjoqaW50ZXJ2YWxH
ZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+Ci1jb25z
dCBFeGNsdXNpb25TaGFwZSogRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0
dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVkU2hhcGUoKSBjb25zdAotewotICAgIGlmIChF
eGNsdXNpb25TaGFwZSogZXhjbHVzaW9uU2hhcGUgPSBtX3NoYXBlLmdldCgpKQotICAgICAgICBy
ZXR1cm4gZXhjbHVzaW9uU2hhcGU7Ci0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZVZh
bHVlID0gKG1fcmVuZGVyZXItPnN0eWxlKCktPipzaGFwZUdldHRlcikoKTsKLSAgICBCYXNpY1No
YXBlKiBzaGFwZSA9IChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPnR5cGUoKSA9PSBFeGNsdXNp
b25TaGFwZVZhbHVlOjpTaGFwZSkgPyBzaGFwZVZhbHVlLT5zaGFwZSgpIDogMDsKLQotICAgIEFT
U0VSVChzaGFwZSk7Ci0KLSAgICBtX3NoYXBlID0gRXhjbHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1
c2lvblNoYXBlKHNoYXBlLCBMYXlvdXRTaXplKG1fc2hhcGVMb2dpY2FsV2lkdGgsIG1fc2hhcGVM
b2dpY2FsSGVpZ2h0KSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSwgbV9yZW5k
ZXJlci0+c3R5bGUoKS0+c2hhcGVNYXJnaW4oKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVQ
YWRkaW5nKCkpOwotICAgIEFTU0VSVChtX3NoYXBlKTsKLSAgICByZXR1cm4gbV9zaGFwZS5nZXQo
KTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSog
KFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4Y2x1c2lvblNoYXBl
OjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNlZ21lbnRMaXN0Jikg
Y29uc3Q+Ci1ib29sIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwg
aW50ZXJ2YWxHZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQotewotICAgIEFTU0VSVChsaW5lSGVpZ2h0ID49IDAp
OwotICAgIG1fc2hhcGVMaW5lVG9wID0gbGluZVRvcCAtIGxvZ2ljYWxUb3BPZmZzZXQoKTsKLSAg
ICBtX2xpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0OwotICAgIG1fc2VnbWVudHMuY2xlYXIoKTsKLQot
ICAgIGlmIChsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQotICAgICAgICAoY29tcHV0ZWRTaGFw
ZSgpLT4qaW50ZXJ2YWxHZXR0ZXIpKG1fc2hhcGVMaW5lVG9wLCBzdGQ6Om1pbihtX2xpbmVIZWln
aHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGluZVRvcCksIG1fc2VnbWVudHMpOwotCi0gICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IHRoaXMtPmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NlZ21lbnRzLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNhbExlZnRPZmZzZXQ7Ci0g
ICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0Owot
ICAgIH0KLQotICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKLX0KLQotdGVtcGxhdGUgY2xh
c3MgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVk
U2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+OwotdGVt
cGxhdGUgY2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpz
aGFwZU91dHNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+OwotfQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNzA3OTJhM2Y5MTI2ZmQ3NWNmYjc2ODI5
ZmI5YWFjNjAxOGZmYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5mby5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0qICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0qICAgIGRpc2NsYWlt
ZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0qICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UiAiQVMgSVMiIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0q
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwKLSogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotKiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSog
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBFeGNsdXNpb25TaGFwZUluZm9f
aAotI2RlZmluZSBFeGNsdXNpb25TaGFwZUluZm9faAotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBl
VmFsdWUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlPGNs
YXNzIEtleVR5cGUsIGNsYXNzIEluZm9UeXBlPgotY2xhc3MgTWFwcGVkSW5mbyB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIEluZm9UeXBlKiBlbnN1cmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkKLSAg
ICB7Ci0gICAgICAgIEluZm9NYXAmIGluZm9NYXAgPSBNYXBwZWRJbmZvPEtleVR5cGUsIEluZm9U
eXBlPjo6aW5mb01hcCgpOwotICAgICAgICBpZiAoSW5mb1R5cGUqIGluZm8gPSBpbmZvTWFwLmdl
dChrZXkpKQotICAgICAgICAgICAgcmV0dXJuIGluZm87Ci0gICAgICAgIHR5cGVuYW1lIEluZm9N
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbmZvTWFwLmFkZChrZXksIEluZm9UeXBlOjpjcmVhdGVJ
bmZvKGtleSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
LSAgICB9Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlSW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsg
aW5mb01hcCgpLnJlbW92ZShrZXkpOyB9Ci0gICAgc3RhdGljIEluZm9UeXBlKiBpbmZvKGNvbnN0
IEtleVR5cGUqIGtleSkgeyByZXR1cm4gaW5mb01hcCgpLmdldChrZXkpOyB9Ci1wcml2YXRlOgot
ICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBLZXlUeXBlKiwgT3duUHRyPEluZm9UeXBlPiA+IElu
Zm9NYXA7Ci0gICAgc3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQotICAgIHsKLSAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChJbmZvTWFwLCBzdGF0aWNJbmZvTWFwLCAoKSk7Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNJbmZvTWFwOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5
cGUsIEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChFeGNsdXNpb25TaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBM
YXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgotY2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZv
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5F
eGNsdXNpb25TaGFwZUluZm8oKSB7IH0KLQotICAgIHZvaWQgc2V0U2hhcGVTaXplKExheW91dFVu
aXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpCi0gICAgewotICAgICAg
ICBpZiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpIHsK
LSAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5n
TG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IG1fcmVuZGVyZXIt
PmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobV9zaGFwZUxvZ2ljYWxXaWR0aCA9PSBsb2dpY2FsV2lkdGggJiYgbV9zaGFwZUxvZ2ljYWxI
ZWlnaHQgPT0gbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGly
dHlTaGFwZVNpemUoKTsKLSAgICAgICAgbV9zaGFwZUxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0
aDsKLSAgICAgICAgbV9zaGFwZUxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0OwotICAgIH0K
LQotICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KTsKLSAgICB2b2lkIGNsZWFyU2VnbWVudHMoKSB7
IG1fc2VnbWVudHMuY2xlYXIoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxUb3Ao
KSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueSgpICsg
bG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxCb3R0b20o
KSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WSgp
ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxMZWZ0
KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLngoKSAr
IGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFJpZ2h0
KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFgo
KSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLndp
ZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQotCi0gICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGluZVRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9w
ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9wICsgbV9saW5lSGVpZ2h0ICsgbG9naWNh
bFRvcE9mZnNldCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09
IENPTlRFTlRfQk9YKSA/IChtX3NoYXBlTG9naWNhbEhlaWdodCArIG1fcmVuZGVyZXItPmJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpIDogbV9zaGFwZUxvZ2ljYWxIZWlnaHQ7IH0KLQot
ICAgIGJvb2wgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBsb2dpY2Fs
TGluZVRvcCgpIDwgc2hhcGVMb2dpY2FsQm90dG9tKCkgJiYgc2hhcGVMb2dpY2FsVG9wKCkgPD0g
bG9naWNhbExpbmVCb3R0b20oKTsgfQotICAgIGJvb2wgbGluZVdpdGhpblNoYXBlQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiAobG9naWNhbExpbmVC
b3R0b20oKSA8PSBzaGFwZUxvZ2ljYWxCb3R0b20oKSk7IH0KLQotICAgIHZvaWQgZGlydHlTaGFw
ZVNpemUoKSB7IG1fc2hhcGUuY2xlYXIoKTsgfQotICAgIGJvb2wgc2hhcGVTaXplRGlydHkoKSB7
IHJldHVybiAhbV9zaGFwZS5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclR5cGUqIG93bmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRXhjbHVzaW9u
U2hhcGVJbmZvKGNvbnN0IFJlbmRlclR5cGUqIHJlbmRlcmVyKTogbV9yZW5kZXJlcihyZW5kZXJl
cikgeyB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25TaGFwZSogY29tcHV0ZWRTaGFwZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94
KCkgY29uc3QgPSAwOwotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gg
PyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiBMYXlvdXRVbml0KCk7IH07
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIChtX3Jl
bmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCAmJiAhbV9yZW5kZXJl
ci0+aXNSZW5kZXJSZWdpb24oKSkgPyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nU3RhcnQo
KSA6IExheW91dFVuaXQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTGluZVRvcDsKLSAg
ICBMYXlvdXRVbml0IG1fbGluZUhlaWdodDsKLSAgICBTZWdtZW50TGlzdCBtX3NlZ21lbnRzOwot
Ci1wcml2YXRlOgotICAgIG11dGFibGUgT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBtX3NoYXBlOwot
Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbFdpZHRoOwotICAgIExheW91dFVuaXQgbV9z
aGFwZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgY29uc3QgUmVuZGVyVHlwZSogbV9yZW5kZXJlcjsKLX07
Ci19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZThhNzQ0ZmNiYTk5NTRkOWRhMGE5OTU1ZGNhODdhYmRlZDNlOTMxMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxB
UyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQot
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIKLQotI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5k
ZXJCbG9jay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxpbmVTZWdtZW50UmFuZ2U6Okxp
bmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgZW5kKQotICAgIDogc3RhcnQoc3RhcnQucm9vdCgpLCBzdGFydC5vYmplY3QoKSwg
c3RhcnQub2Zmc2V0KCkpCi0gICAgLCBlbmQoZW5kLnJvb3QoKSwgZW5kLm9iamVjdCgpLCBlbmQu
b2Zmc2V0KCkpCi0gICAgewotICAgIH0KLQotYm9vbCBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86
OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCi17Ci0gICAgRXhjbHVz
aW9uU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5yZXNvbHZlZFNo
YXBlSW5zaWRlKCk7Ci0gICAgaWYgKCFzaGFwZVZhbHVlIHx8IHNoYXBlVmFsdWUtPnR5cGUoKSAh
PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgQmFzaWNTaGFwZSogc2hhcGUgPSBzaGFwZVZhbHVlLT5zaGFwZSgpOwotICAgIHJldHVybiBz
aGFwZSAmJiBzaGFwZS0+dHlwZSgpICE9IEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFJlY3Rh
bmdsZVR5cGU7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOjphZGp1c3RMb2dp
Y2FsTGluZVRvcChmbG9hdCBtaW5TZWdtZW50V2lkdGgpCi17Ci0gICAgY29uc3QgRXhjbHVzaW9u
U2hhcGUqIHNoYXBlID0gY29tcHV0ZWRTaGFwZSgpOwotICAgIGlmICghc2hhcGUgfHwgbV9saW5l
SGVpZ2h0IDw9IDAgfHwgbG9naWNhbExpbmVUb3AoKSA+IHNoYXBlTG9naWNhbEJvdHRvbSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMYXlvdXRVbml0IG5ld0xpbmVUb3A7Ci0gICAg
aWYgKHNoYXBlLT5maXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKG1fc2hhcGVMaW5lVG9w
LCBMYXlvdXRTaXplKG1pblNlZ21lbnRXaWR0aCwgbV9saW5lSGVpZ2h0KSwgbmV3TGluZVRvcCkp
IHsKLSAgICAgICAgaWYgKG5ld0xpbmVUb3AgPiBtX3NoYXBlTGluZVRvcCkgewotICAgICAgICAg
ICAgbV9zaGFwZUxpbmVUb3AgPSBuZXdMaW5lVG9wOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQwMzJmZjk5ZjZmZGI3ZGNjMjRi
ODY2Yzk0MWI4NjMwMjU4MDJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvX2gKLSNkZWZpbmUgRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvX2gKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5j
bHVkZSAiRXhjbHVzaW9uU2hhcGVJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
SW5saW5lSXRlcmF0b3I7Ci1jbGFzcyBSZW5kZXJCbG9jazsKLWNsYXNzIFJlbmRlck9iamVjdDsK
LQotc3RydWN0IExpbmVTZWdtZW50SXRlcmF0b3IgewotICAgIFJlbmRlck9iamVjdCogcm9vdDsK
LSAgICBSZW5kZXJPYmplY3QqIG9iamVjdDsKLSAgICB1bnNpZ25lZCBvZmZzZXQ7Ci0gICAgTGlu
ZVNlZ21lbnRJdGVyYXRvcihSZW5kZXJPYmplY3QqIHJvb3QsIFJlbmRlck9iamVjdCogb2JqZWN0
LCB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogcm9vdChyb290KQotICAgICAgICAsIG9iamVj
dChvYmplY3QpCi0gICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQotfTsKLQot
c3RydWN0IExpbmVTZWdtZW50UmFuZ2UgewotICAgIExpbmVTZWdtZW50SXRlcmF0b3Igc3RhcnQ7
Ci0gICAgTGluZVNlZ21lbnRJdGVyYXRvciBlbmQ7Ci0gICAgTGluZVNlZ21lbnRSYW5nZShjb25z
dCBJbmxpbmVJdGVyYXRvciYgc3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQpOwotfTsK
LQotdHlwZWRlZiBWZWN0b3I8TGluZVNlZ21lbnRSYW5nZT4gU2VnbWVudFJhbmdlTGlzdDsKLQot
Y2xhc3MgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvIDogcHVibGljIEV4Y2x1c2lvblNoYXBlSW5m
bzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5zaWRlLCAmRXhjbHVz
aW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRl
ckJsb2NrKiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyhyZW5kZXJlcikpOyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29u
c3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKTsKLQotICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2Vn
bWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBP
VkVSUklERQotICAgIHsKLSAgICAgICAgbV9zZWdtZW50UmFuZ2VzLmNsZWFyKCk7Ci0gICAgICAg
IHJldHVybiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVz
b2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz46
OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBoYXNTZWdtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbGluZU92
ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiBtX3NlZ21lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgY29u
c3QgU2VnbWVudExpc3QmIHNlZ21lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCho
YXNTZWdtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIG1fc2VnbWVudHM7Ci0gICAgfQotICAgIFNl
Z21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSB7IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7
IH0KLSAgICBjb25zdCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9Ci0gICAgY29uc3QgTGluZVNlZ21lbnQqIGN1cnJlbnRT
ZWdtZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaGFzU2VnbWVudHMoKSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBBU1NFUlQobV9zZWdtZW50UmFuZ2VzLnNpemUoKSA8
IG1fc2VnbWVudHMuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuICZtX3NlZ21lbnRzW21fc2VnbWVu
dFJhbmdlcy5zaXplKCldOwotICAgIH0KLSAgICBib29sIGFkanVzdExvZ2ljYWxMaW5lVG9wKGZs
b2F0IG1pblNlZ21lbnRXaWR0aCk7Ci0KLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJvb2wgdmFs
dWUpIHsgbV9uZWVkc0xheW91dCA9IHZhbHVlOyB9Ci0gICAgYm9vbCBuZWVkc0xheW91dCgpIHsg
cmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgTGF5b3V0
UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKTsg
fQotCi1wcml2YXRlOgotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIpCi0gICAgOiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQmxvY2ssICZS
ZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNs
dWRlZEludGVydmFscz4gKHJlbmRlcmVyKQotICAgICwgbV9uZWVkc0xheW91dChmYWxzZSkKLSAg
ICB7IH0KLQotICAgIFNlZ21lbnRSYW5nZUxpc3QgbV9zZWdtZW50UmFuZ2VzOwotICAgIGJvb2wg
bV9uZWVkc0xheW91dDoxOwotfTsKLQotfQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5Y2NlNWE1NmYxY2E5ZGMwNGM0OTgzMGYyYzg1
Y2Q3ZGRlMmE1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0g
KiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQot
I2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCIKLQotI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1ib29sIEV4Y2x1c2lvblNoYXBlT3V0c2lk
ZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqIGJveCkKLXsKLSAgICBFeGNsdXNp
b25TaGFwZVZhbHVlKiB2YWx1ZSA9IGJveC0+c3R5bGUoKS0+c2hhcGVPdXRzaWRlKCk7Ci0gICAg
cmV0dXJuIGJveC0+aXNGbG9hdGluZ1dpdGhTaGFwZU91dHNpZGUoKSAmJiB2YWx1ZS0+dHlwZSgp
ID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlICYmIHZhbHVlLT5zaGFwZSgpOwotfQotCi1i
b29sIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5
b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCi17Ci0gICAgaWYgKHNoYXBl
U2l6ZURpcnR5KCkgfHwgbV9saW5lVG9wICE9IGxpbmVUb3AgfHwgbV9saW5lSGVpZ2h0ICE9IGxp
bmVIZWlnaHQpIHsKLSAgICAgICAgaWYgKEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCb3gsICZS
ZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEV4Y2x1ZGVkSW50
ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KSkgewot
ICAgICAgICAgICAgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVu
dHNbMF0ubG9naWNhbExlZnQgLSBzaGFwZUxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgICAgICBtX3Jp
Z2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbbV9zZWdtZW50cy5z
aXplKCktMV0ubG9naWNhbFJpZ2h0IC0gc2hhcGVMb2dpY2FsUmlnaHQoKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSAw
OwotICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOwot
ICAgICAgICB9Ci0gICAgICAgIG1fbGluZVRvcCA9IGxpbmVUb3A7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1fc2VnbWVudHMuc2l6ZSgpOwotfQotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjODdhNWM0OGI3YjFmZmNlMjE1NmY4MTc4NzQ2ZjNmMzMyMDc4
NWY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9faAotI2RlZmluZSBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvX2gKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhj
bHVzaW9uU2hhcGVJbmZvLmgiCi0jaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJveDsKLQotY2xhc3MgRXhjbHVzaW9uU2hhcGVPdXRz
aWRlSW5mbyA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5
bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4s
IHB1YmxpYyBNYXBwZWRJbmZvPFJlbmRlckJveCwgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbz4g
ewotcHVibGljOgotICAgIExheW91dFNpemUgc2hhcGVMb2dpY2FsT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gTGF5b3V0U2l6ZShzaGFwZUxvZ2ljYWxMZWZ0KCksIHNoYXBlTG9naWNhbFRvcCgpKTsg
fQotCi0gICAgTGF5b3V0VW5pdCBsZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7IH0KLSAgICBM
YXlvdXRVbml0IHJpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOyB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVu
aXQgbGluZUhlaWdodCkgT1ZFUlJJREU7Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxFeGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVuZGVyZXIp
IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKHJlbmRlcmVy
KSk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94Kik7Ci0K
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxC
b3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS0+c2hh
cGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQotCi1wcml2YXRlOgotICAgIEV4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgOiBFeGNsdXNpb25T
aGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lv
blNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4ocmVuZGVyZXIpIHsgfQotCi0gICAgTGF5b3V0
VW5pdCBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhOwotICAgIExheW91dFVuaXQg
bV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7Ci0gICAgTGF5b3V0VW5pdCBtX2xp
bmVUb3A7Ci19OwotCi19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRTdGF0ZS5jcHAKaW5kZXggMGY2ZDkzY2FiOTUzMmQ0MzczMWMwZDVhYjI0MzMxNWRmMzYy
NWYzMi4uZDllYmQ2NDdhN2Q5NTg1N2QyOGE5YWU5OTZmM2VlYjM0Yzg3ZjkyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCkBAIC00MCw3ICs0MCw3IEBAIExheW91
dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJl
ciwgY29uc3QgTGF5b3V0U2l6CiAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgLCBtX25leHQocHJl
dikKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAsIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKDApCisgICAgLCBtX3NoYXBlSW5zaWRlSW5mbygwKQogI2VuZGlmCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9yZW5kZXJlcihyZW5kZXJlcikKQEAgLTExMyw5ICsxMTMsOSBAQCBMYXlvdXRT
dGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIs
IGNvbnN0IExheW91dFNpegogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlmIChyZW5kZXJl
ci0+aXNSZW5kZXJCbG9jaygpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJC
bG9jayA9IHRvUmVuZGVyQmxvY2socmVuZGVyZXIpOwotICAgICAgICBtX2V4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyA9IHJlbmRlckJsb2NrLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAg
ICAgICAgaWYgKCFtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyAmJiBtX25leHQtPm1fZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvICYmIHJlbmRlckJsb2NrLT5hbGxvd3NFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm9TaGFyaW5nKCkpCi0gICAgICAgICAgICBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byA9IG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUluc2lkZUluZm87CisgICAgICAgIG1fc2hhcGVJ
bnNpZGVJbmZvID0gcmVuZGVyQmxvY2stPnNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICBpZiAo
IW1fc2hhcGVJbnNpZGVJbmZvICYmIG1fbmV4dC0+bV9zaGFwZUluc2lkZUluZm8gJiYgcmVuZGVy
QmxvY2stPmFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkKKyAgICAgICAgICAgIG1fc2hh
cGVJbnNpZGVJbmZvID0gbV9uZXh0LT5tX3NoYXBlSW5zaWRlSW5mbzsKICAgICB9CiAjZW5kaWYK
IApAQCAtMTQ5LDcgKzE0OSw3IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShSZW5kZXJPYmpl
Y3QqIHJvb3QpCiAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgLCBtX25leHQoMCkKICNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKLSAgICAsIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKDApCisgICAg
LCBtX3NoYXBlSW5zaWRlSW5mbygwKQogI2VuZGlmCiAgICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0
KDApCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheW91dFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaApp
bmRleCAyMDFjNmYyZjUwNTczNDk3YjBmNzYwNzQzMWFjZDc2Nzg1MTBhODcyLi5kNzc0OWM1MmM2
MGQ3NTYyMDFhOTgxMzkyZTgzYjViNWMxNzJhMDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotY2xhc3MgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOworY2xhc3MgU2hhcGVJbnNpZGVJ
bmZvOwogI2VuZGlmCiAKIGNsYXNzIExheW91dFN0YXRlIHsKQEAgLTU3LDcgKzU3LDcgQEAgcHVi
bGljOgogICAgICAgICAsIG1fbGluZUdyaWQoMCkKICAgICAgICAgLCBtX25leHQoMCkKICNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgLCBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygw
KQorICAgICAgICAsIG1fc2hhcGVJbnNpZGVJbmZvKDApCiAjZW5kaWYKICAgICAgICAgLCBtX3Bh
Z2VMb2dpY2FsSGVpZ2h0KDApCiAjaWZuZGVmIE5ERUJVRwpAQCAtOTksNyArOTksNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBuZWVkc0Jsb2NrRGlyZWN0aW9uTG9jYXRpb25TZXRCZWZvcmVMYXlvdXQo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVHcmlkIHx8IChtX2lzUGFnaW5hdGVkICYmIG1fcGFnZUxv
Z2ljYWxIZWlnaHQpOyB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOyB9CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFw
ZUluc2lkZUluZm8oKSBjb25zdCB7IHJldHVybiBtX3NoYXBlSW5zaWRlSW5mbzsgfQogI2VuZGlm
CiBwcml2YXRlOgogICAgIC8vIFRoZSBub3JtYWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQu
CkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIFJlbmRlckJsb2NrKiBtX2xpbmVHcmlk
OwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAg
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzsKKyAg
ICBTaGFwZUluc2lkZUluZm8qIG1fc2hhcGVJbnNpZGVJbmZvOwogI2VuZGlmCiAKICAgICAvLyBG
SVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbGF5b3V0IGNsaXAgcmVjdCBhbmQgdGhlIHBh
aW50IGNsaXAgcmVjdCB3aGljaCBtYXkgYmUgbGFyZ2VyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKaW5kZXggODQwYjg2ODcxYWQxZmE3NmQ3ZThkZjRlZThhM2U4NmU5
ZWNmZjkzZi4uZmFiNjlhODNmNmJlNzA1MDE5MTBmZmNhNmZlMzhlNzYxM2E4NzU5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC02NSw4ICs2NSw4IEBACiAj
aW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiCi0jaW5jbHVkZSAiRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5oIgorI2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5mby5oIgorI2lu
Y2x1ZGUgIlNoYXBlT3V0c2lkZUluZm8uaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpAQCAtMzU5LDkgKzM1OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5CiAgICAgUmVuZGVy
U3R5bGUqIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LSAgICAvLyBGSVhNRTogQnVnIDg5OTkzOiBTdHlsZSBjaGFuZ2VzIHNob3VsZCBhZmZlY3QgdGhl
IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb3MgZm9yIG90aGVyIHJlbmRlciBibG9ja3MgdGhhdAot
ICAgIC8vIHNoYXJlIHRoZSBzYW1lIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbwotICAgIHVwZGF0
ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UobmV3U3R5bGUtPnJlc29s
dmVkU2hhcGVJbnNpZGUoKSwgb2xkU3R5bGUgPyBvbGRTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lk
ZSgpIDogMCk7CisgICAgdXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShuZXdT
dHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5yZXNvbHZl
ZFNoYXBlSW5zaWRlKCkgOiAwKTsKICNlbmRpZgogCiAgICAgaWYgKCFpc0Fub255bW91c0Jsb2Nr
KCkpIHsKQEAgLTE0MzcsMTcgKzE0MzUsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkK
IH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFw
ZVZhbHVlKiBzaGFwZUluc2lkZSwgY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVJ
bnNpZGUpCit2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxl
Q2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlLCBjb25zdCBTaGFwZVZhbHVlKiBv
bGRTaGFwZUluc2lkZSkKIHsKICAgICAvLyBGSVhNRTogQSBmdXR1cmUgb3B0aW1pemF0aW9uIHdv
dWxkIGRvIGEgZGVlcCBjb21wYXJpc29uIGZvciBlcXVhbGl0eS4KICAgICBpZiAoc2hhcGVJbnNp
ZGUgPT0gb2xkU2hhcGVJbnNpZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaGFwZUlu
c2lkZSkgewotICAgICAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyA9IGVuc3VyZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgICAgICBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CisgICAgICAgIFNoYXBl
SW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gZW5zdXJlU2hhcGVJbnNpZGVJbmZvKCk7Cisg
ICAgICAgIHNoYXBlSW5zaWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBzZXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8obnVsbHB0cik7CisgICAgICAgIHNl
dFNoYXBlSW5zaWRlSW5mbyhudWxscHRyKTsKICAgICAgICAgbWFya1NoYXBlSW5zaWRlRGVzY2Vu
ZGFudHNGb3JMYXlvdXQoKTsKICAgICB9CiB9CkBAIC0xNDY5LDE2ICsxNDY3LDE2IEBAIHZvaWQg
UmVuZGVyQmxvY2s6Om1hcmtTaGFwZUluc2lkZURlc2NlbmRhbnRzRm9yTGF5b3V0KCkKIH0KICNl
bmRpZgogCi1zdGF0aWMgaW5saW5lIGJvb2wgZXhjbHVzaW9uSW5mb1JlcXVpcmVzUmVsYXlvdXQo
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQorc3RhdGljIGlubGluZSBib29sIHNoYXBlSW5mb1Jl
cXVpcmVzUmVsYXlvdXQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogewogI2lmICFFTkFCTEUo
Q1NTX1NIQVBFUykKICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyogaW5mbyA9IGJsb2NrLT5leGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAg
ICBTaGFwZUluc2lkZUluZm8qIGluZm8gPSBibG9jay0+c2hhcGVJbnNpZGVJbmZvKCk7CiAgICAg
aWYgKGluZm8pCiAgICAgICAgIGluZm8tPnNldE5lZWRzTGF5b3V0KGluZm8tPnNoYXBlU2l6ZURp
cnR5KCkpOwogICAgIGVsc2UKLSAgICAgICAgaW5mbyA9IGJsb2NrLT5sYXlvdXRFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgaW5mbyA9IGJsb2NrLT5sYXlvdXRTaGFwZUluc2lk
ZUluZm8oKTsKICAgICByZXR1cm4gaW5mbyAmJiBpbmZvLT5uZWVkc0xheW91dCgpOwogI2VuZGlm
CiB9CkBAIC0xNDg2LDExICsxNDg0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBleGNsdXNpb25J
bmZvUmVxdWlyZXNSZWxheW91dChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiBib29sIFJlbmRl
ckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0JlZm9yZUNoaWxkTGF5b3V0KFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiB7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAg
aWYgKCFmbG93VGhyZWFkICYmICFleGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSkKKyAgICBpZiAo
IWZsb3dUaHJlYWQgJiYgIXNoYXBlSW5zaWRlSW5mbygpKQogI2Vsc2UKICAgICBpZiAoIWZsb3dU
aHJlYWQpCiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIGV4Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5
b3V0KHRoaXMpOworICAgICAgICByZXR1cm4gc2hhcGVJbmZvUmVxdWlyZXNSZWxheW91dCh0aGlz
KTsKIAogICAgIExheW91dFVuaXQgb2xkSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgIExh
eW91dFVuaXQgb2xkVG9wID0gbG9naWNhbFRvcCgpOwpAQCAtMTUwMSw3ICsxNDk5LDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4Y2x1c2lvbnNCZWZvcmVDaGlsZExheW91
dChSZW5kZXJGbG93VGhyZWFkKgogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKIAogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotICAgIGNvbXB1dGVFeGNsdXNpb25TaGFwZVNpemUoKTsKKyAgICBj
b21wdXRlU2hhcGVTaXplKCk7CiAjZW5kaWYKIAogICAgIC8vIFNldCBvdXIgc3RhcnQgYW5kIGVu
ZCByZWdpb25zLiBObyByZWdpb25zIGFib3ZlIG9yIGJlbG93IHVzIHdpbGwgYmUgY29uc2lkZXJl
ZCBieSBvdXIgY2hpbGRyZW4uIFRoZXkgYXJlCkBAIC0xNTExLDE2ICsxNTA5LDE2IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQo
UmVuZGVyRmxvd1RocmVhZCoKICAgICBzZXRMb2dpY2FsSGVpZ2h0KG9sZEhlaWdodCk7CiAgICAg
c2V0TG9naWNhbFRvcChvbGRUb3ApOwogICAgIAotICAgIHJldHVybiBleGNsdXNpb25JbmZvUmVx
dWlyZXNSZWxheW91dCh0aGlzKTsKKyAgICByZXR1cm4gc2hhcGVJbmZvUmVxdWlyZXNSZWxheW91
dCh0aGlzKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotdm9pZCBSZW5kZXJCbG9jazo6
Y29tcHV0ZUV4Y2x1c2lvblNoYXBlU2l6ZSgpCit2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlU2hh
cGVTaXplKCkKIHsKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyA9IHRoaXMtPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmIChl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8pIHsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5z
aWRlSW5mbyA9IHRoaXMtPnNoYXBlSW5zaWRlSW5mbygpOworICAgIGlmIChzaGFwZUluc2lkZUlu
Zm8pIHsKICAgICAgICAgYm9vbCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29sdmFibGUgPSBw
ZXJjZW50YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJsZUZyb21CbG9jayh0aGlzLCBmYWxzZSk7
Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2V0U2hhcGVTaXplKGxvZ2ljYWxX
aWR0aCgpLCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJlc29sdmFibGUgPyBsb2dpY2FsSGVpZ2h0
KCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICBzaGFwZUluc2lkZUluZm8tPnNldFNoYXBlU2l6
ZShsb2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRSZXNvbHZhYmxlID8gbG9n
aWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTE1Mjks
NyArMTUyNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25z
QWZ0ZXJDaGlsZExheW91dChSZW5kZXJGbG93VGhyZWFkKiBmCiB7CiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCiAgICAgLy8gQSBwcmV2aW91cyBzaWJsaW5nIGhhcyBjaGFuZ2VkIGRpbWVuc2lvbiwg
c28gd2UgbmVlZCB0byByZWxheW91dCB0aGUgc2hhcGUgd2l0aCB0aGUgY29udGVudAotICAgIEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8g
PSBsYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKICAgICBpZiAoaGVpZ2h0Q2hhbmdlZCAmJiBzaGFw
ZUluc2lkZUluZm8pCiAgICAgICAgIHNoYXBlSW5zaWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsK
ICNlbmRpZgpAQCAtNDAyMSwxMCArNDAxOSwxMCBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAg
fQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
byogc2hhcGVPdXRzaWRlID0gby0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgIFNo
YXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG8tPnNoYXBlT3V0c2lkZUluZm8oKTsKICAg
ICBpZiAoc2hhcGVPdXRzaWRlKSB7CiAgICAgICAgIHNoYXBlT3V0c2lkZS0+c2V0U2hhcGVTaXpl
KG8tPmxvZ2ljYWxXaWR0aCgpLCBvLT5sb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICAvLyBUaGUg
Q1NTIEV4Y2x1c2lvbnMgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhlIG1hcmdpbnMgYXJlIGln
bm9yZWQKKyAgICAgICAgLy8gVGhlIENTUyBTaGFwZXMgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQg
dGhlIG1hcmdpbnMgYXJlIGlnbm9yZWQKICAgICAgICAgLy8gd2hlbiBhIGZsb2F0IGhhcyBhIHNo
YXBlIG91dHNpZGUuCiAgICAgICAgIHNldExvZ2ljYWxXaWR0aEZvckZsb2F0KG5ld09iaiwgc2hh
cGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxXaWR0aCgpKTsKICAgICB9IGVsc2UKQEAgLTQxMDIsNyAr
NDEwMCw3IEBAIExheW91dFBvaW50IFJlbmRlckJsb2NrOjpjb21wdXRlTG9naWNhbExvY2F0aW9u
Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsCiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRPZmZzZXQ7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQogICAgIC8vIEZJWE1FIEJ1ZyAxMDI5NDg6IFRoaXMgb25seSB3b3JrcyBm
b3Igc2hhcGUgb3V0c2lkZSBkaXJlY3RseSBzZXQgb24gdGhpcyBibG9jay4KLSAgICBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gdGhpcy0+c2hh
cGVJbnNpZGVJbmZvKCk7CiAgICAgLy8gRklYTUUgQnVnIDEwMjg0NjogVGFrZSBpbnRvIGFjY291
bnQgdGhlIGhlaWdodCBvZiB0aGUgY29udGVudC4gVGhlIG9mZnNldCBzaG91bGQgYmUKICAgICAv
LyBlcXVhbCB0byB0aGUgbWF4aW11bSBzZWdtZW50IGxlbmd0aC4KICAgICBpZiAoc2hhcGVJbnNp
ZGVJbmZvICYmIHNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSAmJiBzaGFwZUluc2lkZUlu
Zm8tPnNlZ21lbnRzKCkuc2l6ZSgpID09IDEpIHsKQEAgLTQyNTcsOCArNDI1NSw4IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKIAogICAgICAgICBzZXRMb2dpY2FsVG9w
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGZsb2F0TG9naWNhbExvY2F0aW9uLnkoKSk7CiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIGlmIChjaGlsZEJveC0+ZXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mbygpKQotICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0
aW5nT2JqZWN0LCBjaGlsZEJveC0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpLT5zaGFwZUxv
Z2ljYWxIZWlnaHQoKSk7CisgICAgICAgIGlmIChjaGlsZEJveC0+c2hhcGVPdXRzaWRlSW5mbygp
KQorICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBj
aGlsZEJveC0+c2hhcGVPdXRzaWRlSW5mbygpLT5zaGFwZUxvZ2ljYWxIZWlnaHQoKSk7CiAgICAg
ICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0LCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGRCb3gpICsgbWFyZ2luQmVm
b3JlRm9yQ2hpbGQoY2hpbGRCb3gpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChjaGlsZEJveCkpOwpA
QCAtNDQ0NCw3ICs0NDQyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRP
ZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW4KICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IGFk
YXB0ZXIubGFzdEZsb2F0KCk7CiAgICAgICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lk
ZUZsb2F0U2hhcGVPZmZzZXQgJiYgbGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICBpZiAoRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gbGFzdEZsb2F0LT5yZW5kZXJlcigp
LT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCkpIHsKKyAgICAgICAgICAgIGlmIChTaGFwZU91
dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0
c2lkZUluZm8oKSkgewogICAgICAgICAgICAgICAgIHNoYXBlT3V0c2lkZS0+Y29tcHV0ZVNlZ21l
bnRzRm9yTGluZShsb2dpY2FsVG9wIC0gbG9naWNhbFRvcEZvckZsb2F0KGxhc3RGbG9hdCkgKyBz
aGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbFRvcCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAg
ICAgICAgICBsZWZ0ICs9IHNoYXBlT3V0c2lkZS0+cmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhKCk7CiAgICAgICAgICAgICB9CkBAIC00NTAyLDcgKzQ1MDAsNyBAQCBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdCogbGFzdEZsb2F0ID0gYWRhcHRlci5sYXN0RmxvYXQoKTsKICAgICAgICAgaWYg
KG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBsYXN0RmxvYXQp
IHsKLSAgICAgICAgICAgIGlmIChFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNp
ZGUgPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKSkg
eworICAgICAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RG
bG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpKSB7CiAgICAgICAgICAgICAgICAg
c2hhcGVPdXRzaWRlLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKGxvZ2ljYWxUb3AgLSBsb2dpY2Fs
VG9wRm9yRmxvYXQobGFzdEZsb2F0KSArIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsVG9wKCks
IGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgICAgIHJpZ2h0RmxvYXRPZmZzZXQgKz0gc2hh
cGVPdXRzaWRlLT5sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSgpOwogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBkY2M2ZDA3MTQw
MDFjNzc4ZDFmY2NjNzhmZDEyNjY2ZjExMTFiNWJhLi5iZDEwYzk4YTU3ODdkYTYwODkzZDExNGYx
Y2VmMGM3NTVmZTM0ZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApA
QCAtMzUsOCArMzUsOCBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmgiCi0j
aW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5m
by5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00NDYsMjggKzQ0NiwyOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
U1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZW5zdXJlRXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKCkKKyAgICBTaGFwZUluc2lkZUluZm8qIGVuc3VyZVNoYXBlSW5zaWRl
SW5mbygpCiAgICAgewogICAgICAgICBpZiAoIW1fcmFyZURhdGEgfHwgIW1fcmFyZURhdGEtPm1f
c2hhcGVJbnNpZGVJbmZvKQotICAgICAgICAgICAgc2V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
KEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6Y3JlYXRlSW5mbyh0aGlzKSk7CisgICAgICAgICAg
ICBzZXRTaGFwZUluc2lkZUluZm8oU2hhcGVJbnNpZGVJbmZvOjpjcmVhdGVJbmZvKHRoaXMpKTsK
ICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvLmdldCgpOwogICAg
IH0KIAotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCkgY29uc3QKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbygpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoIW1fcmFyZURhdGEgfHwgIW1fcmFyZURhdGEtPm1fc2hhcGVJ
bnNpZGVJbmZvKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBFeGNsdXNp
b25TaGFwZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcih0aGlzKSA/IG1fcmFyZURhdGEtPm1fc2hh
cGVJbnNpZGVJbmZvLmdldCgpIDogMDsKKyAgICAgICAgcmV0dXJuIFNoYXBlSW5zaWRlSW5mbzo6
aXNFbmFibGVkRm9yKHRoaXMpID8gbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8uZ2V0KCkg
OiAwOwogICAgIH0KLSAgICB2b2lkIHNldEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhQYXNzT3du
UHRyPEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbz4gdmFsdWUpCisgICAgdm9pZCBzZXRTaGFwZUlu
c2lkZUluZm8oUGFzc093blB0cjxTaGFwZUluc2lkZUluZm8+IHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5l
dyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zaGFw
ZUluc2lkZUluZm8gPSB2YWx1ZTsKICAgICB9CiAgICAgdm9pZCBtYXJrU2hhcGVJbnNpZGVEZXNj
ZW5kYW50c0ZvckxheW91dCgpOwotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogbGF5b3V0
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd3NFeGNsdXNp
b25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkgY29uc3QgeyByZXR1cm4gIWlzSW5saW5lKCkgJiYg
IWlzRmxvYXRpbmcoKTsgfQorICAgIFNoYXBlSW5zaWRlSW5mbyogbGF5b3V0U2hhcGVJbnNpZGVJ
bmZvKCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkgY29u
c3QgeyByZXR1cm4gIWlzSW5saW5lKCkgJiYgIWlzRmxvYXRpbmcoKTsgfQogI2VuZGlmCiAKIHBy
b3RlY3RlZDoKQEAgLTU4Niw4ICs1ODYsOCBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0gICAgdm9pZCBjb21wdXRlRXhjbHVzaW9uU2hhcGVTaXplKCk7
Ci0gICAgdm9pZCB1cGRhdGVFeGNsdXNpb25TaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdl
KGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBv
bGRFeGNsdXNpb25TaGFwZSk7CisgICAgdm9pZCBjb21wdXRlU2hhcGVTaXplKCk7CisgICAgdm9p
ZCB1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUq
LCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZSk7CiAjZW5kaWYKICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsg
fQogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRy
ZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CkBAIC03OTAsNyArNzkwLDcgQEAgcHJp
dmF0ZToKICAgICBMYXlvdXRVbml0IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNv
bnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QKICAgICB7CiAjaWYgRU5BQkxFKENTU19T
SEFQRVMpCi0gICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9
IGNoaWxkLT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCk7CisgICAgICAg
IFNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5zaGFw
ZU91dHNpZGVJbmZvKCk7CiAgICAgICAgIGlmIChzaGFwZU91dHNpZGUpCiAgICAgICAgICAgICBy
ZXR1cm4gY2hpbGQtPngoKTsKICNlbmRpZgpAQCAtODA0LDcgKzgwNCw3IEBAIHByaXZhdGU6CiAg
ICAgTGF5b3V0VW5pdCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
ICAgICAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvICpzaGFwZU91dHNpZGUgPSBjaGlsZC0+
cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICBTaGFwZU91
dHNpZGVJbmZvICpzaGFwZU91dHNpZGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRl
SW5mbygpOwogICAgICAgICBpZiAoc2hhcGVPdXRzaWRlKQogICAgICAgICAgICAgcmV0dXJuIGNo
aWxkLT55KCk7CiAjZW5kaWYKQEAgLTEwODUsOCArMTA4NSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hp
bGQpOwogICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRl
JiwgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0
YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25z
ZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgdm9p
ZCB1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVudExpbmUoRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKiwgTGF5b3V0VW5pdCYsIExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wmKTsKLSAgICBib29s
IGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbyosIExheW91dFVuaXQsIExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlS
ZXNvbHZlciYsIEZsb2F0aW5nT2JqZWN0KiwgSW5saW5lSXRlcmF0b3ImLCBXb3JkTWVhc3VyZW1l
bnRzJik7CisgICAgdm9pZCB1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVudExpbmUoU2hh
cGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCYsIExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wmKTsKKyAg
ICBib29sIGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKFNoYXBl
SW5zaWRlSW5mbyosIExheW91dFVuaXQsIExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNv
bHZlciYsIEZsb2F0aW5nT2JqZWN0KiwgSW5saW5lSXRlcmF0b3ImLCBXb3JkTWVhc3VyZW1lbnRz
Jik7CiAjZW5kaWYKICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91dFJ1bnNB
bmRGbG9hdHNJblJhbmdlKExheW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBu
ZXdMb2dpY2FsSGVpZ2h0LCAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIElubGluZUJpZGlSZXNvbHZlciYsICBjb25zdCBJbmxpbmVJdGVyYXRvciYpOwogICAgIHZv
aWQgbGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYpOwpAQCAtMTI5Myw3ICsx
MjkzLDcgQEAgcHVibGljOgogCiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fbGluZUJyZWFrVG9B
dm9pZFdpZG93OwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBPd25QdHI8RXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvPiBtX3NoYXBlSW5zaWRlSW5mbzsKKyAgICAgICAgT3duUHRyPFNo
YXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CiAjZW5kaWYKICAgICAgICAgYm9vbCBt
X3Nob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93IDogMTsKICAgICAgICAgYm9vbCBtX2Rpc2Nh
cmRNYXJnaW5CZWZvcmUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBjMWIzZGJmYTdmZDY1NDgxMDA4OTYwZWYwNWRl
NzljNTNiYmY1MjIxLi5mMDBlZjk2NDk2OTgyZDIzYjUyZTI2MTYzZTA3M2RjNjVhOWJlMjY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUluZm8uaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNWRykKQEAgLTc3LDE2ICs3NywxNiBAQCBzdGF0aWMgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0Rm9yTGluZShjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wgaXNGaXJzdExp
bgogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1FeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IFJlbmRlckJsb2NrOjpsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKSBjb25zdAorU2hh
cGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCkgY29uc3QK
IHsKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJ
bnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnNoYXBl
SW5zaWRlSW5mbygpOwogCi0gICAgaWYgKCFzaGFwZUluc2lkZUluZm8gJiYgZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpICYmIGFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmco
KSkgeworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYmIGZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSAmJiBhbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpIHsKICAgICAgICAgLy8gcmVn
aW9uQXRCbG9ja09mZnNldCByZXR1cm5zIHJlZ2lvbnMgbGlrZSBhbiBhcnJheSBmaXJzdD17MCxO
LTF9LCBzZWNvbmQ9e04sTS0xfSwgLi4uCiAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbG9n
aWNhbEhlaWdodCgpICsgbG9naWNhbEhlaWdodEZvckxpbmUodGhpcywgZmFsc2UpIC0gTGF5b3V0
VW5pdCgxKTsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zm
c2V0KG9mZnNldCk7CiAgICAgICAgIGlmIChyZWdpb24pCi0gICAgICAgICAgICBzaGFwZUluc2lk
ZUluZm8gPSByZWdpb24tPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICAgICAg
c2hhcGVJbnNpZGVJbmZvID0gcmVnaW9uLT5zaGFwZUluc2lkZUluZm8oKTsKICAgICB9CiAKICAg
ICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvOwpAQCAtMTE0LDkgKzExNCw5IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAg
ICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0g
bV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgICAgIGlmIChl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8pCi0gICAgICAgICAgICBtX3NlZ21lbnQgPSBleGNsdXNp
b25TaGFwZUluc2lkZUluZm8tPmN1cnJlbnRTZWdtZW50KCk7CisgICAgICAgIFNoYXBlSW5zaWRl
SW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7
CisgICAgICAgIGlmIChzaGFwZUluc2lkZUluZm8pCisgICAgICAgICAgICBtX3NlZ21lbnQgPSBz
aGFwZUluc2lkZUluZm8tPmN1cnJlbnRTZWdtZW50KCk7CiAjZW5kaWYKICAgICAgICAgdXBkYXRl
QXZhaWxhYmxlV2lkdGgoKTsKICAgICB9CkBAIC0xOTYsMjEgKzE5NiwyMSBAQCBpbmxpbmUgdm9p
ZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChSZW5k
ZXJCbG9jazo6RmxvYQogICAgIC8vIHdoZW4gd2UgYWRkIGEgc3Vic2VxdWVudCBmbG9hdCBvbiB0
aGUgc2FtZSBsaW5lLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNoYXBlIGRlbHRhIGluIG9yZGVyIHRv
IHBvc2l0aW9uCiAgICAgLy8gYmFzZWQgb24gdGhlIGJvdW5kaW5nIGJveC4gSW4gb3JkZXIgdG8g
ZG8gdGhpcywgd2UgbmVlZCB0byB3YWxrIGJhY2sgdGhyb3VnaCB0aGUgZmxvYXRpbmcgb2JqZWN0
IGxpc3QgdG8gZmluZAogICAgIC8vIHRoZSBmaXJzdCBwcmV2aW91cyBmbG9hdCB0aGF0IGlzIG9u
IHRoZSBzYW1lIHNpZGUgYXMgb3VyIG5ld0Zsb2F0LgotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lk
ZUluZm8qIGxhc3RTaGFwZU91dHNpZGVJbmZvID0gMDsKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBs
YXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CiAgICAgY29uc3QgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2stPm1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICBmb3Ig
KC0taXQ7IGl0ICE9IGJlZ2luOyAtLWl0KSB7CiAgICAgICAgIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCogbGFzdEZsb2F0ID0gKml0OwogICAgICAgICBpZiAobGFzdEZsb2F0ICE9IG5ld0Zs
b2F0ICYmIGxhc3RGbG9hdC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkpIHsKLSAgICAgICAg
ICAgIGxhc3RTaGFwZU91dHNpZGVJbmZvID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvKCk7CisgICAgICAgICAgICBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9
IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAgICAgICAg
aWYgKGxhc3RTaGFwZU91dHNpZGVJbmZvKQogICAgICAgICAgICAgICAgIGxhc3RTaGFwZU91dHNp
ZGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKSAt
IG1fYmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXQpICsgbGFzdFNoYXBlT3V0c2lk
ZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpLCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShtX2Jsb2NrLCBt
X2lzRmlyc3RMaW5lKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9h
dC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpOworICAgIFNoYXBlT3V0
c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVP
dXRzaWRlSW5mbygpOwogICAgIGlmIChzaGFwZU91dHNpZGVJbmZvKQogICAgICAgICBzaGFwZU91
dHNpZGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQo
KSAtIG1fYmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCkgKyBzaGFwZU91dHNpZGVJ
bmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9p
c0ZpcnN0TGluZSkpOwogI2VuZGlmCkBAIC0xMDM3LDEwICsxMDM3LDEwIEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVC
b3gqIGxpbmVCb3gsCiAgICAgdXBkYXRlTG9naWNhbElubGluZVBvc2l0aW9ucyh0aGlzLCBsaW5l
TG9naWNhbExlZnQsIGxpbmVMb2dpY2FsUmlnaHQsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaXNG
aXJzdExpbmUsIHNob3VsZEluZGVudFRleHQsIDApOwogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2lu
ZzsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
bygpOwotICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lkZUluZm8gJiYgZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUlu
c2lkZUluZm8gPSBsYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoc2hhcGVJbnNpZGVJ
bmZvICYmIHNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgewogICAgICAgICBCaWRpUnVu
KiBzZWdtZW50U3RhcnQgPSBmaXJzdFJ1bjsKLSAgICAgICAgY29uc3QgU2VnbWVudExpc3QmIHNl
Z21lbnRzID0gZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOworICAgICAgICBj
b25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMgPSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCk7
CiAgICAgICAgIGZsb2F0IGxvZ2ljYWxMZWZ0ID0gbWF4PGZsb2F0Pihyb3VuZFRvSW50KHNlZ21l
bnRzWzBdLmxvZ2ljYWxMZWZ0KSwgbGluZUxvZ2ljYWxMZWZ0KTsKICAgICAgICAgZmxvYXQgbG9n
aWNhbFJpZ2h0ID0gbWluPGZsb2F0PihmbG9vclRvSW50KHNlZ21lbnRzWzBdLmxvZ2ljYWxSaWdo
dCksIGxpbmVMb2dpY2FsUmlnaHQpOwogICAgICAgICBmbG9hdCBzdGFydExvZ2ljYWxMZWZ0ID0g
bG9naWNhbExlZnQ7CkBAIC0xMzYxLDEzICsxMzYxLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBj
b25zdHJ1Y3RCaWRpUnVuc0ZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBJbmxpbmVC
aWRpCiAgICAgVU5VU0VEX1BBUkFNKGJsb2NrKTsKICAgICBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNl
Z21lbnQodG9wUmVzb2x2ZXIsIGJpZGlSdW5zLCBlbmRPZkxpbmUsIG92ZXJyaWRlLCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkpOwogI2Vsc2UKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGJsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKTsKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyB8fCAhZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CisgICAgU2hhcGVJbnNpZGVJbmZv
KiBzaGFwZUluc2lkZUluZm8gPSBibG9jay0+bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAg
aWYgKCFzaGFwZUluc2lkZUluZm8gfHwgIXNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkg
ewogICAgICAgICBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQodG9wUmVzb2x2ZXIsIGJpZGlS
dW5zLCBlbmRPZkxpbmUsIG92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVu
dFJhbmdlcyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOworICAg
IGNvbnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBzaGFwZUluc2lkZUluZm8t
PnNlZ21lbnRSYW5nZXMoKTsKICAgICBBU1NFUlQoc2VnbWVudFJhbmdlcy5zaXplKCkpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWdtZW50UmFuZ2VzLnNpemUoKTsgaSsrKSB7CkBA
IC0xNjMzLDI2ICsxNjMzLDI2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgZmlyc3RQb3NpdGl2ZVdp
ZHRoKGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBhZGp1c3RMb2dpY2FsTGluZVRvcChF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgSW5saW5l
SXRlcmF0b3Igc3RhcnQsIElubGluZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29yZE1lYXN1cmVtZW50
cyYgd29yZE1lYXN1cmVtZW50cykKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBhZGp1c3RMb2dp
Y2FsTGluZVRvcChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywgSW5saW5lSXRlcmF0
b3Igc3RhcnQsIElubGluZUl0ZXJhdG9yIGVuZCwgY29uc3QgV29yZE1lYXN1cmVtZW50cyYgd29y
ZE1lYXN1cmVtZW50cykKIHsKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyB8fCBl
bmQgIT0gc3RhcnQpCisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8gfHwgZW5kICE9IHN0YXJ0KQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGZsb2F0IG1pbldpZHRoID0gZmlyc3RQb3NpdGl2ZVdp
ZHRoKHdvcmRNZWFzdXJlbWVudHMpOwogICAgIEFTU0VSVChtaW5XaWR0aCB8fCB3b3JkTWVhc3Vy
ZW1lbnRzLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1pbldpZHRoID4gMCAmJiBleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8tPmFkanVzdExvZ2ljYWxMaW5lVG9wKG1pbldpZHRoKSkKLSAgICAgICAgcmV0
dXJuIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVUb3AoKTsKKyAgICBpZiAo
bWluV2lkdGggPiAwICYmIHNoYXBlSW5zaWRlSW5mby0+YWRqdXN0TG9naWNhbExpbmVUb3AobWlu
V2lkdGgpKQorICAgICAgICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvLT5sb2dpY2FsTGluZVRvcCgp
OwogCi0gICAgcmV0dXJuIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsQm90
dG9tKCk7CisgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsQm90dG9tKCk7
CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50
TGluZShFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywg
TGF5b3V0VW5pdCYgYWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBib29sJiBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKQordm9pZCBSZW5kZXJCbG9j
azo6dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKFNoYXBlSW5zaWRlSW5mbyog
c2hhcGVJbnNpZGVJbmZvLCBMYXlvdXRVbml0JiBhYnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wmIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJbnNpZGUp
CiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gdGhpcy0+bG9naWNhbEhlaWdodCgp
OwogICAgIFJlbmRlclJlZ2lvbiogY3VycmVudFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQo
bG9naWNhbEhlaWdodCk7CiAgICAgaWYgKGN1cnJlbnRSZWdpb24pCi0gICAgICAgIGV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOwotICAg
IGlmICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKQorICAgICAgICBzaGFwZUluc2lkZUluZm8g
PSBsYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbykKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0VW5pdCBsaW5lVG9wID0gbG9naWNhbEhlaWdodCAr
IGFic29sdXRlTG9naWNhbFRvcDsKQEAgLTE2NjAsMTggKzE2NjAsMTggQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyoKIAogICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpIHsKICAgICAg
ICAgUmVuZGVyUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChsb2dpY2Fs
SGVpZ2h0ICsgbGluZUhlaWdodCAtIExheW91dFVuaXQoMSkpOwotICAgICAgICBsaW5lVG9wICs9
IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9y
ZSgpOworICAgICAgICBsaW5lVG9wICs9IHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVy
QW5kUGFkZGluZ0JlZm9yZSgpOwogICAgICAgICAvLyBDb250ZW50IGluIGEgZmxvdyB0aHJlYWQg
aXMgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGhyZWFkLCBidXQgdGhlIHNoYXBl
IGNhbGN1bGF0aW9uIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByZWdpb24uCiAg
ICAgICAgIGlmIChjdXJyZW50UmVnaW9uID09IG5leHRSZWdpb24pCiAgICAgICAgICAgICBsaW5l
VG9wIC09IGN1cnJlbnRSZWdpb24tPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpOwog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBCdWcgOTUzNjE6IEl0IGlzIHBvc3NpYmxlIGZvciBhIGxp
bmUgdG8gZ3JvdyBiZXlvbmQgbGluZUhlaWdodCwgaW4gd2hpY2ggY2FzZSB0aGVzZSBzZWdtZW50
cyBtYXkgYmUgaW5jb3JyZWN0LgotICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+Y29tcHV0
ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKKyAgICBzaGFwZUluc2lkZUlu
Zm8tPmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CiAKICAgICAv
LyBUaGUgb3ZlcmZsb3cgc2hvdWxkIGJlIHB1c2hlZCBiZWxvdyB0aGUgY29udGVudCBib3gKLSAg
ICBMYXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLT5zaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpOwotICAgIGlmICghZXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLT5saW5lV2l0aGluU2hhcGVCb3VuZHMoKSAmJiAhbGluZU92ZXJm
bG93c0Zyb21TaGFwZUluc2lkZSAmJiBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCkgeworICAg
IExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgPSBzaGFwZUluc2lkZUluZm8t
PnNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KCk7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8t
PmxpbmVXaXRoaW5TaGFwZUJvdW5kcygpICYmICFsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRl
ICYmIHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7CiAgICAgICAgIGxpbmVPdmVyZmxvd3NG
cm9tU2hhcGVJbnNpZGUgPSB0cnVlOwogICAgICAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWln
aHQgPSBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodDsKIApAQCAtMTY4Myw5ICsxNjgzLDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyoKICAgICAgICAgICAgIG5ld0xvZ2ljYWxIZWlnaHQgPSBs
b2dpY2FsSGVpZ2h0ICsgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQgLSBsaW5lVG9wIC0gY3Vy
cmVudFJlZ2lvbi0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogCiAgICAgICAgICAgICBSZW5k
ZXJSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG5ld0xvZ2ljYWxIZWln
aHQpOwotICAgICAgICAgICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBuZXh0U2hhcGVJbmZv
ID0gMDsKKyAgICAgICAgICAgIFNoYXBlSW5zaWRlSW5mbyogbmV4dFNoYXBlSW5mbyA9IDA7CiAg
ICAgICAgICAgICBpZiAobmV4dFJlZ2lvbikKLSAgICAgICAgICAgICAgICBuZXh0U2hhcGVJbmZv
ID0gbmV4dFJlZ2lvbi0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgICAgICAg
ICAgbmV4dFNoYXBlSW5mbyA9IG5leHRSZWdpb24tPnNoYXBlSW5zaWRlSW5mbygpOwogCiAgICAg
ICAgICAgICAvLyBUaGUgb3ZlcmZsb3cgZmxvd3MgaW50byBhbm90aGVyIHJlZ2lvbiB3aXRoIHNo
YXBlLWluc2lkZQogICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWdpb24gIT0gbmV4dFJlZ2lvbiAm
JiBuZXh0U2hhcGVJbmZvKSB7CkBAIC0xNjk0LDcgKzE2OTQsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojp1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVudExpbmUoRXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKgogICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbmV4dFNoYXBlSW5m
by0+c2hhcGVMb2dpY2FsVG9wKCkgLSBuZXh0UmVnaW9uLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3Jl
KCk7CiAgICAgICAgICAgICAgICAgbmV4dFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGlu
ZShvZmZzZXQsIGxpbmVIZWlnaHQpOwogCi0gICAgICAgICAgICAgICAgZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvID0gbmV4dFNoYXBlSW5mbzsKKyAgICAgICAgICAgICAgICBzaGFwZUluc2lkZUlu
Zm8gPSBuZXh0U2hhcGVJbmZvOwogICAgICAgICAgICAgICAgIGxpbmVPdmVyZmxvd3NGcm9tU2hh
cGVJbnNpZGUgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcwMiw5ICsx
NzAyLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJl
bnRMaW5lKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyoKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVy
QmxvY2s6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKEV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBMYXlvdXRVbml0
IGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5l
QmlkaVJlc29sdmVyJiByZXNvbHZlciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmUsIElubGluZUl0ZXJhdG9yJiBlbmQsIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFz
dXJlbWVudHMpCitib29sIFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2lj
YWxIZWlnaHRJZk5lZWRlZChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbywgTGF5b3V0
VW5pdCBhYnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9t
UHJldmlvdXNMaW5lLCBJbmxpbmVJdGVyYXRvciYgZW5kLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3Jk
TWVhc3VyZW1lbnRzKQogewotICAgIExheW91dFVuaXQgYWRqdXN0ZWRMb2dpY2FsTGluZVRvcCA9
IGFkanVzdExvZ2ljYWxMaW5lVG9wKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgcmVzb2x2ZXIu
cG9zaXRpb24oKSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKTsKKyAgICBMYXlvdXRVbml0IGFkanVz
dGVkTG9naWNhbExpbmVUb3AgPSBhZGp1c3RMb2dpY2FsTGluZVRvcChzaGFwZUluc2lkZUluZm8s
IHJlc29sdmVyLnBvc2l0aW9uKCksIGVuZCwgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgaWYgKCFh
ZGp1c3RlZExvZ2ljYWxMaW5lVG9wKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3MzEs
MTkgKzE3MzEsMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFu
Z2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KIAogI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQogICAgIExheW91dFVuaXQgYWJzb2x1dGVMb2dpY2FsVG9wOwotICAgIEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0RXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKCk7Ci0gICAgaWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykg
ewotICAgICAgICBBU1NFUlQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRo
aXMgfHwgYWxsb3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKTsKLSAgICAgICAg
aWYgKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5leGNsdXNpb25TaGFwZUluc2lk
ZUluZm8oKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gbGF5b3V0
U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5mbykgeworICAgICAgICBB
U1NFUlQoc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzU2hhcGVJbnNp
ZGVJbmZvU2hhcmluZygpKTsKKyAgICAgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAhPSB0aGlzLT5z
aGFwZUluc2lkZUluZm8oKSkgewogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMDI4NDogSWYg
c3Vic2VxdWVudCBMYXlvdXRTdGF0ZXMgYXJlIHB1c2hlZCwgd2Ugd2lsbCBoYXZlIHRvIGFkZAog
ICAgICAgICAgICAgLy8gdGhlaXIgb2Zmc2V0cyBmcm9tIHRoZSBvcmlnaW5hbCBzaGFwZS1pbnNp
ZGUgY29udGFpbmVyLgogICAgICAgICAgICAgYWJzb2x1dGVMb2dpY2FsVG9wID0gbG9naWNhbFRv
cCgpOwogICAgICAgICB9CiAgICAgICAgIC8vIEJlZ2luIGxheW91dCBhdCB0aGUgbG9naWNhbCB0
b3Agb2Ygb3VyIHNoYXBlIGluc2lkZS4KLSAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQoKSArIGFi
c29sdXRlTG9naWNhbFRvcCA8IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2Fs
VG9wKCkpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby0+c2hhcGVMb2dpY2FsVG9wKCkgLSBhYnNvbHV0ZUxvZ2ljYWxUb3A7
CisgICAgICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgKyBhYnNvbHV0ZUxvZ2ljYWxUb3AgPCBzaGFw
ZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQgPSBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpIC0gYWJz
b2x1dGVMb2dpY2FsVG9wOwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQo
KSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IGV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworICAgICAgICAgICAgICAg
IGxvZ2ljYWxIZWlnaHQgLT0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRk
aW5nQmVmb3JlKCk7CiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTc3MSw3ICsxNzcxLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0
ZSwgSW5saW4KICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUgPSAoY29udGFpbnNGbG9hdHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgp
IDogMDsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICB1cGRhdGVTaGFwZUFuZFNl
Z21lbnRzRm9yQ3VycmVudExpbmUoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0ZUxv
Z2ljYWxUb3AsIGxheW91dFN0YXRlLCBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKTsKKyAg
ICAgICAgdXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKHNoYXBlSW5zaWRlSW5m
bywgYWJzb2x1dGVMb2dpY2FsVG9wLCBsYXlvdXRTdGF0ZSwgbGluZU92ZXJmbG93c0Zyb21TaGFw
ZUluc2lkZSk7CiAjZW5kaWYKICAgICAgICAgV29yZE1lYXN1cmVtZW50cyB3b3JkTWVhc3VyZW1l
bnRzOwogICAgICAgICBlbmQgPSBsaW5lQnJlYWtlci5uZXh0TGluZUJyZWFrKHJlc29sdmVyLCBs
YXlvdXRTdGF0ZS5saW5lSW5mbygpLCByZW5kZXJUZXh0SW5mbywgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFzdXJlbWVudHMpOwpA
QCAtMTc4Nyw3ICsxNzg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0
c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICAgICAgICAgfQog
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIGlmIChhZGp1c3RMb2dpY2FsTGluZVRv
cEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIGFic29s
dXRlTG9naWNhbFRvcCwgbGF5b3V0U3RhdGUsIHJlc29sdmVyLCBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lLCBlbmQsIHdvcmRNZWFzdXJlbWVudHMpKQorICAgICAgICBpZiAoYWRqdXN0TG9naWNh
bExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoc2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0
ZUxvZ2ljYWxUb3AsIGxheW91dFN0YXRlLCByZXNvbHZlciwgbGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2Vu
ZGlmCiAgICAgICAgIEFTU0VSVChlbmQgIT0gcmVzb2x2ZXIucG9zaXRpb24oKSk7CkBAIC0yNzQx
LDI5ICsyNzQxLDI5IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6
bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAjaWYgIUVOQUJMRShDU1Nf
U0hBUEVTKQogICAgIHJldHVybiBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywg
cmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlw
aGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKICNlbHNlCi0gICAgRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRF
eGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5z
aWRlSW5mbyA9IG1fYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogCi0gICAgaWYgKCFl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+bGlu
ZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkKKyAgICBpZiAoIXNoYXBlSW5zaWRlSW5mbyB8fCAhc2hh
cGVJbnNpZGVJbmZvLT5saW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKQogICAgICAgICByZXR1cm4g
bmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRleHRJbmZvLCBsYXN0
RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgd29yZE1l
YXN1cmVtZW50cyk7CiAKICAgICAvLyBJbiBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSB3ZSBo
YXZlIHRvIHVzZSBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpIHRvIGRldGVybWluZSB0aGUgbGlu
ZSBzZWdtZW50cyBzaW5jZSBzaGFwZS1vdXRzaWRlJ3MgY29kZXBhdGhzIHVzZXMgdGhlIHNhbWUg
Y29kZSB0byBkZXRlcm1pbmUgaXRzIHNlZ21lbnRzLiBUaGUgbGluZSBjb250YWluaW5nIGlzIG5v
dCBhIHJlcXVpcmVtZW50IGZvciBzaGFwZS1vdXRzaWRlLAogICAgIC8vIHNvIGluIHRoaXMgY2Fz
ZSB3ZSBjYW4gZW5kIHVwIHdpdGggc29tZSBleHRyYSBzZWdtZW50cyBmb3IgdGhlIG92ZXJmbG93
aW5nIGNvbnRlbnQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFwcGx5IHRoZSBzZWdtZW50cyBmb3Ig
dGhlIG92ZXJmbG93aW5nIGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gcmVzZXQgaXQuCi0gICAgaWYg
KCFtX2Jsb2NrLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgJiYgIWV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mby0+bGluZVdpdGhpblNoYXBlQm91bmRzKCkpIHsKLSAgICAgICAgZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvLT5jbGVhclNlZ21lbnRzKCk7CisgICAgaWYgKCFtX2Jsb2NrLT5mbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgJiYgIXNoYXBlSW5zaWRlSW5mby0+bGluZVdpdGhpblNo
YXBlQm91bmRzKCkpIHsKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5jbGVhclNlZ21lbnRzKCk7
CiAgICAgICAgIHJldHVybiBuZXh0U2VnbWVudEJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywgcmVu
ZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVu
YXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKICAgICB9CiAKICAgICBJbmxpbmVJdGVyYXRv
ciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwogICAgIElubGluZUl0ZXJhdG9yIG9sZEVuZCA9
IGVuZDsKIAotICAgIGlmICghZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygp
KSB7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAgICAgICAg
ZW5kID0gbmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRlclRleHRJbmZv
LCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywg
d29yZE1lYXN1cmVtZW50cyk7CiAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhvbGRFbmQpOwogICAgICAgICByZXR1cm4gb2xkRW5kOwogICAgIH0KIAot
ICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdtZW50cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by0+c2VnbWVudHMoKTsKLSAgICBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50UmFuZ2VzKCk7CisgICAgY29uc3QgU2VnbWVu
dExpc3QmIHNlZ21lbnRzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOworICAgIFNlZ21l
bnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMgPSBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5n
ZXMoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWdtZW50cy5zaXplKCkgJiYg
IWVuZC5hdEVuZCgpOyBpKyspIHsKICAgICAgICAgSW5saW5lSXRlcmF0b3Igc2VnbWVudFN0YXJ0
ID0gcmVzb2x2ZXIucG9zaXRpb24oKTsKQEAgLTM0MTAsNyArMzQxMCw3IEBAIElubGluZUl0ZXJh
dG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCcmVhayhJbmxpbmVCaWRp
UmVzb2x2ZXImIHJlCiAKICBlbmQ6CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5mbyA9IG1fYmxv
Y2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAgIGJvb2wgc2VnbWVudEFsbG93c092ZXJm
bG93ID0gIXNoYXBlSW5mbyB8fCAhc2hhcGVJbmZvLT5oYXNTZWdtZW50cygpOwogI2Vsc2UKICAg
ICBib29sIHNlZ21lbnRBbGxvd3NPdmVyZmxvdyA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCmluZGV4IDMwOGJiODkxM2NlNjFhMDQxZTI3MDZhOGE2YWIzODE2YjI5
MzM3Y2UuLjRmNGE1MmUzNmY0MmU5Nzk1YjRkYmUyMzU5Y2ZlYWEyY2Q2OWYyYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNl
bnRIZWlnaHREZXNjZW5kYW50SWZOZWVkZWQodGhpcyk7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOworICAg
IFNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CiAjZW5kaWYKIAogICAgIFJlbmRl
ckJveE1vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTMxMiwyMiArMzEyLDIyIEBA
IHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0gICAgdXBkYXRlRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2Uoc3R5
bGUoKS0+c2hhcGVPdXRzaWRlKCksIG9sZFN0eWxlID8gb2xkU3R5bGUtPnNoYXBlT3V0c2lkZSgp
IDogMCk7CisgICAgdXBkYXRlU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2Uoc3R5bGUo
KS0+c2hhcGVPdXRzaWRlKCksIG9sZFN0eWxlID8gb2xkU3R5bGUtPnNoYXBlT3V0c2lkZSgpIDog
MCk7CiAjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotdm9pZCBSZW5kZXJCb3g6
OnVwZGF0ZUV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IEV4
Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwgY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1
ZSogb2xkU2hhcGVPdXRzaWRlKQordm9pZCBSZW5kZXJCb3g6OnVwZGF0ZVNoYXBlT3V0c2lkZUlu
Zm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSwgY29uc3Qg
U2hhcGVWYWx1ZSogb2xkU2hhcGVPdXRzaWRlKQogewogICAgIC8vIEZJWE1FOiBBIGZ1dHVyZSBv
cHRpbWl6YXRpb24gd291bGQgZG8gYSBkZWVwIGNvbXBhcmlzb24gZm9yIGVxdWFsaXR5LiAoYnVn
IDEwMDgxMSkKICAgICBpZiAoc2hhcGVPdXRzaWRlID09IG9sZFNoYXBlT3V0c2lkZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKHNoYXBlT3V0c2lkZSkgewotICAgICAgICBFeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvKiBleGNsdXNpb25TaGFwZU91dHNpZGVJbmZvID0gRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbzo6ZW5zdXJlSW5mbyh0aGlzKTsKLSAgICAgICAgZXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby0+ZGlydHlTaGFwZVNpemUoKTsKKyAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyog
c2hhcGVPdXRzaWRlSW5mbyA9IFNoYXBlT3V0c2lkZUluZm86OmVuc3VyZUluZm8odGhpcyk7Cisg
ICAgICAgIHNoYXBlT3V0c2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CisgICAg
ICAgIFNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDQ1MGU3YzBkNWRiMGIzOGFiMzgxNTkw
Zjk5NzA5YmNlNmY1Zjc4NTIuLmQyMjgyZTgzOTMwOGNmNjRkMGI4NmE3NzAwYjdkMTViZjNiNWZi
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTI3LDcgKzI3LDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJPdmVyZmxvdy5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAj
aWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
by5oIgorI2luY2x1ZGUgIlNoYXBlT3V0c2lkZUluZm8uaCIKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC01NzYsOSArNTc2LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2FtZURp
cmVjdGlvbkFzKGNvbnN0IFJlbmRlckJveCogb2JqZWN0KSBjb25zdCB7IHJldHVybiBzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBvYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpOyB9CiAKICNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBleGNsdXNp
b25TaGFwZU91dHNpZGVJbmZvKCkgY29uc3QKKyAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91
dHNpZGVJbmZvKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0Zsb2F0aW5nV2l0aFNo
YXBlT3V0c2lkZSgpICYmIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcih0
aGlzKSA/IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmluZm8odGhpcykgOiAwOworICAgICAg
ICByZXR1cm4gaXNGbG9hdGluZ1dpdGhTaGFwZU91dHNpZGUoKSAmJiBTaGFwZU91dHNpZGVJbmZv
Ojppc0VuYWJsZWRGb3IodGhpcykgPyBTaGFwZU91dHNpZGVJbmZvOjppbmZvKHRoaXMpIDogMDsK
ICAgICB9CiAjZW5kaWYKIApAQCAtNjIzLDcgKzYyMyw3IEBAIHByb3RlY3RlZDoKICAKIHByaXZh
dGU6CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgdm9pZCB1cGRhdGVFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBz
aGFwZU91dHNpZGUsIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqIG9sZFNoYXBlT3V0c2lkZSk7
CisgICAgdm9pZCB1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBT
aGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNvbnN0IFNoYXBlVmFsdWUqIG9sZFNoYXBlT3V0c2lk
ZSk7CiAjZW5kaWYKIAogICAgIGJvb2wgZml4ZWRFbGVtZW50TGF5c091dFJlbGF0aXZlVG9GcmFt
ZShGcmFtZSosIEZyYW1lVmlldyopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNTFhMTdiY2I5NmE3YjZkMTM2ZmZm
ODdjNjM1YmE5YTU0MDBkZDY5MC4uYzZiYmRhMjAxZjdmZTAxMjAzZDJmZDQyZGUzZWQ4NGJiNTM1
ZTU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCkBAIC02MjYsNyArNjI2LDcgQEAgTGF5b3V0U2l6ZSBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnRPZmZzZXQoKSBjb25zdAogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAg
aWYgKGlzQm94KCkgJiYgaXNGbG9hdGluZygpKQotICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gdG9SZW5kZXJCb3godGhpcyktPmV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8oKSkKKyAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0
c2lkZSA9IHRvUmVuZGVyQm94KHRoaXMpLT5zaGFwZU91dHNpZGVJbmZvKCkpCiAgICAgICAgICAg
ICBvZmZzZXQgLT0gc2hhcGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxPZmZzZXQoKTsKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCA5OGQ5N2MyNTg5Y2MwMDBh
NzY3ZDI3ZjVkOTBiN2NiOGQyNzRhMTRhLi44NGMyYWIxMDgxMWUwYzI0MWI5YzA5ZTBiMGYyYTJh
ZDUxMWQ2MGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTI0OSw4
ICsyNDksOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFpbnQoKSB8fCBt
X2xheW91dFN0YXRlLT5pc1BhZ2luYXRlZCgpIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwg
cmVuZGVyZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKQogICAgICAgICAgICAgfHwgbV9s
YXlvdXRTdGF0ZS0+bGluZUdyaWQoKSB8fCAocmVuZGVyZXItPnN0eWxlKCktPmxpbmVHcmlkKCkg
IT0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lR3JpZCgpICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxv
dygpKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICAgICAgfHwgKHJlbmRlcmVyLT5p
c1JlbmRlckJsb2NrKCkgJiYgdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbygpKQotICAgICAgICAgICAgfHwgKG1fbGF5b3V0U3RhdGUtPmV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbygpICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXRvUmVuZGVy
QmxvY2socmVuZGVyZXIpLT5hbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkp
CisgICAgICAgICAgICB8fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiB0b1JlbmRlckJs
b2NrKHJlbmRlcmVyKS0+c2hhcGVJbnNpZGVJbmZvKCkpCisgICAgICAgICAgICB8fCAobV9sYXlv
dXRTdGF0ZS0+c2hhcGVJbnNpZGVJbmZvKCkgJiYgcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAm
JiAhdG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJpbmco
KSkKICNlbmRpZgogICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICBwdXNoTGF5b3V0U3RhdGVG
b3JDdXJyZW50Rmxvd1RocmVhZChyZW5kZXJlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxMjRmZDU2MDczMzU2
M2I0YTBjODc4YTM4NmZkNDQwY2E1MjgzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcApAQCAtMCwwICsxLDUxMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKKwor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51
bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7CisgICAgTm9ybWFsLAorICAgIFZlcnRleE1pblksCisg
ICAgVmVydGV4TWF4WSwKKyAgICBWZXJ0ZXhZQm90aAorfTsKKworc3RydWN0IEVkZ2VJbnRlcnNl
Y3Rpb24geworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2U7CisgICAgRmxvYXRQb2lu
dCBwb2ludDsKKyAgICBFZGdlSW50ZXJzZWN0aW9uVHlwZSB0eXBlOworfTsKKworc3RhdGljIGlu
bGluZSBmbG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9h
dFBvaW50JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4g
KChwb2ludC54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAodmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKSkp
IC0gKCh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEueCgpKSAqIChwb2ludC55KCkgLSB2ZXJ0ZXgxLnko
KSkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWZsZXhWZXJ0ZXgoY29uc3QgRmxvYXRQ
b2ludCYgcHJldlZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4LCBjb25zdCBGbG9hdFBv
aW50JiBuZXh0VmVydGV4KQoreworICAgIHJldHVybiBsZWZ0U2lkZShwcmV2VmVydGV4LCBuZXh0
VmVydGV4LCB2ZXJ0ZXgpIDwgMDsKK30KKworc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRlcnNlY3Rp
b24oY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZVBvaW50ZXIsIGZsb2F0IHksIEVkZ2VJbnRl
cnNlY3Rpb24mIHJlc3VsdCkKK3sKKyAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0g
KmVkZ2VQb2ludGVyOworCisgICAgaWYgKGVkZ2UubWluWSgpID4geSB8fCBlZGdlLm1heFkoKSA8
IHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRl
eDEgPSBlZGdlLnZlcnRleDEoKTsKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRn
ZS52ZXJ0ZXgyKCk7CisgICAgZmxvYXQgZHkgPSB2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpOwor
CisgICAgZmxvYXQgaW50ZXJzZWN0aW9uWDsKKyAgICBFZGdlSW50ZXJzZWN0aW9uVHlwZSBpbnRl
cnNlY3Rpb25UeXBlOworCisgICAgaWYgKCFkeSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBl
ID0gVmVydGV4WUJvdGg7CisgICAgICAgIGludGVyc2VjdGlvblggPSBlZGdlLm1pblgoKTsKKyAg
ICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5taW5ZKCkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlw
ZSA9IFZlcnRleE1pblk7CisgICAgICAgIGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPCB2
ZXJ0ZXgyLnkoKSkgPyB2ZXJ0ZXgxLngoKSA6IHZlcnRleDIueCgpOworICAgIH0gZWxzZSBpZiAo
eSA9PSBlZGdlLm1heFkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWF4
WTsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA+IHZlcnRleDIueSgpKSA/
IHZlcnRleDEueCgpIDogdmVydGV4Mi54KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJz
ZWN0aW9uVHlwZSA9IE5vcm1hbDsKKyAgICAgICAgaW50ZXJzZWN0aW9uWCA9ICgoeSAtIHZlcnRl
eDEueSgpKSAqICh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEueCgpKSAvIGR5KSArIHZlcnRleDEueCgp
OworICAgIH0KKworICAgIHJlc3VsdC5lZGdlID0gZWRnZVBvaW50ZXI7CisgICAgcmVzdWx0LnR5
cGUgPSBpbnRlcnNlY3Rpb25UeXBlOworICAgIHJlc3VsdC5wb2ludC5zZXQoaW50ZXJzZWN0aW9u
WCwgeSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFNpemUg
aW53YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlKQoreworICAgIEZs
b2F0U2l6ZSBlZGdlRGVsdGEgPSBlZGdlLnZlcnRleDIoKSAtIGVkZ2UudmVydGV4MSgpOworICAg
IGlmICghZWRnZURlbHRhLndpZHRoKCkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKGVkZ2VE
ZWx0YS5oZWlnaHQoKSA+IDAgPyAtMSA6IDEpLCAwKTsKKyAgICBpZiAoIWVkZ2VEZWx0YS5oZWln
aHQoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgwLCAoZWRnZURlbHRhLndpZHRoKCkgPiAw
ID8gMSA6IC0xKSk7CisgICAgZmxvYXQgZWRnZUxlbmd0aCA9IGVkZ2VEZWx0YS5kaWFnb25hbExl
bmd0aCgpOworICAgIHJldHVybiBGbG9hdFNpemUoLWVkZ2VEZWx0YS5oZWlnaHQoKSAvIGVkZ2VM
ZW5ndGgsIGVkZ2VEZWx0YS53aWR0aCgpIC8gZWRnZUxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgRmxvYXRTaXplIG91dHdhcmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVk
Z2UpCit7CisgICAgcmV0dXJuIC1pbndhcmRFZGdlTm9ybWFsKGVkZ2UpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgYXBwZW5kQXJjKFZlY3RvcjxGbG9hdFBvaW50PiYgdmVydGljZXMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFyY0NlbnRlciwgZmxvYXQgYXJjUmFkaXVzLCBjb25zdCBGbG9hdFBvaW50
JiBzdGFydEFyY1ZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYgZW5kQXJjVmVydGV4LCBib29sIHBh
ZGRpbmcpCit7CisgICAgZmxvYXQgc3RhcnRBbmdsZSA9IGF0YW4yKHN0YXJ0QXJjVmVydGV4Lnko
KSAtIGFyY0NlbnRlci55KCksIHN0YXJ0QXJjVmVydGV4LngoKSAtIGFyY0NlbnRlci54KCkpOwor
ICAgIGZsb2F0IGVuZEFuZ2xlID0gYXRhbjIoZW5kQXJjVmVydGV4LnkoKSAtIGFyY0NlbnRlci55
KCksIGVuZEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKKyAgICBjb25zdCBmbG9hdCB0
d29QSSA9IHBpRmxvYXQgKiAyOworICAgIGlmIChzdGFydEFuZ2xlIDwgMCkKKyAgICAgICAgc3Rh
cnRBbmdsZSArPSB0d29QSTsKKyAgICBpZiAoZW5kQW5nbGUgPCAwKQorICAgICAgICBlbmRBbmds
ZSArPSB0d29QSTsKKyAgICBmbG9hdCBhbmdsZSA9IChzdGFydEFuZ2xlID4gZW5kQW5nbGUpID8g
KHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgOiAoc3RhcnRBbmdsZSArIHR3b1BJIC0gZW5kQW5nbGUp
OworICAgIGNvbnN0IGZsb2F0IGFyY1NlZ21lbnRDb3VudCA9IDY7IC8vIEFuIGV2ZW4gbnVtYmVy
IHNvIHRoYXQgb25lIGFyYyB2ZXJ0ZXggd2lsbCBiZSBlYWN0bHkgYXJjUmFkaXVzIGZyb20gYXJj
Q2VudGVyLgorICAgIGZsb2F0IGFyY1NlZ21lbnRBbmdsZSA9ICAoKHBhZGRpbmcpID8gLWFuZ2xl
IDogdHdvUEkgLSBhbmdsZSkgLyBhcmNTZWdtZW50Q291bnQ7CisKKyAgICB2ZXJ0aWNlcy5hcHBl
bmQoc3RhcnRBcmNWZXJ0ZXgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcmNTZWdt
ZW50Q291bnQ7ICsraSkgeworICAgICAgICBmbG9hdCBhbmdsZSA9IHN0YXJ0QW5nbGUgKyBhcmNT
ZWdtZW50QW5nbGUgKiBpOworICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQoYXJjQ2VudGVyICsgRmxv
YXRQb2ludChjb3MoYW5nbGUpICogYXJjUmFkaXVzLCBzaW4oYW5nbGUpICogYXJjUmFkaXVzKSk7
CisgICAgfQorICAgIHZlcnRpY2VzLmFwcGVuZChlbmRBcmNWZXJ0ZXgpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZChWZWN0b3I8RmxvYXRQb2lu
dD4mIHZlcnRpY2VzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgdmVydGljZXNbaV0uc2V0KExheW91dFVuaXQodmVydGljZXNb
aV0ueCgpKS50b0Zsb2F0KCksIExheW91dFVuaXQodmVydGljZXNbaV0ueSgpKS50b0Zsb2F0KCkp
OworfQorCitzdGF0aWMgaW5saW5lIFBhc3NPd25QdHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hh
cGVQYWRkaW5nQm91bmRzKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgcGFkZGlu
ZywgV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+
IHBhZGRlZFZlcnRpY2VzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGbG9hdFBvaW50PigpKTsKKyAg
ICBGbG9hdFBvaW50IGludGVyc2VjdGlvbjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwb2x5Z29uLm51bWJlck9mRWRnZXMoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9s
eWdvbkVkZ2UmIHRoaXNFZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7CisgICAgICAgIGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UmIHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlvdXNFZGdlKCk7CisgICAg
ICAgIE9mZnNldFBvbHlnb25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNFZGdlLCBpbndhcmRFZGdl
Tm9ybWFsKHRoaXNFZGdlKSAqIHBhZGRpbmcpOworICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSBw
cmV2T2Zmc2V0RWRnZShwcmV2RWRnZSwgaW53YXJkRWRnZU5vcm1hbChwcmV2RWRnZSkgKiBwYWRk
aW5nKTsKKworICAgICAgICBpZiAocHJldk9mZnNldEVkZ2UuaW50ZXJzZWN0aW9uKHRoaXNPZmZz
ZXRFZGdlLCBpbnRlcnNlY3Rpb24pKQorICAgICAgICAgICAgcGFkZGVkVmVydGljZXMtPmFwcGVu
ZChpbnRlcnNlY3Rpb24pOworICAgICAgICBlbHNlIGlmIChpc1JlZmxleFZlcnRleChwcmV2RWRn
ZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDEoKSwgdGhpc0VkZ2UudmVydGV4MigpKSkKKyAg
ICAgICAgICAgIGFwcGVuZEFyYygqcGFkZGVkVmVydGljZXMsIHRoaXNFZGdlLnZlcnRleDEoKSwg
cGFkZGluZywgcHJldk9mZnNldEVkZ2UudmVydGV4MigpLCB0aGlzT2Zmc2V0RWRnZS52ZXJ0ZXgx
KCksIHRydWUpOworICAgIH0KKworICAgIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoKnBh
ZGRlZFZlcnRpY2VzKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZsb2F0UG9seWdvbihwYWRk
ZWRWZXJ0aWNlcy5yZWxlYXNlKCksIGZpbGxSdWxlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUGFz
c093blB0cjxGbG9hdFBvbHlnb24+IGNvbXB1dGVTaGFwZU1hcmdpbkJvdW5kcyhjb25zdCBGbG9h
dFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1hcmdpbiwgV2luZFJ1bGUgZmlsbFJ1bGUpCit7Cisg
ICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IG1hcmdpblZlcnRpY2VzID0gYWRvcHRQdHIo
bmV3IFZlY3RvcjxGbG9hdFBvaW50PigpKTsKKyAgICBGbG9hdFBvaW50IGludGVyc2VjdGlvbjsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51bWJlck9mRWRnZXMoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gcG9seWdv
bi5lZGdlQXQoaSk7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZFZGdlID0g
dGhpc0VkZ2UucHJldmlvdXNFZGdlKCk7CisgICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHRoaXNP
ZmZzZXRFZGdlKHRoaXNFZGdlLCBvdXR3YXJkRWRnZU5vcm1hbCh0aGlzRWRnZSkgKiBtYXJnaW4p
OworICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShwcmV2RWRnZSwgb3V0
d2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogbWFyZ2luKTsKKworICAgICAgICBpZiAocHJldk9m
ZnNldEVkZ2UuaW50ZXJzZWN0aW9uKHRoaXNPZmZzZXRFZGdlLCBpbnRlcnNlY3Rpb24pKQorICAg
ICAgICAgICAgbWFyZ2luVmVydGljZXMtPmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBhcHBlbmRBcmMoKm1hcmdpblZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0
ZXgxKCksIG1hcmdpbiwgcHJldk9mZnNldEVkZ2UudmVydGV4MigpLCB0aGlzT2Zmc2V0RWRnZS52
ZXJ0ZXgxKCksIGZhbHNlKTsKKyAgICB9CisKKyAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRH
cmlkKCptYXJnaW5WZXJ0aWNlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHln
b24obWFyZ2luVmVydGljZXMucmVsZWFzZSgpLCBmaWxsUnVsZSkpOworfQorCitjb25zdCBGbG9h
dFBvbHlnb24mIFBvbHlnb25TaGFwZTo6c2hhcGVQYWRkaW5nQm91bmRzKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoc2hhcGVQYWRkaW5nKCkgPj0gMCk7CisgICAgaWYgKCFzaGFwZVBhZGRpbmcoKSkK
KyAgICAgICAgcmV0dXJuIG1fcG9seWdvbjsKKworICAgIGlmICghbV9wYWRkaW5nQm91bmRzKQor
ICAgICAgICBtX3BhZGRpbmdCb3VuZHMgPSBjb21wdXRlU2hhcGVQYWRkaW5nQm91bmRzKG1fcG9s
eWdvbiwgc2hhcGVQYWRkaW5nKCksIG1fcG9seWdvbi5maWxsUnVsZSgpKTsKKworICAgIHJldHVy
biAqbV9wYWRkaW5nQm91bmRzOworfQorCitjb25zdCBGbG9hdFBvbHlnb24mIFBvbHlnb25TaGFw
ZTo6c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAoreworICAgIEFTU0VSVChzaGFwZU1hcmdpbigp
ID49IDApOworICAgIGlmICghc2hhcGVNYXJnaW4oKSkKKyAgICAgICAgcmV0dXJuIG1fcG9seWdv
bjsKKworICAgIGlmICghbV9tYXJnaW5Cb3VuZHMpCisgICAgICAgIG1fbWFyZ2luQm91bmRzID0g
Y29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKG1fcG9seWdvbiwgc2hhcGVNYXJnaW4oKSwgbV9wb2x5
Z29uLmZpbGxSdWxlKCkpOworCisgICAgcmV0dXJuICptX21hcmdpbkJvdW5kczsKK30KKworc3Rh
dGljIGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVkZ2VJ
bnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbiwgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgRmxvYXRQ
b2ludCYgdGhpc1ZlcnRleCwgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKK3sKKyAgICBpZiAoaW50
ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWluWSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0
ZXhNYXhZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoaW50ZXJzZWN0aW9u
LmVkZ2UgJiYgaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3QgRmxvYXRQ
b2x5Z29uJiBwb2x5Z29uID0gKihpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKKyAgICBj
b25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICooaW50ZXJzZWN0aW9uLmVkZ2UpOwor
CisgICAgaWYgKChpbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZICYmICh0aGlzRWRnZS52
ZXJ0ZXgxKCkueSgpIDwgdGhpc0VkZ2UudmVydGV4MigpLnkoKSkpCisgICAgICAgIHx8IChpbnRl
cnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpID4g
dGhpc0VkZ2UudmVydGV4MigpLnkoKSkpKSB7CisgICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29u
LnZlcnRleEF0KHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpLnZlcnRleEluZGV4MSgpKTsKKyAgICAg
ICAgdGhpc1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkp
OworICAgICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJ
bmRleDIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJldlZlcnRleCA9IHBvbHlnb24udmVy
dGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkpOworICAgICAgICB0aGlzVmVydGV4ID0gcG9s
eWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDIoKSk7CisgICAgICAgIG5leHRWZXJ0
ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLm5leHRFZGdlKCkudmVydGV4SW5kZXgyKCkp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXBw
ZW5kSW50ZXJ2YWxYKGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4m
IHJlc3VsdCkKK3sKKyAgICBpZiAoIWluc2lkZSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChTaGFw
ZUludGVydmFsKHgpKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0g
MV0ueDIgPSB4OworCisgICAgcmV0dXJuICFpbnNpZGU7Cit9CisKK3N0YXRpYyBib29sIGNvbXBh
cmVFZGdlSW50ZXJzZWN0aW9uWChjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24x
LCBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24yKQoreworICAgIGZsb2F0IHgx
ID0gaW50ZXJzZWN0aW9uMS5wb2ludC54KCk7CisgICAgZmxvYXQgeDIgPSBpbnRlcnNlY3Rpb24y
LnBvaW50LngoKTsKKyAgICByZXR1cm4gKHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8
IGludGVyc2VjdGlvbjIudHlwZSA6IHgxIDwgeDI7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVY
SW50ZXJzZWN0aW9ucyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHksIGJvb2wg
aXNNaW5ZLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8Y29u
c3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGlu
Z0VkZ2VzKHksIHksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPEVkZ2VJ
bnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7CisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNl
Y3Rpb247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tpXSwgeSwgaW50ZXJzZWN0
aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKKyAgICAgICAgICAgIGlu
dGVyc2VjdGlvbnMuYXBwZW5kKGludGVyc2VjdGlvbik7CisgICAgfQorCisgICAgaWYgKGludGVy
c2VjdGlvbnMuc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzb3J0KGlu
dGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50ZXJzZWN0aW9ucy5lbmQoKSwgV2ViQ29yZTo6Y29tcGFy
ZUVkZ2VJbnRlcnNlY3Rpb25YKTsKKworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICBpbnQg
d2luZENvdW50ID0gMDsKKyAgICBib29sIGluc2lkZSA9IGZhbHNlOworCisgICAgd2hpbGUgKGlu
ZGV4IDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgY29uc3QgRWRnZUludGVyc2Vj
dGlvbiYgdGhpc0ludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXhdOworICAgICAgICBp
ZiAoaW5kZXggKyAxIDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGNvbnN0
IEVkZ2VJbnRlcnNlY3Rpb24mIG5leHRJbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4
ICsgMV07CisgICAgICAgICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpID09IG5l
eHRJbnRlcnNlY3Rpb24ucG9pbnQueCgpKSAmJiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZl
cnRleE1pblkgfHwgdGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1heFkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBuZXh0SW50ZXJzZWN0aW9u
LnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwYWlycyBvZiBpbnRlcnNlY3Rp
b25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNYXhZLFZlcnRleE1heFkgYW5kIFZlcnRleE1pblks
VmVydGV4TWluWS4KKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHBhaXJzIG9mIGlu
dGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJlIFZlcnRleE1pblksVmVydGV4TWF4WSBvciBWZXJ0
ZXhNYXhZLFZlcnRleE1pblkgd2l0aCBvbmUgaW50ZXJzZWN0aW9uLgorICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rpb24uZWRnZTsKKyAgICAgICAgYm9vbCBl
dmVuT2RkQ3Jvc3NpbmcgPSAhd2luZENvdW50OworCisgICAgICAgIGlmIChwb2x5Z29uLmZpbGxS
dWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAgICAgICB3aW5kQ291bnQgKz0gKHRoaXNF
ZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpKSA/IDEgOiAtMTsKKyAg
ICAgICAgICAgIGV2ZW5PZGRDcm9zc2luZyA9IGV2ZW5PZGRDcm9zc2luZyB8fCAhd2luZENvdW50
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV2ZW5PZGRDcm9zc2luZykgeworICAgICAgICAg
ICAgYm9vbCBlZGdlQ3Jvc3NpbmcgPSB0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gTm9ybWFsOwor
ICAgICAgICAgICAgaWYgKCFlZGdlQ3Jvc3NpbmcpIHsKKyAgICAgICAgICAgICAgICBGbG9hdFBv
aW50IHByZXZWZXJ0ZXg7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCB0aGlzVmVydGV4Owor
ICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV4dFZlcnRleDsKKworICAgICAgICAgICAgICAg
IGlmIChnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyh0aGlzSW50ZXJzZWN0aW9uLCBwcmV2
VmVydGV4LCB0aGlzVmVydGV4LCBuZXh0VmVydGV4KSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobmV4dFZlcnRleC55KCkgPT0geSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9z
c2luZyA9IChpc01pblkpID8gcHJldlZlcnRleC55KCkgPiB5IDogcHJldlZlcnRleC55KCkgPCB5
OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmV2VmVydGV4LnkoKSA9PSB5KQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gKGlzTWluWSkgPyBuZXh0VmVydGV4
LnkoKSA+IHkgOiBuZXh0VmVydGV4LnkoKSA8IHk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVkZ2VDcm9zc2luZykKKyAg
ICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludGVyc2VjdGlvbi5w
b2ludC54KCksIGluc2lkZSwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgICsraW5kZXg7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rp
b25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0
b3I8U2hhcGVJbnRlcnZhbD4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5
Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHkxLCB5
MiwgZWRnZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVy
c2VjdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSAqZWRnZSA9IGVkZ2VzW2ldOworICAg
ICAgICBmbG9hdCB4MTsKKyAgICAgICAgZmxvYXQgeDI7CisKKyAgICAgICAgaWYgKGVkZ2UtPm1p
blkoKSA8IHkxKSB7CisgICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MSwg
aW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpIDwg
ZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4
MigpLngoKTsKKworICAgICAgICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKKyAgICAgICAgICAg
IGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOworICAgICAgICAg
ICAgeDIgPSBpbnRlcnNlY3Rpb24ucG9pbnQueCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHgyID0gKGVkZ2UtPnZlcnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVk
Z2UtPnZlcnRleDEoKS54KCkgOiBlZGdlLT52ZXJ0ZXgyKCkueCgpOworCisgICAgICAgIGlmICh4
MSA+IHgyKQorICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CisKKyAgICAgICAgaWYgKHgy
ID4geDEpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFNoYXBlSW50ZXJ2YWwoeDEsIHgyKSk7
CisgICAgfQorCisgICAgc29ydFNoYXBlSW50ZXJ2YWxzKHJlc3VsdCk7Cit9CisKK3ZvaWQgUG9s
eWdvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSBzaGFwZU1hcmdpbkJvdW5kcygpOworICAg
IGlmIChwb2x5Z29uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeTEg
PSBsb2dpY2FsVG9wOworICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7
CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7
CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZh
bHMpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHkyWElu
dGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOwor
ICAgIG1lcmdlU2hhcGVJbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIG1lcmdl
ZEludGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gZWRnZUludGVydmFsczsK
KyAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24sIHkxLCB5Miwg
ZWRnZUludGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gZXhjbHVkZWRJbnRl
cnZhbHM7CisgICAgbWVyZ2VTaGFwZUludGVydmFscyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRl
cnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkgeworICAgICAgICBTaGFwZUludGVydmFs
IGludGVydmFsID0gZXhjbHVkZWRJbnRlcnZhbHNbaV07CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
TGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVydmFsLngyKSk7CisgICAgfQorfQorCit2b2lk
IFBvbHlnb25TaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7
CisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7
CisgICAgaWYgKHBvbHlnb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9h
dCB5MSA9IGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhl
aWdodDsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVy
dmFsczsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWElu
dGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwg
eTJYSW50ZXJ2YWxzKTsKKworICAgIFZlY3RvcjxTaGFwZUludGVydmFsPiBjb21tb25JbnRlcnZh
bHM7CisgICAgaW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZh
bHMsIGNvbW1vbkludGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gZWRnZUlu
dGVydmFsczsKKyAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24s
IHkxLCB5MiwgZWRnZUludGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gaW5j
bHVkZWRJbnRlcnZhbHM7CisgICAgc3VidHJhY3RTaGFwZUludGVydmFscyhjb21tb25JbnRlcnZh
bHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkgeworICAgICAgICBT
aGFwZUludGVydmFsIGludGVydmFsID0gaW5jbHVkZWRJbnRlcnZhbHNbaV07CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2YWwueDEsIGludGVydmFsLngyKSk7CisgICAg
fQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0IEZs
b2F0UG9seWdvbiYgcG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCB1bnNpZ25lZCBvZmZz
ZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKQoreworICAgIFZlY3Rvcjxj
b25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBw
aW5nRWRnZXMocmVjdC55KCksIHJlY3QubWF4WSgpLCBlZGdlcykpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSBlZGdlc1tpXTsKKyAgICAg
ICAgaWYgKGVkZ2UtPmVkZ2VJbmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDEgJiYgZWRnZS0+ZWRn
ZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MiAmJiBlZGdlLT5vdmVybGFwc1JlY3QocmVjdCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0KGNvbnN0IEZsb2F0UmVjdCYg
cjEsIGNvbnN0IEZsb2F0UmVjdCYgcjIpCit7CisgICAgaWYgKHIxLnkoKSA8IHIyLnkoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHIxLnkoKSA9PSByMi55KCkpCisgICAgICAgIHJl
dHVybiByMS54KCkgPCByMi54KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBvbHln
b25TaGFwZTo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxv
Z2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6
ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IG1pbkludGVydmFsVG9w
ID0gbWluTG9naWNhbEludGVydmFsVG9wOworICAgIGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0g
bWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFdp
ZHRoID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOworCisgICAgY29uc3QgRmxvYXRQ
b2x5Z29uJiBwb2x5Z29uID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7CisgICAgY29uc3QgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gcG9seWdvbi5ib3VuZGluZ0JveCgpOworICAgIGlmIChtaW5JbnRl
cnZhbFdpZHRoID4gYm91bmRpbmdCb3gud2lkdGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluSW50ZXJ2YWxU
b3ApOworICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7CisKKyAgICBp
ZiAobWF4WSA+IGJvdW5kaW5nQm94Lm1heFkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBwb2x5Z29uLm92
ZXJsYXBwaW5nRWRnZXMobWluSW50ZXJ2YWxUb3AsIGJvdW5kaW5nQm94Lm1heFkoKSwgZWRnZXMp
OworCisgICAgZmxvYXQgZHggPSBtaW5JbnRlcnZhbFdpZHRoIC8gMjsKKyAgICBmbG9hdCBkeSA9
IG1pbkludGVydmFsSGVpZ2h0IC8gMjsKKyAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9m
ZnNldEVkZ2VzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqKGVkZ2VzW2ld
KTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJldmlvdXNFZGdl
KCkudmVydGV4MSgpOworICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52
ZXJ0ZXgxKCk7CisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRl
eDIoKTsKKyAgICAgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRFZGdlQnVmZmVy
OworCisgICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA+IHZlcnRleDEueSgpID8gdmVydGV4Mi54KCkg
Pj0gdmVydGV4MS54KCkgOiB2ZXJ0ZXgxLngoKSA+PSB2ZXJ0ZXgyLngoKSkgeworICAgICAgICAg
ICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRT
aXplKGR4LCAtZHkpKSk7CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZz
ZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdl
KGVkZ2UsIEZsb2F0U2l6ZShkeCwgZHkpKSk7CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVy
LmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNpemUoLWR4LCAtZHkpKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNSZWZsZXhWZXJ0ZXgodmVydGV4MCwgdmVydGV4MSwg
dmVydGV4MikpIHsKKyAgICAgICAgICAgIGlmICh2ZXJ0ZXgyLngoKSA8PSB2ZXJ0ZXgxLngoKSAm
JiB2ZXJ0ZXgwLngoKSA8PSB2ZXJ0ZXgxLngoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdl
QnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoZHgsIC1k
eSksIEZsb2F0U2l6ZShkeCwgZHkpKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2ZXJ0ZXgyLngo
KSA+PSB2ZXJ0ZXgxLngoKSAmJiB2ZXJ0ZXgwLngoKSA+PSB2ZXJ0ZXgxLngoKSkKKyAgICAgICAg
ICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgx
LCBGbG9hdFNpemUoLWR4LCAtZHkpLCBGbG9hdFNpemUoLWR4LCBkeSkpKTsKKyAgICAgICAgICAg
IGlmICh2ZXJ0ZXgyLnkoKSA8PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0ZXgwLnkoKSA8PSB2ZXJ0ZXgx
LnkoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5
Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCBkeSksIEZsb2F0U2l6ZShkeCwgZHkpKSk7
CisgICAgICAgICAgICBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+PSB2ZXJ0ZXgxLnkoKSAmJiB2ZXJ0
ZXgwLnkoKSA+PSB2ZXJ0ZXgxLnkoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVy
LmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSh2ZXJ0ZXgxLCBGbG9hdFNpemUoLWR4LCAtZHkpLCBG
bG9hdFNpemUoZHgsIC1keSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBvZmZzZXRFZGdlQnVmZmVyLnNpemUoKTsgKytqKQorICAgICAgICAgICAgaWYg
KG9mZnNldEVkZ2VCdWZmZXJbal0ubWF4WSgpID49IG1pblkpCisgICAgICAgICAgICAgICAgb2Zm
c2V0RWRnZXMuYXBwZW5kKG9mZnNldEVkZ2VCdWZmZXJbal0pOworICAgIH0KKworICAgIG9mZnNl
dEVkZ2VzLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShwb2x5Z29uLCBtaW5JbnRlcnZhbFRvcCwg
RmxvYXRTaXplKDAsIGR5KSkpOworCisgICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0ludGVyc2Vj
dGlvbjsKKyAgICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OworICAgIGJvb2wgZmlyc3RGaXRGb3Vu
ZCA9IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9mZnNldEVkZ2VzLnNp
emUoKSAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG9m
ZnNldEVkZ2VzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0RWRnZXNbaV0u
aW50ZXJzZWN0aW9uKG9mZnNldEVkZ2VzW2pdLCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbikpIHsK
KyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ob2Zm
c2V0RWRnZXNJbnRlcnNlY3Rpb24ueCgpIC0gZHgsIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uLnko
KSAtIGR5KTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcG90ZW50aWFsRmlyc3RGaXRSZWN0
KHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUpOworICAg
ICAgICAgICAgICAgIGlmICgob2Zmc2V0RWRnZXNbaV0uYmFzaXMoKSA9PSBPZmZzZXRQb2x5Z29u
RWRnZTo6TGluZVRvcAorICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXRFZGdlc1tqXS5iYXNp
cygpID09IE9mZnNldFBvbHlnb25FZGdlOjpMaW5lVG9wCisgICAgICAgICAgICAgICAgICAgIHx8
IHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ueSgpID49IG1pbkludGVydmFsVG9wKQorICAgICAg
ICAgICAgICAgICAgICAmJiAoIWZpcnN0Rml0Rm91bmQgfHwgYWJvdmVPclRvVGhlTGVmdChwb3Rl
bnRpYWxGaXJzdEZpdFJlY3QsIGZpcnN0Rml0UmVjdCkpCisgICAgICAgICAgICAgICAgICAgICYm
IHBvbHlnb24uY29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCisgICAgICAgICAgICAg
ICAgICAgICYmIGZpcnN0Rml0UmVjdEluUG9seWdvbihwb2x5Z29uLCBwb3RlbnRpYWxGaXJzdEZp
dFJlY3QsIG9mZnNldEVkZ2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdlc1tqXS5lZGdlSW5k
ZXgoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRGb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGZpcnN0Rml0UmVjdCA9IHBvdGVudGlhbEZpcnN0Rml0UmVjdDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoZmlyc3RGaXRGb3VuZCkKKyAgICAgICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChmaXJz
dEZpdFJlY3QueSgpKTsKKyAgICByZXR1cm4gZmlyc3RGaXRGb3VuZDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9Qb2x5Z29uU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdv
blNoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI4YWMzYWRkMDY1NmQ2NzNiMTI3ZDY4ODhiZjBlODYwMmI2
MTgwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
UG9seWdvblNoYXBlLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBvbHlnb25T
aGFwZV9oCisjZGVmaW5lIFBvbHlnb25TaGFwZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvbHlnb24u
aCIKKyNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgIlNoYXBlSW50ZXJ2YWwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBPZmZzZXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0
ZXhQYWlyIHsKK3B1YmxpYzoKKyAgICBlbnVtIEJhc2lzIHsKKyAgICAgICAgRWRnZSwKKyAgICAg
ICAgVmVydGV4LAorICAgICAgICBMaW5lVG9wCisgICAgfTsKKworICAgIE9mZnNldFBvbHlnb25F
ZGdlKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
KQorICAgICAgICA6IG1fdmVydGV4MShlZGdlLnZlcnRleDEoKSArIG9mZnNldCkKKyAgICAgICAg
LCBtX3ZlcnRleDIoZWRnZS52ZXJ0ZXgyKCkgKyBvZmZzZXQpCisgICAgICAgICwgbV9lZGdlSW5k
ZXgoZWRnZS5lZGdlSW5kZXgoKSkKKyAgICAgICAgLCBtX2Jhc2lzKEVkZ2UpCisgICAgeworICAg
IH0KKworICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHJlZmxleFZlcnRl
eCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQxLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldDIpCisg
ICAgICAgIDogbV92ZXJ0ZXgxKHJlZmxleFZlcnRleCArIG9mZnNldDEpCisgICAgICAgICwgbV92
ZXJ0ZXgyKHJlZmxleFZlcnRleCArIG9mZnNldDIpCisgICAgICAgICwgbV9lZGdlSW5kZXgoLTEp
CisgICAgICAgICwgbV9iYXNpcyhWZXJ0ZXgpCisgICAgeworICAgIH0KKworICAgIE9mZnNldFBv
bHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgbWluTG9naWNhbElu
dGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKKyAgICAgICAgOiBtX3ZlcnRleDEo
RmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxU
b3ApICsgb2Zmc2V0KQorICAgICAgICAsIG1fdmVydGV4MihGbG9hdFBvaW50KHBvbHlnb24uYm91
bmRpbmdCb3goKS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBvZmZzZXQpCisgICAg
ICAgICwgbV9lZGdlSW5kZXgoLTEpCisgICAgICAgICwgbV9iYXNpcyhMaW5lVG9wKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX3ZlcnRleDE7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9p
bnQmIHZlcnRleDIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRleDI7IH0KKyAgICBp
bnQgZWRnZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZGdlSW5kZXg7IH0KKyAgICBCYXNpcyBi
YXNpcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFzaXM7IH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFBv
aW50IG1fdmVydGV4MTsKKyAgICBGbG9hdFBvaW50IG1fdmVydGV4MjsKKyAgICBpbnQgbV9lZGdl
SW5kZXg7CisgICAgQmFzaXMgbV9iYXNpczsKK307CisKK2NsYXNzIFBvbHlnb25TaGFwZSA6IHB1
YmxpYyBTaGFwZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seWdvblNoYXBlKTsKK3B1
YmxpYzoKKyAgICBQb2x5Z29uU2hhcGUoUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2
ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCisgICAgICAgIDogU2hhcGUoKQorICAgICAgICAs
IG1fcG9seWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUpCisgICAgICAgICwgbV9tYXJnaW5Cb3VuZHMo
bnVsbHB0cikKKyAgICAgICAgLCBtX3BhZGRpbmdCb3VuZHMobnVsbHB0cikKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVN
YXJnaW5Cb3VuZHMoKS5ib3VuZGluZ0JveCgpKTsgfQorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBz
aGFwZVBhZGRpbmdMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBz
dGF0aWNfY2FzdDxMYXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKS5ib3VuZGluZ0JveCgp
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9wb2x5Z29uLmlzRW1wdHkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVy
dmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2Vn
bWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJ
bnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQs
IFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5j
bHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3As
IGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBj
b25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBl
TWFyZ2luQm91bmRzKCkgY29uc3Q7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZVBhZGRp
bmdCb3VuZHMoKSBjb25zdDsKKworICAgIEZsb2F0UG9seWdvbiBtX3BvbHlnb247CisgICAgbXV0
YWJsZSBPd25QdHI8RmxvYXRQb2x5Z29uPiBtX21hcmdpbkJvdW5kczsKKyAgICBtdXRhYmxlIE93
blB0cjxGbG9hdFBvbHlnb24+IG1fcGFkZGluZ0JvdW5kczsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFBvbHlnb25TaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1Mjdm
Y2ZhNzJhZjNjOTMwMDU1ZTU5M2I5ZjU0Yzc0N2E0MTcwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcApAQCAtMCww
ICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQor
ICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWN0YW5n
bGVTaGFwZS5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VYSW50ZXJjZXB0KGZsb2F0IHks
IGZsb2F0IHJ4LCBmbG9hdCByeSkKK3sKKyAgICBBU1NFUlQocnkgPiAwKTsKKyAgICByZXR1cm4g
cnggKiBzcXJ0KDEgLSAoeSAqIHkpIC8gKHJ5ICogcnkpKTsKK30KKworc3RhdGljIGlubGluZSBm
bG9hdCBlbGxpcHNlWUludGVyY2VwdChmbG9hdCB4LCBmbG9hdCByeCwgZmxvYXQgcnkpCit7Cisg
ICAgQVNTRVJUKHJ4ID4gMCk7CisgICAgcmV0dXJuIHJ5ICogc3FydCgxIC0gKHggKiB4KSAvIChy
eCAqIHJ4KSk7Cit9CisKK0Zsb2F0Um91bmRlZFJlY3QgRmxvYXRSb3VuZGVkUmVjdDo6cGFkZGlu
Z0JvdW5kcyhmbG9hdCBwYWRkaW5nKSBjb25zdAoreworICAgIEFTU0VSVChwYWRkaW5nID49IDAp
OworICAgIGlmICghcGFkZGluZyB8fCBpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAqdGhpczsK
KworICAgIGZsb2F0IGJvdW5kc1ggPSB4KCkgKyBzdGQ6Om1pbih3aWR0aCgpIC8gMiwgcGFkZGlu
Zyk7CisgICAgZmxvYXQgYm91bmRzWSA9IHkoKSArIHN0ZDo6bWluKGhlaWdodCgpIC8gMiwgcGFk
ZGluZyk7CisgICAgZmxvYXQgYm91bmRzV2lkdGggPSBzdGQ6Om1heCgwLjBmLCB3aWR0aCgpIC0g
cGFkZGluZyAqIDIpOworICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9IHN0ZDo6bWF4KDAuMGYsIGhl
aWdodCgpIC0gcGFkZGluZyAqIDIpOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1ggPSBzdGQ6Om1h
eCgwLjBmLCByeCgpIC0gcGFkZGluZyk7CisgICAgZmxvYXQgYm91bmRzUmFkaXVzWSA9IHN0ZDo6
bWF4KDAuMGYsIHJ5KCkgLSBwYWRkaW5nKTsKKyAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChG
bG9hdFJlY3QoYm91bmRzWCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCksIEZs
b2F0U2l6ZShib3VuZHNSYWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Cit9CisKK0Zsb2F0Um91bmRl
ZFJlY3QgRmxvYXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91bmRzKGZsb2F0IG1hcmdpbikgY29uc3QK
K3sKKyAgICBBU1NFUlQobWFyZ2luID49IDApOworICAgIGlmICghbWFyZ2luKQorICAgICAgICBy
ZXR1cm4gKnRoaXM7CisKKyAgICBmbG9hdCBib3VuZHNYID0geCgpIC0gbWFyZ2luOworICAgIGZs
b2F0IGJvdW5kc1kgPSB5KCkgLSBtYXJnaW47CisgICAgZmxvYXQgYm91bmRzV2lkdGggPSB3aWR0
aCgpICsgbWFyZ2luICogMjsKKyAgICBmbG9hdCBib3VuZHNIZWlnaHQgPSBoZWlnaHQoKSArIG1h
cmdpbiAqIDI7CisgICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHJ4KCkgKyBtYXJnaW47CisgICAg
ZmxvYXQgYm91bmRzUmFkaXVzWSA9IHJ5KCkgKyBtYXJnaW47CisgICAgcmV0dXJuIEZsb2F0Um91
bmRlZFJlY3QoRmxvYXRSZWN0KGJvdW5kc1gsIGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNI
ZWlnaHQpLCBGbG9hdFNpemUoYm91bmRzUmFkaXVzWCwgYm91bmRzUmFkaXVzWSkpOworfQorCitG
bG9hdFBvaW50IEZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2VwdEZvcldpZHRoKGZsb2F0
IHdpZHRoQXRJbnRlcmNlcHQpIGNvbnN0Cit7CisgICAgZmxvYXQgeGkgPSAod2lkdGgoKSAtIHdp
ZHRoQXRJbnRlcmNlcHQpIC8gMjsKKyAgICBmbG9hdCB5aSA9IHJ5KCkgLSBlbGxpcHNlWUludGVy
Y2VwdChyeCgpIC0geGksIHJ4KCksIHJ5KCkpOworICAgIHJldHVybiBGbG9hdFBvaW50KHhpLCB5
aSk7Cit9CisKK0Zsb2F0Um91bmRlZFJlY3QgUmVjdGFuZ2xlU2hhcGU6OnNoYXBlUGFkZGluZ0Jv
dW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3VuZHMp
IHsKKyAgICAgICAgbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzID0gdHJ1ZTsKKyAgICAg
ICAgbV9wYWRkaW5nQm91bmRzID0gbV9ib3VuZHMucGFkZGluZ0JvdW5kcyhzaGFwZVBhZGRpbmco
KSk7CisgICAgfQorICAgIHJldHVybiBtX3BhZGRpbmdCb3VuZHM7Cit9CisKK0Zsb2F0Um91bmRl
ZFJlY3QgUmVjdGFuZ2xlU2hhcGU6OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faGF2ZUluaXRpYWxpemVkTWFyZ2luQm91bmRzKSB7CisgICAgICAgIG1faGF2ZUluaXRp
YWxpemVkTWFyZ2luQm91bmRzID0gdHJ1ZTsKKyAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBtX2Jv
dW5kcy5tYXJnaW5Cb3VuZHMoc2hhcGVNYXJnaW4oKSk7CisgICAgfQorICAgIHJldHVybiBtX21h
cmdpbkJvdW5kczsKK30KKwordm9pZCBSZWN0YW5nbGVTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZh
bHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21l
bnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm91
bmRzID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOworICAgIGZsb2F0IHky
ID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7CisKKyAgICBpZiAoeTIgPCBib3VuZHMueSgp
IHx8IHkxID49IGJvdW5kcy5tYXhZKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHgx
ID0gYm91bmRzLngoKTsKKyAgICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7CisKKyAgICBpZiAo
Ym91bmRzLnJ5KCkgPiAwKSB7CisgICAgICAgIGlmICh5MiA8IGJvdW5kcy55KCkgKyBib3VuZHMu
cnkoKSkgeworICAgICAgICAgICAgZmxvYXQgeWkgPSB5MiAtIGJvdW5kcy55KCkgLSBib3VuZHMu
cnkoKTsKKyAgICAgICAgICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJvdW5k
cy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3Vu
ZHMucngoKSAtIHhpOworICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4
KCkgKyB4aTsKKyAgICAgICAgfSBlbHNlIGlmICh5MSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMu
cnkoKSkgeworICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTEgLSAoYm91bmRzLm1heFkoKSAtIGJv
dW5kcy5yeSgpKTsKKyAgICAgICAgICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWks
IGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkg
KyBib3VuZHMucngoKSAtIHhpOworICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91
bmRzLnJ4KCkgKyB4aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC5hcHBlbmQoTGlu
ZVNlZ21lbnQoeDEsIHgyKSk7Cit9CisKK3ZvaWQgUmVjdGFuZ2xlU2hhcGU6OmdldEluY2x1ZGVk
SW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOworICAgIGlmIChib3VuZHMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7CisgICAg
ZmxvYXQgeTIgPSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKKworICAgIGlmICh5MSA8IGJv
dW5kcy55KCkgfHwgeTIgPiBib3VuZHMubWF4WSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdCB4MSA9IGJvdW5kcy54KCk7CisgICAgZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOworCisg
ICAgaWYgKGJvdW5kcy5yeSgpID4gMCkgeworICAgICAgICBib29sIHkxSW50ZXJjZXB0c0Nvcm5l
ciA9IHkxIDwgYm91bmRzLnkoKSArIGJvdW5kcy5yeSgpOworICAgICAgICBib29sIHkySW50ZXJj
ZXB0c0Nvcm5lciA9IHkyID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpOworICAgICAgICBm
bG9hdCB4aSA9IDA7CisKKyAgICAgICAgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lciAmJiB5MkludGVy
Y2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGlmICAoeTEgPCBib3VuZHMuaGVpZ2h0KCkgKyAy
ICogYm91bmRzLnkoKSAtIHkyKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJv
dW5kcy55KCkgLSBib3VuZHMucnkoKTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50
ZXJjZXB0KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4WSgpIC0gYm91
bmRzLnJ5KCkpOworICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJv
dW5kcy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoeTFJbnRlcmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gYm91
bmRzLnkoKSAtIGJvdW5kcy5yeSgpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2Vw
dCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh5Mklu
dGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0gKGJvdW5kcy5t
YXhZKCkgLSBib3VuZHMucnkoKSk7CisgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0
KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHkxSW50ZXJjZXB0c0Nvcm5lciB8fCB5MkludGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAg
IHgxID0gYm91bmRzLngoKSArIGJvdW5kcy5yeCgpIC0geGk7CisgICAgICAgICAgICB4MiA9IGJv
dW5kcy5tYXhYKCkgLSBib3VuZHMucngoKSArIHhpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudCh4MSwgeDIpKTsKK30KKworYm9vbCBSZWN0YW5nbGVT
aGFwZTo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2lj
YWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwg
TGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAoreworICAgIGZsb2F0IG1pbkludGVydmFsVG9wID0g
bWluTG9naWNhbEludGVydmFsVG9wOworICAgIGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0gbWlu
TG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFdpZHRo
ID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpOworCisgICAgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgYm91bmRzID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5p
c0VtcHR5KCkgfHwgbWluSW50ZXJ2YWxXaWR0aCA+IGJvdW5kcy53aWR0aCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBtaW5ZID0gc3RkOjptYXgoYm91bmRzLnkoKSwgbWlu
SW50ZXJ2YWxUb3ApOworICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50ZXJ2YWxIZWlnaHQ7
CisKKyAgICBpZiAobWF4WSA+IGJvdW5kcy5tYXhZKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGJvb2wgaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciA9IG1pblkgPCBib3VuZHMueSgp
ICsgYm91bmRzLnJ5KCk7CisgICAgYm9vbCBpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyID0gbWF4
WSA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKKworICAgIGlmICghaW50ZXJ2YWxPdmVy
bGFwc01pbkNvcm5lciAmJiAhaW50ZXJ2YWxPdmVybGFwc01heENvcm5lcikgeworICAgICAgICBy
ZXN1bHQgPSBtaW5ZOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBmbG9hdCBj
ZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDI7CisgICAgYm9vbCBtaW5D
b3JuZXJEZWZpbmVzWCA9IGZhYnMoY2VudGVyWSAtIG1pblkpID4gZmFicyhjZW50ZXJZIC0gbWF4
WSk7CisgICAgYm9vbCBpbnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzID0gbWluSW50ZXJ2YWxXaWR0
aCArIDIgKiBib3VuZHMucngoKSA8PSBib3VuZHMud2lkdGgoKTsKKyAgICBGbG9hdFBvaW50IGNv
cm5lckludGVyY2VwdCA9IGJvdW5kcy5jb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChtaW5JbnRlcnZh
bFdpZHRoKTsKKworICAgIGlmIChpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyICYmICghaW50ZXJ2
YWxPdmVybGFwc01heENvcm5lciB8fCBtaW5Db3JuZXJEZWZpbmVzWCkpIHsKKyAgICAgICAgaWYg
KGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgYm91bmRzLnkoKSArIGNvcm5lckludGVyY2Vw
dC55KCkgPCBtaW5ZKSB7CisgICAgICAgICAgICByZXN1bHQgPSBtaW5ZOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1pbkludGVydmFsSGVpZ2h0IDwg
Ym91bmRzLmhlaWdodCgpIC0gKDIgKiBjb3JuZXJJbnRlcmNlcHQueSgpKSkgeworICAgICAgICAg
ICAgcmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChib3VuZHMueSgpICsgY29ybmVySW50ZXJjZXB0
LnkoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyICYmICghaW50ZXJ2YWxPdmVybGFwc01pbkNv
cm5lciB8fCAhbWluQ29ybmVyRGVmaW5lc1gpKSB7CisgICAgICAgIGlmIChpbnRlcnZhbEZpdHNX
aXRoaW5Db3JuZXJzIHx8IG1pblkgPD0gIGJvdW5kcy5tYXhZKCkgLSBjb3JuZXJJbnRlcmNlcHQu
eSgpIC0gbWluSW50ZXJ2YWxIZWlnaHQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5ZWNmMDUwNGJi
OTkzYzkxMTAzOTA2MzQ5MzQ1ZWU0Mjk0NDZkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmgKQEAgLTAsMCArMSw5MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICog
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICog
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUmVjdGFuZ2xlU2hhcGVfaAorI2RlZmluZSBSZWN0YW5nbGVTaGFw
ZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGbG9hdFJvdW5kZWRSZWN0IDogcHVibGljIEZsb2F0UmVjdCB7CitwdWJs
aWM6CisgICAgRmxvYXRSb3VuZGVkUmVjdCgpIHsgfQorICAgIEZsb2F0Um91bmRlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCisgICAgICAgIDog
RmxvYXRSZWN0KGJvdW5kcykKKyAgICAgICAgLCBtX3JhZGlpKHJhZGlpKQorICAgIHsKKyAgICB9
CisKKyAgICBmbG9hdCByeCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWkud2lkdGgoKTsgfQorICAg
IGZsb2F0IHJ5KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpaS5oZWlnaHQoKTsgfQorICAgIEZsb2F0
Um91bmRlZFJlY3QgbWFyZ2luQm91bmRzKGZsb2F0IG1hcmdpbikgY29uc3Q7CisgICAgRmxvYXRS
b3VuZGVkUmVjdCBwYWRkaW5nQm91bmRzKGZsb2F0IHBhZGRpbmcpIGNvbnN0OworICAgIEZsb2F0
UG9pbnQgY29ybmVySW50ZXJjZXB0Rm9yV2lkdGgoZmxvYXQgd2lkdGgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIEZsb2F0U2l6ZSBtX3JhZGlpOworfTsKKworY2xhc3MgUmVjdGFuZ2xlU2hhcGUg
OiBwdWJsaWMgU2hhcGUgeworcHVibGljOgorICAgIFJlY3RhbmdsZVNoYXBlKGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQorICAgICAgICA6IFNoYXBlKCkK
KyAgICAgICAgLCBtX2JvdW5kcyhib3VuZHMsIHJhZGlpKQorICAgICAgICAsIG1faGF2ZUluaXRp
YWxpemVkTWFyZ2luQm91bmRzKGZhbHNlKQorICAgICAgICAsIG1faGF2ZUluaXRpYWxpemVkUGFk
ZGluZ0JvdW5kcyhmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBMYXlvdXRSZWN0
IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMoKSk7IH0KKyAgICB2aXJ0
dWFsIExheW91dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91bmRz
KCkpOyB9CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRl
cnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVk
SW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdElu
Y2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9w
LCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0Jikg
Y29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSb3VuZGVkUmVjdCBzaGFwZU1h
cmdpbkJvdW5kcygpIGNvbnN0OworICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVQYWRkaW5nQm91
bmRzKCkgY29uc3Q7CisKKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fYm91bmRzOworICAgIG11dGFi
bGUgRmxvYXRSb3VuZGVkUmVjdCBtX21hcmdpbkJvdW5kczsKKyAgICBtdXRhYmxlIEZsb2F0Um91
bmRlZFJlY3QgbV9wYWRkaW5nQm91bmRzOworICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFs
aXplZE1hcmdpbkJvdW5kcyA6IDE7CisgICAgbXV0YWJsZSBib29sIG1faGF2ZUluaXRpYWxpemVk
UGFkZGluZ0JvdW5kcyA6IDE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBSZWN0YW5nbGVTaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI3OTIwY2M5ZTQ4ODEzNjg5MTc0ODVjYjAzMzc4ZTlmNDAwMDJm
M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTaGFwZS5oIgorCisjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgorI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1
ZGUgIlBvbHlnb25TaGFwZS5oIgorI2luY2x1ZGUgIlJlY3RhbmdsZVNoYXBlLmgiCisjaW5jbHVk
ZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVSZWN0YW5nbGVTaGFwZShj
b25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKK3sKKyAgICBB
U1NFUlQoYm91bmRzLndpZHRoKCkgPj0gMCAmJiBib3VuZHMuaGVpZ2h0KCkgPj0gMCAmJiByYWRp
aS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBSZWN0YW5nbGVTaGFwZShib3VuZHMsIHJhZGlpKSk7Cit9CisKK3N0YXRpYyBQYXNz
T3duUHRyPFNoYXBlPiBjcmVhdGVTaGFwZUNpcmNsZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIs
IGZsb2F0IHJhZGl1cykKK3sKKyAgICBBU1NFUlQocmFkaXVzID49IDApOworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUmVjdGFuZ2xlU2hhcGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpdXMs
IGNlbnRlci55KCkgLSByYWRpdXMsIHJhZGl1cyoyLCByYWRpdXMqMiksIEZsb2F0U2l6ZShyYWRp
dXMsIHJhZGl1cykpKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+IGNyZWF0ZVNoYXBl
RWxsaXBzZShjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkp
Cit7CisgICAgQVNTRVJUKHJhZGlpLndpZHRoKCkgPj0gMCAmJiByYWRpaS5oZWlnaHQoKSA+PSAw
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlY3RhbmdsZVNoYXBlKEZsb2F0UmVjdChjZW50
ZXIueCgpIC0gcmFkaWkud2lkdGgoKSwgY2VudGVyLnkoKSAtIHJhZGlpLmhlaWdodCgpLCByYWRp
aS53aWR0aCgpKjIsIHJhZGlpLmhlaWdodCgpKjIpLCByYWRpaSkpOworfQorCitzdGF0aWMgUGFz
c093blB0cjxTaGFwZT4gY3JlYXRlUG9seWdvblNoYXBlKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0
UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUG9seWdvblNoYXBlKHZlcnRpY2VzLCBmaWxsUnVsZSkpOworfQorCitzdGF0aWMg
aW5saW5lIEZsb2F0UmVjdCBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsb2dpY2FsQm94SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3sK
KyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICBy
ZXR1cm4gcmVjdDsKKyAgICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QueSgpLCBsb2dpY2FsQm94SGVpZ2h0
IC0gcmVjdC5tYXhYKCksIHJlY3QuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSk7CisgICAgcmV0dXJu
IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKK30KKworc3RhdGljIGlubGluZSBGbG9hdFBvaW50IHBo
eXNpY2FsUG9pbnRUb0xvZ2ljYWwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IGxvZ2lj
YWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBwb2ludDsKKyAg
ICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICBy
ZXR1cm4gRmxvYXRQb2ludChwb2ludC55KCksIGxvZ2ljYWxCb3hIZWlnaHQgLSBwb2ludC54KCkp
OworICAgIHJldHVybiBwb2ludC50cmFuc3Bvc2VkUG9pbnQoKTsKK30KKworc3RhdGljIGlubGlu
ZSBGbG9hdFNpemUgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgcmV0dXJuIHNpemUu
dHJhbnNwb3NlZFNpemUoKTsKK30KKworUGFzc093blB0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVNo
YXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hhcGUsIGNvbnN0IExheW91dFNpemUmIGxvZ2lj
YWxCb3hTaXplLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwgTGVuZ3Ro
IHBhZGRpbmcpCit7CisgICAgQVNTRVJUKGJhc2ljU2hhcGUpOworCisgICAgYm9vbCBob3Jpem9u
dGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7Cisg
ICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94U2l6
ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVpZ2h0KCk7CisgICAgZmxvYXQgYm94SGVpZ2h0
ID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUuaGVpZ2h0KCkgOiBsb2dp
Y2FsQm94U2l6ZS53aWR0aCgpOworICAgIE93blB0cjxTaGFwZT4gc2hhcGU7CisKKyAgICBzd2l0
Y2ggKGJhc2ljU2hhcGUtPnR5cGUoKSkgeworCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1No
YXBlUmVjdGFuZ2xlVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKiBy
ZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKj4oYmFzaWNT
aGFwZSk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMoCisgICAgICAgICAgICBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKHJlY3RhbmdsZS0+eCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+eSgpLCBib3hIZWlnaHQpLAorICAgICAgICAgICAgZmxv
YXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPndpZHRoKCksIGJveFdpZHRoKSwKKyAgICAgICAg
ICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5oZWlnaHQoKSwgYm94SGVpZ2h0KSk7
CisgICAgICAgIExlbmd0aCByYWRpdXNYTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNY
KCk7CisgICAgICAgIExlbmd0aCByYWRpdXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRp
dXNZKCk7CisgICAgICAgIEZsb2F0U2l6ZSBjb3JuZXJSYWRpaSgKKyAgICAgICAgICAgIHJhZGl1
c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1hM
ZW5ndGgsIGJveFdpZHRoKSwKKyAgICAgICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRlZmluZWQo
KSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdodCkpOwor
ICAgICAgICBGbG9hdFJlY3QgbG9naWNhbEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9naWNhbChi
b3VuZHMsIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7CisKKyAgICAgICAg
c2hhcGUgPSBjcmVhdGVSZWN0YW5nbGVTaGFwZShsb2dpY2FsQm91bmRzLCBwaHlzaWNhbFNpemVU
b0xvZ2ljYWwoY29ybmVyUmFkaWksIHdyaXRpbmdNb2RlKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUNpcmNsZVR5cGU6IHsKKyAgICAg
ICAgY29uc3QgQmFzaWNTaGFwZUNpcmNsZSogY2lyY2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNTaGFwZUNpcmNsZSo+KGJhc2ljU2hhcGUpOworICAgICAgICBmbG9hdCBjZW50ZXJYID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRlclgoKSwgYm94V2lkdGgpOworICAgICAgICBm
bG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRlclkoKSwgYm94
SGVpZ2h0KTsKKyAgICAgICAgZmxvYXQgcmFkaXVzID0gZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJj
bGUtPnJhZGl1cygpLCBzdGQ6Om1pbihib3hIZWlnaHQsIGJveFdpZHRoKSk7CisgICAgICAgIEZs
b2F0UG9pbnQgbG9naWNhbENlbnRlciA9IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2lu
dChjZW50ZXJYLCBjZW50ZXJZKSwgbG9naWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2Rl
KTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVNoYXBlQ2lyY2xlKGxvZ2ljYWxDZW50ZXIsIHJh
ZGl1cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFz
aWNTaGFwZUVsbGlwc2VUeXBlOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKiBl
bGxpcHNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqPihiYXNpY1NoYXBl
KTsKKyAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+
Y2VudGVyWCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKKyAgICAgICAgZmxvYXQg
cmFkaXVzWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWCgpLCBib3hXaWR0
aCk7CisgICAgICAgIGZsb2F0IHJhZGl1c1kgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2Ut
PnJhZGl1c1koKSwgYm94SGVpZ2h0KTsKKyAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVy
ID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBs
b2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworICAgICAgICBGbG9hdFNpemUg
bG9naWNhbFJhZGlpID0gcGh5c2ljYWxTaXplVG9Mb2dpY2FsKEZsb2F0U2l6ZShyYWRpdXNYLCBy
YWRpdXNZKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNoYXBlID0gY3JlYXRlU2hhcGVFbGxp
cHNlKGxvZ2ljYWxDZW50ZXIsIGxvZ2ljYWxSYWRpaSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVBvbHlnb25UeXBlOiB7CisgICAgICAg
IGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNTaGFwZVBvbHlnb24qPihiYXNpY1NoYXBlKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPExlbmd0
aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAgICAgICBzaXplX3QgdmFsdWVzU2l6
ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlc1NpemUgJSAyKSk7Cisg
ICAgICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcyA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8RmxvYXRQb2ludD4odmFsdWVzU2l6ZSAvIDIpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlc1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAgRmxvYXRQ
b2ludCB2ZXJ0ZXgoCisgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMu
YXQoaSksIGJveFdpZHRoKSwKKyAgICAgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZh
bHVlcy5hdChpICsgMSksIGJveEhlaWdodCkpOworICAgICAgICAgICAgKCp2ZXJ0aWNlcylbaSAv
IDJdID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbCh2ZXJ0ZXgsIGxvZ2ljYWxCb3hTaXplLmhlaWdo
dCgpLCB3cml0aW5nTW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVBv
bHlnb25TaGFwZSh2ZXJ0aWNlcy5yZWxlYXNlKCksIHBvbHlnb24tPndpbmRSdWxlKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNl
dFJlY3RhbmdsZVR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xl
KiByZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlSW5zZXRSZWN0YW5nbGUq
PihiYXNpY1NoYXBlKTsKKyAgICAgICAgZmxvYXQgbGVmdCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgo
cmVjdGFuZ2xlLT5sZWZ0KCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxvYXQgdG9wID0gZmxvYXRW
YWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnRvcCgpLCBib3hIZWlnaHQpOworICAgICAgICBGbG9h
dFJlY3QgYm91bmRzKAorICAgICAgICAgICAgbGVmdCwKKyAgICAgICAgICAgIHRvcCwKKyAgICAg
ICAgICAgIGJveFdpZHRoIC0gbGVmdCAtIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5y
aWdodCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBib3hIZWlnaHQgLSB0b3AgLSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+Ym90dG9tKCksIGJveEhlaWdodCkpOworICAgICAgICBM
ZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgpOworICAgICAg
ICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWSgpOworICAg
ICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCisgICAgICAgICAgICByYWRpdXNYTGVuZ3RoLmlz
VW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNYTGVuZ3RoLCBib3hX
aWR0aCksCisgICAgICAgICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxv
YXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQpKTsKKyAgICAgICAgRmxv
YXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91bmRzLCBsb2dp
Y2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNoYXBlID0gY3Jl
YXRlUmVjdGFuZ2xlU2hhcGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNv
cm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBzaGFw
ZS0+bV93cml0aW5nTW9kZSA9IHdyaXRpbmdNb2RlOworICAgIHNoYXBlLT5tX21hcmdpbiA9IGZs
b2F0VmFsdWVGb3JMZW5ndGgobWFyZ2luLCAwKTsKKyAgICBzaGFwZS0+bV9wYWRkaW5nID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChwYWRkaW5nLCAwKTsKKworICAgIHJldHVybiBzaGFwZS5yZWxlYXNl
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDllY2ZkNzIwYmQwZGQ1MzgwNDEzMThjOTgyNWJm
MzM3MTFlNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlX2gKKyNk
ZWZpbmUgU2hhcGVfaAorCisjaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKKyNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCisjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgTGluZVNlZ21lbnQgeworICAgIExpbmVTZWdtZW50KGZsb2F0IGxvZ2ljYWxMZWZ0
LCBmbG9hdCBsb2dpY2FsUmlnaHQpCisgICAgICAgIDogbG9naWNhbExlZnQobG9naWNhbExlZnQp
CisgICAgICAgICwgbG9naWNhbFJpZ2h0KGxvZ2ljYWxSaWdodCkKKyAgICB7CisgICAgfQorCisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodDsK
K307CisKK3R5cGVkZWYgVmVjdG9yPExpbmVTZWdtZW50PiBTZWdtZW50TGlzdDsKKworCisvLyBB
IHJlcHJlc2VudGF0aW9uIG9mIGEgQmFzaWNTaGFwZSB0aGF0IGVuYWJsZXMgbGF5b3V0IGNvZGUg
dG8gZGV0ZXJtaW5lIGhvdyB0byBicmVhayBhIGxpbmUgdXAgaW50byBzZWdtZW50cworLy8gdGhh
dCB3aWxsIGZpdCB3aXRoaW4gb3IgYXJvdW5kIGEgc2hhcGUuIFRoZSBsaW5lIGlzIGRlZmluZWQg
YnkgYSBwYWlyIG9mIGxvZ2ljYWwgWSBjb29yZGluYXRlcyBhbmQgdGhlCisvLyBjb21wdXRlZCBz
ZWdtZW50cyBhcmUgcmV0dXJuZWQgYXMgcGFpcnMgb2YgbG9naWNhbCBYIGNvb3JkaW5hdGVzLiBU
aGUgQmFzaWNTaGFwZSBpdHNlbGYgaXMgZGVmaW5lZCBpbgorLy8gcGh5c2ljYWwgY29vcmRpbmF0
ZXMuCisKK2NsYXNzIFNoYXBlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTaGFw
ZT4gY3JlYXRlU2hhcGUoY29uc3QgQmFzaWNTaGFwZSosIGNvbnN0IExheW91dFNpemUmIGxvZ2lj
YWxCb3hTaXplLCBXcml0aW5nTW9kZSwgTGVuZ3RoIG1hcmdpbiwgTGVuZ3RoIHBhZGRpbmcpOwor
CisgICAgdmlydHVhbCB+U2hhcGUoKSB7IH0KKworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFw
ZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIExheW91
dFJlY3Qgc2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNs
dWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1
ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNs
dWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVz
dWx0KSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBmbG9hdCBzaGFwZU1hcmdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9CisgICAgZmxvYXQgc2hhcGVQYWRkaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9wYWRkaW5nOyB9CisKK3ByaXZhdGU6CisgICAgV3JpdGluZ01vZGUgbV93cml0
aW5nTW9kZTsKKyAgICBmbG9hdCBtX21hcmdpbjsKKyAgICBmbG9hdCBtX3BhZGRpbmc7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFwZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTExNTU4
MzIxY2NmOGZlMGMyODAyN2E0NWZjN2IyMzZhNTc1N2YzZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcApAQCAtMCwwICsxLDgx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisg
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTaGFwZUluZm8uaCIKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5k
ZXJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3RlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIFNoYXBl
VmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChTaGFwZTo6
KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNv
bnN0PgorY29uc3QgU2hhcGUqIFNoYXBlSW5mbzxSZW5kZXJUeXBlLCBzaGFwZUdldHRlciwgaW50
ZXJ2YWxHZXR0ZXI+Ojpjb21wdXRlZFNoYXBlKCkgY29uc3QKK3sKKyAgICBpZiAoU2hhcGUqIHNo
YXBlID0gbV9zaGFwZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNoYXBlOworCisgICAgU2hhcGVW
YWx1ZSogc2hhcGVWYWx1ZSA9IChtX3JlbmRlcmVyLT5zdHlsZSgpLT4qc2hhcGVHZXR0ZXIpKCk7
CisgICAgQmFzaWNTaGFwZSogc2hhcGUgPSAoc2hhcGVWYWx1ZSAmJiBzaGFwZVZhbHVlLT50eXBl
KCkgPT0gU2hhcGVWYWx1ZTo6U2hhcGUpID8gc2hhcGVWYWx1ZS0+c2hhcGUoKSA6IDA7CisKKyAg
ICBBU1NFUlQoc2hhcGUpOworCisgICAgbV9zaGFwZSA9IFNoYXBlOjpjcmVhdGVTaGFwZShzaGFw
ZSwgTGF5b3V0U2l6ZShtX3NoYXBlTG9naWNhbFdpZHRoLCBtX3NoYXBlTG9naWNhbEhlaWdodCks
IG1fcmVuZGVyZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCksIG1fcmVuZGVyZXItPnN0eWxlKCkt
PnNoYXBlTWFyZ2luKCksIG1fcmVuZGVyZXItPnN0eWxlKCktPnNoYXBlUGFkZGluZygpKTsKKyAg
ICBBU1NFUlQobV9zaGFwZSk7CisgICAgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7Cit9CisKK3RlbXBs
YXRlPGNsYXNzIFJlbmRlclR5cGUsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0
dGVyKSgpIGNvbnN0LCB2b2lkIChTaGFwZTo6KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBM
YXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0PgorYm9vbCBTaGFwZUluZm88UmVuZGVyVHlw
ZSwgc2hhcGVHZXR0ZXIsIGludGVydmFsR2V0dGVyPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShM
YXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkKK3sKKyAgICBBU1NFUlQo
bGluZUhlaWdodCA+PSAwKTsKKyAgICBtX3NoYXBlTGluZVRvcCA9IGxpbmVUb3AgLSBsb2dpY2Fs
VG9wT2Zmc2V0KCk7CisgICAgbV9saW5lSGVpZ2h0ID0gbGluZUhlaWdodDsKKyAgICBtX3NlZ21l
bnRzLmNsZWFyKCk7CisKKyAgICBpZiAobGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkKKyAgICAg
ICAgKGNvbXB1dGVkU2hhcGUoKS0+KmludGVydmFsR2V0dGVyKShtX3NoYXBlTGluZVRvcCwgc3Rk
OjptaW4obV9saW5lSGVpZ2h0LCBzaGFwZUxvZ2ljYWxCb3R0b20oKSAtIGxpbmVUb3ApLCBtX3Nl
Z21lbnRzKTsKKworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSB0aGlzLT5sb2dp
Y2FsTGVmdE9mZnNldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zZWdtZW50cy5z
aXplKCk7IGkrKykgeworICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2ljYWxMZWZ0ICs9IGxvZ2lj
YWxMZWZ0T2Zmc2V0OworICAgICAgICBtX3NlZ21lbnRzW2ldLmxvZ2ljYWxSaWdodCArPSBsb2dp
Y2FsTGVmdE9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7Cit9
CisKK3RlbXBsYXRlIGNsYXNzIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpy
ZXNvbHZlZFNoYXBlSW5zaWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjsKK3RlbXBs
YXRlIGNsYXNzIFNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRl
LCAmU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUxM2QzMmE1ZDYw
OTVmNWQyZjA5OGU4ZmIwOTBhNjEyYzU0ZTMzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8q
CisqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisqICAgIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyogT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUgorKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisqIFNVQ0ggREFNQUdFLgorKi8KKwor
I2lmbmRlZiBTaGFwZUluZm9faAorI2RlZmluZSBTaGFwZUluZm9faAorCisjaWYgRU5BQkxFKENT
U19TSEFQRVMpCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1
ZGUgIlNoYXBlVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPGNsYXNzIEtleVR5
cGUsIGNsYXNzIEluZm9UeXBlPgorY2xhc3MgTWFwcGVkSW5mbyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIEluZm9UeXBlKiBlbnN1cmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkKKyAgICB7CisgICAg
ICAgIEluZm9NYXAmIGluZm9NYXAgPSBNYXBwZWRJbmZvPEtleVR5cGUsIEluZm9UeXBlPjo6aW5m
b01hcCgpOworICAgICAgICBpZiAoSW5mb1R5cGUqIGluZm8gPSBpbmZvTWFwLmdldChrZXkpKQor
ICAgICAgICAgICAgcmV0dXJuIGluZm87CisgICAgICAgIHR5cGVuYW1lIEluZm9NYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBpbmZvTWFwLmFkZChrZXksIEluZm9UeXBlOjpjcmVhdGVJbmZvKGtleSkp
OworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9Cisg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlSW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsgaW5mb01hcCgp
LnJlbW92ZShrZXkpOyB9CisgICAgc3RhdGljIEluZm9UeXBlKiBpbmZvKGNvbnN0IEtleVR5cGUq
IGtleSkgeyByZXR1cm4gaW5mb01hcCgpLmdldChrZXkpOyB9Citwcml2YXRlOgorICAgIHR5cGVk
ZWYgSGFzaE1hcDxjb25zdCBLZXlUeXBlKiwgT3duUHRyPEluZm9UeXBlPiA+IEluZm9NYXA7Cisg
ICAgc3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQorICAgIHsKKyAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChJbmZvTWFwLCBzdGF0aWNJbmZvTWFwLCAoKSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNJbmZvTWFwOworICAgIH0KK307CisKK3RlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIFNoYXBl
VmFsdWUqIChSZW5kZXJTdHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChTaGFwZTo6
KmludGVydmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNv
bnN0PgorY2xhc3MgU2hhcGVJbmZvIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5TaGFwZUluZm8oKSB7IH0KKworICAgIHZvaWQgc2V0U2hhcGVT
aXplKExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpCisg
ICAgeworICAgICAgICBpZiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09O
VEVOVF9CT1gpIHsKKyAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLT5ib3Jk
ZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0IC09
IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobV9zaGFwZUxvZ2ljYWxXaWR0aCA9PSBsb2dpY2FsV2lkdGggJiYgbV9z
aGFwZUxvZ2ljYWxIZWlnaHQgPT0gbG9naWNhbEhlaWdodCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGlydHlTaGFwZVNpemUoKTsKKyAgICAgICAgbV9zaGFwZUxvZ2ljYWxXaWR0aCA9
IGxvZ2ljYWxXaWR0aDsKKyAgICAgICAgbV9zaGFwZUxvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVp
Z2h0OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KTsKKyAgICB2b2lkIGNsZWFy
U2VnbWVudHMoKSB7IG1fc2VnbWVudHMuY2xlYXIoKTsgfQorCisgICAgTGF5b3V0VW5pdCBzaGFw
ZUxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5n
Qm94KCkueSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxv
Z2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5n
Qm94KCkubWF4WSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFw
ZUxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGlu
Z0JveCgpLngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBl
TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGlu
Z0JveCgpLm1heFgoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNo
YXBlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3Vu
ZGluZ0JveCgpLndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5oZWlnaHQo
KTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZVRvcCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhcGVMaW5lVG9wICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGluZUJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9wICsgbV9saW5lSGVp
Z2h0ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisKKyAgICBMYXlvdXRVbml0IHNoYXBlQ29udGFp
bmluZ0Jsb2NrSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXItPnN0eWxlKCktPmJv
eFNpemluZygpID09IENPTlRFTlRfQk9YKSA/IChtX3NoYXBlTG9naWNhbEhlaWdodCArIG1fcmVu
ZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpIDogbV9zaGFwZUxvZ2ljYWxI
ZWlnaHQ7IH0KKworICAgIGJvb2wgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBsb2dpY2FsTGluZVRvcCgpIDwgc2hhcGVMb2dpY2FsQm90dG9tKCkgJiYgc2hhcGVMb2dp
Y2FsVG9wKCkgPD0gbG9naWNhbExpbmVCb3R0b20oKTsgfQorICAgIGJvb2wgbGluZVdpdGhpblNo
YXBlQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiAo
bG9naWNhbExpbmVCb3R0b20oKSA8PSBzaGFwZUxvZ2ljYWxCb3R0b20oKSk7IH0KKworICAgIHZv
aWQgZGlydHlTaGFwZVNpemUoKSB7IG1fc2hhcGUuY2xlYXIoKTsgfQorICAgIGJvb2wgc2hhcGVT
aXplRGlydHkoKSB7IHJldHVybiAhbV9zaGFwZS5nZXQoKTsgfQorICAgIGNvbnN0IFJlbmRlclR5
cGUqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgU2hhcGVJbmZvKGNvbnN0IFJlbmRlclR5cGUqIHJlbmRlcmVyKTogbV9yZW5kZXJlcihyZW5k
ZXJlcikgeyB9CisKKyAgICBjb25zdCBTaGFwZSogY29tcHV0ZWRTaGFwZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29u
c3QgPSAwOworCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBtX3Jl
bmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiBMYXlvdXRVbml0KCk7IH07CisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlbmRlcmVy
LT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCAmJiAhbV9yZW5kZXJlci0+aXNS
ZW5kZXJSZWdpb24oKSkgPyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nU3RhcnQoKSA6IExh
eW91dFVuaXQoKTsgfQorCisgICAgTGF5b3V0VW5pdCBtX3NoYXBlTGluZVRvcDsKKyAgICBMYXlv
dXRVbml0IG1fbGluZUhlaWdodDsKKyAgICBTZWdtZW50TGlzdCBtX3NlZ21lbnRzOworCitwcml2
YXRlOgorICAgIG11dGFibGUgT3duUHRyPFNoYXBlPiBtX3NoYXBlOworCisgICAgTGF5b3V0VW5p
dCBtX3NoYXBlTG9naWNhbFdpZHRoOworICAgIExheW91dFVuaXQgbV9zaGFwZUxvZ2ljYWxIZWln
aHQ7CisgICAgY29uc3QgUmVuZGVyVHlwZSogbV9yZW5kZXJlcjsKK307Cit9CisjZW5kaWYKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lk
ZUluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxMjk1ZDAzZWRiMjczZmFlN2JhYmVjZDFjNGJhZTA5ZWFh
Y2UwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXBlSW5zaWRl
SW5mby5oIgorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisKKyNpbmNsdWRlICJJbmxpbmVJdGVy
YXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworTGluZVNlZ21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVyYXRv
ciYgc3RhcnQsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQpCisgICAgOiBzdGFydChzdGFydC5y
b290KCksIHN0YXJ0Lm9iamVjdCgpLCBzdGFydC5vZmZzZXQoKSkKKyAgICAsIGVuZChlbmQucm9v
dCgpLCBlbmQub2JqZWN0KCksIGVuZC5vZmZzZXQoKSkKKyAgICB7CisgICAgfQorCitib29sIFNo
YXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikK
K3sKKyAgICBTaGFwZVZhbHVlKiBzaGFwZVZhbHVlID0gcmVuZGVyZXItPnN0eWxlKCktPnJlc29s
dmVkU2hhcGVJbnNpZGUoKTsKKyAgICBpZiAoIXNoYXBlVmFsdWUgfHwgc2hhcGVWYWx1ZS0+dHlw
ZSgpICE9IFNoYXBlVmFsdWU6OlNoYXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBC
YXNpY1NoYXBlKiBzaGFwZSA9IHNoYXBlVmFsdWUtPnNoYXBlKCk7CisgICAgcmV0dXJuIHNoYXBl
ICYmIHNoYXBlLT50eXBlKCkgIT0gQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xl
VHlwZTsKK30KKworYm9vbCBTaGFwZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVG9wKGZs
b2F0IG1pblNlZ21lbnRXaWR0aCkKK3sKKyAgICBjb25zdCBTaGFwZSogc2hhcGUgPSBjb21wdXRl
ZFNoYXBlKCk7CisgICAgaWYgKCFzaGFwZSB8fCBtX2xpbmVIZWlnaHQgPD0gMCB8fCBsb2dpY2Fs
TGluZVRvcCgpID4gc2hhcGVMb2dpY2FsQm90dG9tKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIExheW91dFVuaXQgbmV3TGluZVRvcDsKKyAgICBpZiAoc2hhcGUtPmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AobV9zaGFwZUxpbmVUb3AsIExheW91dFNpemUobWluU2VnbWVu
dFdpZHRoLCBtX2xpbmVIZWlnaHQpLCBuZXdMaW5lVG9wKSkgeworICAgICAgICBpZiAobmV3TGlu
ZVRvcCA+IG1fc2hhcGVMaW5lVG9wKSB7CisgICAgICAgICAgICBtX3NoYXBlTGluZVRvcCA9IG5l
d0xpbmVUb3A7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDA2YjM2NDU0
YjlkYWIxYzIwMjY1NzcwNWVkNDk3MTg5YmM3ZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaApAQCAtMCwwICsxLDEx
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgor
ICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXBlSW5zaWRlSW5m
b19oCisjZGVmaW5lIFNoYXBlSW5zaWRlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
KworI2luY2x1ZGUgIlNoYXBlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElu
bGluZUl0ZXJhdG9yOworY2xhc3MgUmVuZGVyQmxvY2s7CitjbGFzcyBSZW5kZXJPYmplY3Q7CisK
K3N0cnVjdCBMaW5lU2VnbWVudEl0ZXJhdG9yIHsKKyAgICBSZW5kZXJPYmplY3QqIHJvb3Q7Cisg
ICAgUmVuZGVyT2JqZWN0KiBvYmplY3Q7CisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIExpbmVT
ZWdtZW50SXRlcmF0b3IoUmVuZGVyT2JqZWN0KiByb290LCBSZW5kZXJPYmplY3QqIG9iamVjdCwg
dW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IHJvb3Qocm9vdCkKKyAgICAgICAgLCBvYmplY3Qo
b2JqZWN0KQorICAgICAgICAsIG9mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KK307CisKK3N0
cnVjdCBMaW5lU2VnbWVudFJhbmdlIHsKKyAgICBMaW5lU2VnbWVudEl0ZXJhdG9yIHN0YXJ0Owor
ICAgIExpbmVTZWdtZW50SXRlcmF0b3IgZW5kOworICAgIExpbmVTZWdtZW50UmFuZ2UoY29uc3Qg
SW5saW5lSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kKTsKK307CisK
K3R5cGVkZWYgVmVjdG9yPExpbmVTZWdtZW50UmFuZ2U+IFNlZ21lbnRSYW5nZUxpc3Q7CisKK2Ns
YXNzIFNoYXBlSW5zaWRlSW5mbyA6IHB1YmxpYyBTaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5k
ZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFs
cz4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlSW5zaWRlSW5mbz4gY3Jl
YXRlSW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBTaGFwZUluc2lkZUluZm8ocmVuZGVyZXIpKTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmFi
bGVkRm9yKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUhlaWdodCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fc2VnbWVudFJhbmdlcy5jbGVhcigp
OworICAgICAgICByZXR1cm4gU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJl
c29sdmVkU2hhcGVJbnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+Ojpjb21wdXRl
U2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpOworICAgIH0KKworICAgIGJvb2wg
aGFzU2VnbWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxpbmVPdmVybGFwc1No
YXBlQm91bmRzKCkgJiYgbV9zZWdtZW50cy5zaXplKCk7CisgICAgfQorICAgIGNvbnN0IFNlZ21l
bnRMaXN0JiBzZWdtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzU2VnbWVu
dHMoKSk7CisgICAgICAgIHJldHVybiBtX3NlZ21lbnRzOworICAgIH0KKyAgICBTZWdtZW50UmFu
Z2VMaXN0JiBzZWdtZW50UmFuZ2VzKCkgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9CisgICAg
Y29uc3QgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1f
c2VnbWVudFJhbmdlczsgfQorICAgIGNvbnN0IExpbmVTZWdtZW50KiBjdXJyZW50U2VnbWVudCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc1NlZ21lbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgQVNTRVJUKG1fc2VnbWVudFJhbmdlcy5zaXplKCkgPCBtX3NlZ21l
bnRzLnNpemUoKSk7CisgICAgICAgIHJldHVybiAmbV9zZWdtZW50c1ttX3NlZ21lbnRSYW5nZXMu
c2l6ZSgpXTsKKyAgICB9CisgICAgYm9vbCBhZGp1c3RMb2dpY2FsTGluZVRvcChmbG9hdCBtaW5T
ZWdtZW50V2lkdGgpOworCisgICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIHZhbHVlKSB7IG1f
bmVlZHNMYXlvdXQgPSB2YWx1ZTsgfQorICAgIGJvb2wgbmVlZHNMYXlvdXQoKSB7IHJldHVybiBt
X25lZWRzTGF5b3V0OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgY29t
cHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNv
bXB1dGVkU2hhcGUoKS0+c2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KKworcHJp
dmF0ZToKKyAgICBTaGFwZUluc2lkZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQor
ICAgIDogU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJ
bnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+IChyZW5kZXJlcikKKyAgICAsIG1f
bmVlZHNMYXlvdXQoZmFsc2UpCisgICAgeyB9CisKKyAgICBTZWdtZW50UmFuZ2VMaXN0IG1fc2Vn
bWVudFJhbmdlczsKKyAgICBib29sIG1fbmVlZHNMYXlvdXQ6MTsKK307CisKK30KKyNlbmRpZgor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
SW50ZXJ2YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVy
dmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNTU4MDM4YjI0N2MzYzg3NTcyZTU4NjBmMDhjODE5MmIyMWJh
NDUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUludGVydmFsLmNwcApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICog
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJbnRlcnZhbFgxQ29tcGFy
YXRvciB7CisgICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBTaGFwZUludGVydmFsJiBpMSwgY29u
c3QgU2hhcGVJbnRlcnZhbCYgaTIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaTEueDEg
PCBpMi54MTsKKyAgICB9Cit9OworCitib29sIFNoYXBlSW50ZXJ2YWw6OmludGVyc2VjdChjb25z
dCBTaGFwZUludGVydmFsJiBpLCBTaGFwZUludGVydmFsJiBydikgY29uc3QKK3sKKyAgICBpZiAo
eDIgPCBpLngxIHx8IHgxID4gaS54MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJ2Lngx
ID0gc3RkOjptYXgoeDEsIGkueDEpOworICAgIHJ2LngyID0gc3RkOjptaW4oeDIsIGkueDIpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIHNvcnRTaGFwZUludGVydmFscyhWZWN0b3I8U2hh
cGVJbnRlcnZhbD4mIHYpCit7CisgICAgc3RkOjpzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSwgSW50
ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7Cit9CisKK3ZvaWQgbWVyZ2VTaGFwZUludGVydmFscyhjb25z
dCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4m
IHYyLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJ2KQoreworICAgIGlmICghdjEuc2l6ZSgpKQor
ICAgICAgICBydi5hcHBlbmRSYW5nZSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSk7CisgICAgZWxzZSBp
ZiAoIXYyLnNpemUoKSkKKyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5k
KCkpOworICAgIGVsc2UgeworICAgICAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gdih2MS5zaXpl
KCkgKyB2Mi5zaXplKCkpOworICAgICAgICBTaGFwZUludGVydmFsKiBpbnRlcnZhbCA9IDA7CisK
KyAgICAgICAgc3RkOjptZXJnZSh2MS5iZWdpbigpLCB2MS5lbmQoKSwgdjIuYmVnaW4oKSwgdjIu
ZW5kKCksIHYuYmVnaW4oKSwgSW50ZXJ2YWxYMUNvbXBhcmF0b3IoKSk7CisKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWlu
dGVydmFsKQorICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07CisgICAgICAgICAgICBl
bHNlIGlmICh2W2ldLngxID49IGludGVydmFsLT54MSAmJiB2W2ldLngxIDw9IGludGVydmFsLT54
MikgLy8gRklYTUU6IDFzdCA8PSB0ZXN0IG5vdCBuZWVkZWQ/CisgICAgICAgICAgICAgICAgaW50
ZXJ2YWwtPngyID0gc3RkOjptYXgoaW50ZXJ2YWwtPngyLCB2W2ldLngyKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOworICAgICAgICAg
ICAgICAgIGludGVydmFsID0gJnZbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaW50ZXJ2YWwpCisgICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKKyAg
ICB9Cit9CisKK3ZvaWQgaW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBl
SW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPFNo
YXBlSW50ZXJ2YWw+JiBydikKK3sKKyAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOworICAg
IHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAgICBpZiAoIXYxU2l6ZSB8fCAhdjJTaXpl
KQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFwZUludGVydmFsIGludGVydmFsOworICAgIGJv
b2wgb3ZlcmxhcCA9IGZhbHNlOworICAgIHNpemVfdCBpMSA9IDA7CisgICAgc2l6ZV90IGkyID0g
MDsKKworICAgIHdoaWxlIChpMSA8IHYxU2l6ZSAmJiBpMiA8IHYyU2l6ZSkgeworICAgICAgICBT
aGFwZUludGVydmFsIHYxMjsKKyAgICAgICAgaWYgKHYxW2kxXS5pbnRlcnNlY3QodjJbaTJdLCB2
MTIpKSB7CisgICAgICAgICAgICBpZiAoIW92ZXJsYXAgfHwgIXYxMi5pbnRlcnNlY3QoaW50ZXJ2
YWwsIGludGVydmFsKSkgeworICAgICAgICAgICAgICAgIGlmIChvdmVybGFwKQorICAgICAgICAg
ICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGludGVydmFs
ID0gdjEyOworICAgICAgICAgICAgICAgIG92ZXJsYXAgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHYxW2kxXS54MiA8IHYyW2kyXS54MikKKyAgICAgICAgICAgICAgICBp
MSsrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGkyKys7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgICAgICAgICBydi5hcHBl
bmQoaW50ZXJ2YWwpOworICAgICAgICAgICAgb3ZlcmxhcCA9IGZhbHNlOworICAgICAgICAgICAg
aWYgKHYxW2kxXS54MSA8IHYyW2kyXS54MSkKKyAgICAgICAgICAgICAgICBpMSsrOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGkyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAob3ZlcmxhcCkKKyAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKK30KKwordm9pZCBz
dWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjEsIGNv
bnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFwZUludGVydmFsPiYgcnYp
Cit7CisgICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKKyAgICBzaXplX3QgdjJTaXplID0g
djIuc2l6ZSgpOworCisgICAgaWYgKCF2MVNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghdjJTaXplKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7
CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCBpMSA9IDAsIGkyID0gMDsKKyAgICAgICAgcnYu
YXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworCisgICAgICAgIHdoaWxlIChpMSA8
IHJ2LnNpemUoKSAmJiBpMiA8IHYyU2l6ZSkgeworICAgICAgICAgICAgU2hhcGVJbnRlcnZhbCYg
aW50ZXJ2YWwxID0gcnZbaTFdOworICAgICAgICAgICAgY29uc3QgU2hhcGVJbnRlcnZhbCYgaW50
ZXJ2YWwyID0gdjJbaTJdOworCisgICAgICAgICAgICBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVy
dmFsMS54MSAmJiBpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwxLngyKQorICAgICAgICAgICAgICAg
IHJ2LnJlbW92ZShpMSk7CisgICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDIgPCBpbnRl
cnZhbDEueDEpCisgICAgICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGludGVydmFsMi54MSA+IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAgICBpMSArPSAxOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngxICYmIGludGVy
dmFsMi54MiA8IGludGVydmFsMS54MikgeworICAgICAgICAgICAgICAgIHJ2Lmluc2VydChpMSwg
U2hhcGVJbnRlcnZhbChpbnRlcnZhbDEueDEsIGludGVydmFsMi54MSkpOworICAgICAgICAgICAg
ICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54MjsKKyAgICAgICAgICAgICAgICBpMiArPSAx
OworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxKSB7
CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOworICAgICAgICAg
ICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICB9IGVsc2UgIHsgLy8gKGludGVydmFsMi54MiA+
PSBpbnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngyID0gaW50ZXJ2YWwy
LngxOworICAgICAgICAgICAgICAgIGkxICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZmMTRkOGE1YTcy
MzJkOTJlZGEzZGZkOTM3NzhhOTJjZDY5NTQ0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNoYXBlSW50ZXJ2YWxfaAorI2RlZmluZSBTaGFwZUludGVydmFsX2gK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgU2hhcGVJbnRlcnZhbCB7CitwdWJsaWM6CisgICAgZmxvYXQgeDE7CisgICAgZmxvYXQgeDI7
CisKKyAgICBTaGFwZUludGVydmFsKGZsb2F0IHgxID0gMCwgZmxvYXQgeDIgPSAwKQorICAgICAg
ICA6IHgxKHgxKQorICAgICAgICAsIHgyKHgyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlu
dGVyc2VjdChjb25zdCBTaGFwZUludGVydmFsJiwgU2hhcGVJbnRlcnZhbCYpIGNvbnN0OworfTsK
Kwordm9pZCBzb3J0U2hhcGVJbnRlcnZhbHMoVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7Cit2b2lk
IG1lcmdlU2hhcGVJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgY29uc3Qg
VmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+Jik7Cit2b2lkIGlu
dGVyc2VjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIGNvbnN0
IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBz
dWJ0cmFjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIGNvbnN0
IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVydmFsPiYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFwZUludGVydmFsX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmUxOTJmNjUwNWQ4MjEyODM5MjgyZmFkOTNlNmUyNjNiMGRhZDIxZjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lk
ZUluZm8uY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRv
YmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5j
bHVkZSAiU2hhcGVPdXRzaWRlSW5mby5oIgorCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2Jvb2wgU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNv
bnN0IFJlbmRlckJveCogYm94KQoreworICAgIFNoYXBlVmFsdWUqIHZhbHVlID0gYm94LT5zdHls
ZSgpLT5zaGFwZU91dHNpZGUoKTsKKyAgICByZXR1cm4gYm94LT5pc0Zsb2F0aW5nV2l0aFNoYXBl
T3V0c2lkZSgpICYmIHZhbHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6U2hhcGUgJiYgdmFsdWUt
PnNoYXBlKCk7Cit9CisKK2Jvb2wgU2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9y
TGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkKK3sKKyAgICBp
ZiAoc2hhcGVTaXplRGlydHkoKSB8fCBtX2xpbmVUb3AgIT0gbGluZVRvcCB8fCBtX2xpbmVIZWln
aHQgIT0gbGluZUhlaWdodCkgeworICAgICAgICBpZiAoU2hhcGVJbmZvPFJlbmRlckJveCwgJlJl
bmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+Ojpj
b21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpKSB7CisgICAgICAgICAg
ICBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1swXS5sb2dp
Y2FsTGVmdCAtIHNoYXBlTG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgIG1fcmlnaHRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhID0gbV9zZWdtZW50c1ttX3NlZ21lbnRzLnNpemUoKS0xXS5s
b2dpY2FsUmlnaHQgLSBzaGFwZUxvZ2ljYWxSaWdodCgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7CisgICAgICAg
ICAgICBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IDA7CisgICAgICAgIH0K
KyAgICAgICAgbV9saW5lVG9wID0gbGluZVRvcDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9zZWdt
ZW50cy5zaXplKCk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmU1OTA1NmNjMWVk
N2QwMjQ2MmVmNGE0NzE2Y2QzOTdiYmVhM2QzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT
4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YK
KyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZU91dHNpZGVJ
bmZvX2gKKyNkZWZpbmUgU2hhcGVPdXRzaWRlSW5mb19oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKKworI2luY2x1ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRlICJTaGFwZUluZm8uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJCb3g7CisKK2NsYXNzIFNoYXBlT3V0
c2lkZUluZm8gOiBwdWJsaWMgU2hhcGVJbmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFw
ZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHM+LCBwdWJsaWMgTWFwcGVkSW5m
bzxSZW5kZXJCb3gsIFNoYXBlT3V0c2lkZUluZm8+IHsKK3B1YmxpYzoKKyAgICBMYXlvdXRTaXpl
IHNoYXBlTG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFNpemUoc2hhcGVMb2dp
Y2FsTGVmdCgpLCBzaGFwZUxvZ2ljYWxUb3AoKSk7IH0KKworICAgIExheW91dFVuaXQgbGVmdFNl
Z21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2xlZnRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhOyB9CisgICAgTGF5b3V0VW5pdCByaWdodFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0U2VnbWVudFNoYXBlQm91
bmRpbmdCb3hEZWx0YTsgfQorCisgICAgdmlydHVhbCBib29sIGNvbXB1dGVTZWdtZW50c0Zvckxp
bmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpIE9WRVJSSURFOwor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGVPdXRzaWRlSW5mbz4gY3JlYXRlSW5mbyhjb25z
dCBSZW5kZXJCb3gqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcgU2hhcGVPdXRzaWRl
SW5mbyhyZW5kZXJlcikpOyB9CisgICAgc3RhdGljIGJvb2wgaXNFbmFibGVkRm9yKGNvbnN0IFJl
bmRlckJveCopOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVk
U2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21wdXRl
ZFNoYXBlKCktPnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KKworcHJpdmF0ZToK
KyAgICBTaGFwZU91dHNpZGVJbmZvKGNvbnN0IFJlbmRlckJveCogcmVuZGVyZXIpIDogU2hhcGVJ
bmZvPFJlbmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZTaGFwZTo6Z2V0RXhj
bHVkZWRJbnRlcnZhbHM+KHJlbmRlcmVyKSB7IH0KKworICAgIExheW91dFVuaXQgbV9sZWZ0U2Vn
bWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YTsKKyAgICBMYXlvdXRVbml0IG1fcmlnaHRTZWdtZW50
U2hhcGVCb3VuZGluZ0JveERlbHRhOworICAgIExheW91dFVuaXQgbV9saW5lVG9wOworfTsKKwor
fQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MTlkMzk1NzMyMzgyZjNiMjc2YWM1Njc2YTYyZGIxNmYwN2ZlY2I4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9FeGNsdXNpb25TaGFwZVZhbHVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVWYWx1
ZV9oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlVmFsdWVfaAotCi0jaW5jbHVkZSAiQmFzaWNTaGFw
ZXMuaCIKLSNpbmNsdWRlICJTdHlsZUltYWdlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFeGNsdXNpb25TaGFwZVZhbHVlIDog
cHVibGljIFJlZkNvdW50ZWQ8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gewotcHVibGljOgotICAgIGVu
dW0gRXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgewotICAgICAgICAvLyBUaGUgQXV0byB2YWx1ZSBp
cyBkZWZpbmVkIGJ5IGEgbnVsbCBFeGNsdXNpb25TaGFwZVZhbHVlKgotICAgICAgICBTaGFwZSwK
LSAgICAgICAgT3V0c2lkZSwKLSAgICAgICAgSW1hZ2UKLSAgICB9OwotCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gY3JlYXRlU2hhcGVWYWx1ZShQYXNzUmVmUHRy
PEJhc2ljU2hhcGU+IHNoYXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBF
eGNsdXNpb25TaGFwZVZhbHVlKHNoYXBlKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gY3JlYXRlT3V0c2lkZVZhbHVlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhjbHVzaW9uU2hhcGVWYWx1ZShPdXRzaWRlKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gY3JlYXRl
SW1hZ2VWYWx1ZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBFeGNsdXNpb25TaGFwZVZhbHVlKGltYWdlKSk7Ci0gICAgfQot
Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgIEJhc2ljU2hhcGUqIHNoYXBlKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5nZXQo
KTsgfQotICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQo
KTsgfQotICAgIHZvaWQgc2V0SW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2ltYWdlICE9IGltYWdlKQotICAgICAgICAgICAgbV9pbWFnZSA9
IGltYWdlOwotICAgIH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXhjbHVzaW9uU2hhcGVW
YWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCk7IH0KLQot
cHJpdmF0ZToKLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4g
c2hhcGUpCi0gICAgICAgIDogbV90eXBlKFNoYXBlKQotICAgICAgICAsIG1fc2hhcGUoc2hhcGUp
Ci0gICAgewotICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKEV4Y2x1c2lvblNoYXBlVmFs
dWVUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgewotICAgIH0KLSAgICBF
eGNsdXNpb25TaGFwZVZhbHVlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCi0gICAgICAg
IDogbV90eXBlKEltYWdlKQotICAgICAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgewotICAgIH0K
LSAgICBFeGNsdXNpb25TaGFwZVZhbHVlVHlwZSBtX3R5cGU7Ci0gICAgUmVmUHRyPEJhc2ljU2hh
cGU+IG1fc2hhcGU7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1faW1hZ2U7Ci19OwotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAKaW5kZXggZmJiZDZmMDlhNGQ4YzY4ZDdhYTE1MGU3NGI0MzQyMGI3ZWJjNGM1Mi4uM2JmN2Qy
ZDhmZjRlOTI0ZjgzNmI5NDcwOTg3OTBiZDJjZmYxYzBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC0xNzMzLDkgKzE3MzMsOSBAQCB2
b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldChMZW5ndGhCb3ggb3V0c2V0KQog
ICAgIHN1cnJvdW5kLmFjY2VzcygpLT5ib3JkZXIubV9pbWFnZS5zZXRPdXRzZXQob3V0c2V0KTsK
IH0KIAotRXhjbHVzaW9uU2hhcGVWYWx1ZSogUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lk
ZSgpCitTaGFwZVZhbHVlKiBSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlKCkKIHsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiwgc091dHNp
ZGVWYWx1ZSwgKEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U2hhcGVWYWx1ZT4sIHNPdXRzaWRlVmFsdWUs
IChTaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSkpOwogICAgIHJldHVybiBzT3V0c2lk
ZVZhbHVlLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCmluZGV4IDlkZjU3MjVkZGQ3OWNmOGY3YjBkMTQzNGNiM2E1M2RlYTVjZjBhZWIu
LmY5Y2QyNTEzNTNiY2VlMTdlYzBlN2U0YTRmNzZjNzdiNGJjOWFmNjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0zNCw3ICszNCw2IEBACiAj
aW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkNvdW50ZXJEaXJlY3RpdmVzLmgiCiAj
aW5jbHVkZSAiRGF0YVJlZi5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKICNp
bmNsdWRlICJGb250QmFzZWxpbmUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCkBAIC00OSw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlNoYWRvd0RhdGEuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAjaW5jbHVkZSAiU3R5bGVC
YWNrZ3JvdW5kRGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlQm94RGF0YS5oIgogI2luY2x1ZGUgIlN0
eWxlRGVwcmVjYXRlZEZsZXhpYmxlQm94RGF0YS5oIgpAQCAtMTQ3MCwzMSArMTQ3MCwzMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRLZXJuaW5nKFNWR0xlbmd0aCBrKSB7IGFjY2Vzc1NWR1N0eWxl
KCktPnNldEtlcm5pbmcoayk7IH0KICNlbmRpZgogCi0gICAgdm9pZCBzZXRTaGFwZUluc2lkZShQ
YXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKQorICAgIHZvaWQgc2V0U2hhcGVJ
bnNpZGUoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZUluc2lkZSA9PSB2YWx1ZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fc2hhcGVJ
bnNpZGUgPSB2YWx1ZTsKICAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVJbnNp
ZGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZUluc2lkZS5n
ZXQoKTsgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHJlc29sdmVkU2hhcGVJbnNpZGUoKSBj
b25zdAorICAgIFNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlKCkgY29uc3QgeyByZXR1cm4gcmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fc2hhcGVJbnNpZGUuZ2V0KCk7IH0KKyAgICBTaGFwZVZhbHVlKiBy
ZXNvbHZlZFNoYXBlSW5zaWRlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEV4Y2x1c2lvblNoYXBl
VmFsdWUqIHNoYXBlSW5zaWRlID0gdGhpcy0+c2hhcGVJbnNpZGUoKTsKLSAgICAgICAgaWYgKHNo
YXBlSW5zaWRlICYmIHNoYXBlSW5zaWRlLT50eXBlKCkgPT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
T3V0c2lkZSkKKyAgICAgICAgU2hhcGVWYWx1ZSogc2hhcGVJbnNpZGUgPSB0aGlzLT5zaGFwZUlu
c2lkZSgpOworICAgICAgICBpZiAoc2hhcGVJbnNpZGUgJiYgc2hhcGVJbnNpZGUtPnR5cGUoKSA9
PSBTaGFwZVZhbHVlOjpPdXRzaWRlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXBlT3V0c2lkZSgp
OwogICAgICAgICByZXR1cm4gc2hhcGVJbnNpZGU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTaGFw
ZU91dHNpZGUoUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkKKyAgICB2b2lk
IHNldFNoYXBlT3V0c2lkZShQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZSA9PSB2YWx1ZSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNz
KCktPm1fc2hhcGVPdXRzaWRlID0gdmFsdWU7CiAgICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFs
dWUqIHNoYXBlT3V0c2lkZSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X3NoYXBlT3V0c2lkZS5nZXQoKTsgfQorICAgIFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSgpIGNv
bnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3NoYXBlT3V0c2lkZS5nZXQoKTsg
fQogCi0gICAgc3RhdGljIEV4Y2x1c2lvblNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZUluc2lkZSgp
OwotICAgIHN0YXRpYyBFeGNsdXNpb25TaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVPdXRzaWRlKCkg
eyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBTaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVJbnNpZGUo
KTsKKyAgICBzdGF0aWMgU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlT3V0c2lkZSgpIHsgcmV0dXJu
IDA7IH0KIAogICAgIHZvaWQgc2V0Q2xpcFBhdGgoUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlv
bj4gb3BlcmF0aW9uKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TaGFwZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hh
cGVWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3NGFlZWIyOWY4MjVjYmE1OTM4NTdiMTA5YTlkMWFiNDQ0
OWNiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U2hhcGVWYWx1ZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTaGFwZVZhbHVlX2gKKyNkZWZpbmUgU2hhcGVWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCYXNpY1NoYXBlcy5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXBlVmFsdWUg
OiBwdWJsaWMgUmVmQ291bnRlZDxTaGFwZVZhbHVlPiB7CitwdWJsaWM6CisgICAgZW51bSBTaGFw
ZVZhbHVlVHlwZSB7CisgICAgICAgIC8vIFRoZSBBdXRvIHZhbHVlIGlzIGRlZmluZWQgYnkgYSBu
dWxsIFNoYXBlVmFsdWUqCisgICAgICAgIFNoYXBlLAorICAgICAgICBPdXRzaWRlLAorICAgICAg
ICBJbWFnZQorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBjcmVh
dGVTaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXBlVmFsdWUoc2hhcGUpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBjcmVhdGVPdXRzaWRlVmFsdWUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFwZVZhbHVlKE91dHNpZGUpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBjcmVhdGVJbWFnZVZhbHVlKFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNoYXBlVmFsdWUoaW1hZ2UpKTsKKyAgICB9CisKKyAgICBTaGFwZVZhbHVlVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgQmFzaWNTaGFwZSogc2hhcGUoKSBj
b25zdCB7IHJldHVybiBtX3NoYXBlLmdldCgpOyB9CisgICAgU3R5bGVJbWFnZSogaW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgdm9pZCBzZXRJbWFnZShQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlKQorICAgIHsKKyAgICAgICAgaWYgKG1faW1hZ2UgIT0gaW1h
Z2UpCisgICAgICAgICAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgfQorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBTaGFwZVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IG90
aGVyLnR5cGUoKTsgfQorCitwcml2YXRlOgorICAgIFNoYXBlVmFsdWUoUGFzc1JlZlB0cjxCYXNp
Y1NoYXBlPiBzaGFwZSkKKyAgICAgICAgOiBtX3R5cGUoU2hhcGUpCisgICAgICAgICwgbV9zaGFw
ZShzaGFwZSkKKyAgICB7CisgICAgfQorICAgIFNoYXBlVmFsdWUoU2hhcGVWYWx1ZVR5cGUgdHlw
ZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIFNoYXBlVmFsdWUo
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKKyAgICAgICAgOiBtX3R5cGUoSW1hZ2UpCisg
ICAgICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICB7CisgICAgfQorICAgIFNoYXBlVmFsdWVUeXBl
IG1fdHlwZTsKKyAgICBSZWZQdHI8QmFzaWNTaGFwZT4gbV9zaGFwZTsKKyAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gbV9pbWFnZTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaApp
bmRleCBmMjMxZGE2MDE4ZDE1ZGJlMTg4NWNmMGQyZTFhZWMyOWZlZWUzOGIxLi4xMTYyNWIzZGVi
N2VjOWZhMjViMzU1ZjViMGYwODNkMTdlN2ZjOTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAg
LTMwLDEwICszMCwxMCBAQAogI2luY2x1ZGUgIkNvdW50ZXJEaXJlY3RpdmVzLmgiCiAjaW5jbHVk
ZSAiQ3Vyc29yRGF0YS5oIgogI2luY2x1ZGUgIkRhdGFSZWYuaCIKLSNpbmNsdWRlICJFeGNsdXNp
b25TaGFwZVZhbHVlLmgiCiAjaW5jbHVkZSAiRmlsbExheWVyLmgiCiAjaW5jbHVkZSAiTGluZUNs
YW1wVmFsdWUuaCIKICNpbmNsdWRlICJOaW5lUGllY2VJbWFnZS5oIgorI2luY2x1ZGUgIlNoYXBl
VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMzYsOCArMTM2LDggQEAgcHVibGlj
OgogCiAgICAgTGVuZ3RoU2l6ZSBtX3BhZ2VTaXplOwogCi0gICAgUmVmUHRyPEV4Y2x1c2lvblNo
YXBlVmFsdWU+IG1fc2hhcGVJbnNpZGU7Ci0gICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+
IG1fc2hhcGVPdXRzaWRlOworICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBtX3NoYXBlSW5zaWRlOwor
ICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBtX3NoYXBlT3V0c2lkZTsKICAgICBMZW5ndGggbV9zaGFw
ZU1hcmdpbjsKICAgICBMZW5ndGggbV9zaGFwZVBhZGRpbmc7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDE5YmI0ZWNhNmFkM2M3NGE0ZjU4NGNjNzNhNzYyNjhmZjlkOGUyNGEuLjJmYjg4OWRmZTIx
N2Q4MTAyYmRiMWQ1Y2U0MjBlMWYzMWVkN2JlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtNDEs
NiArNDEsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vdGV4dCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucyIKICAgICAi
JHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nIgorICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcv
c2hhcGVzIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3R5bGUiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3N0b3JhZ2UiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2ZyIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKaW5kZXggM2Y4OGE4MzZhZWUxMjcwYjliYTA5ODhlMGI4YjUyNTJmYTllN2E2OS4uMDA2
ZmM1OTU1MTFkMTllMGYwMDc4YTVjZjUwODZhMTQzMDc1NDBkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50
eHQKQEAgLTkzLDYgKzkzLDcgQEAgc2V0KFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0IgogICAgICIke1dFQkNPUkVfRElSfS9wbHVn
aW5zIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmciCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3JlbmRlcmluZy9zaGFwZXMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9zdHlsZSIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vc3RvcmFnZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnIgpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFlNTc5
ODBlMTJlMTM0Y2Y2NmZhMmRjOWM0ZGFkMWQzZmU2NjM5MjQuLmY5MWFkZTU4ZGU1ODMzNzY5NzU5
YmE5MWYxNWIwZGFhOGUxZGI1ZjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wNi0xMCAgQmVhciBUcmF2aXMg
IDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NTUyBFeGNsdXNp
b25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgdGhlIHJlbmRlcmlu
Zy9zaGFwZXMgZGlyZWN0b3J5CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VM
aXN0cy50eHQ6CisKIDIwMTMtMDYtMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dpbmRvd3NdIFVucmV2aWV3ZWQgdGVzdCBjb3JyZWN0aW9uOiAgUHJl
dmVudCBEdW1wUmVuZGVyVHJlZSBjcmFzaGVzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VM
aXN0cy50eHQKaW5kZXggY2RkNmE5OThiNzA1ZTEwYjE3NmIyNjg3YWMwNzBhMDhkY2QyMWEzOC4u
OTk4MDE5MTIxMWQzM2Y4NGM2ZDIyMjAzZDRjZTExMjQzOWNjMzdhYiAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dApAQCAtNzcsNiArNzcsNyBAQCBzZXQoRHVtcFJlbmRl
clRyZWVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25l
dHdvcmsvc291cAogICAgICR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMKICAgICAke1dFQkNPUkVfRElS
fS9yZW5kZXJpbmcKKyAgICAke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc2hhcGVzCiAgICAgJHtX
RUJDT1JFX0RJUn0vcmVuZGVyaW5nL3N0eWxlCiAgICAgJHtXRUJDT1JFX0RJUn0vaGlzdG9yeQog
ICAgICR7V0VCQ09SRV9ESVJ9L2xvYWRlcgo=
</data>
<flag name="review"
          id="225702"
          type_id="1"
          status="+"
          setter="achicu"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204184</attachid>
            <date>2013-06-10 13:38:11 -0700</date>
            <delta_ts>2013-06-10 14:23:55 -0700</delta_ts>
            <desc>Incorporating feedback</desc>
            <filename>bug-117162-20130610133634.patch</filename>
            <type>text/plain</type>
            <size>290815</size>
            <attacher name="Bear Travis">betravis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDYwYjdlZGY0ZDcwNGI1
YWY0OTU1YWJkMGFiMWQwZDExNWUwOTg2NS4uYjMyNTE2MmYyNDcxODE5YmIzNWJiZDRhZTUxMDQ2
MThlZmQ2ZmNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMCBAQAorMjAxMy0wNi0xMCAgQmVh
ciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFwZXNdW0NT
UyBFeGNsdXNpb25zXSBTcGxpdCBDU1MgRXhjbHVzaW9ucyBhbmQgQ1NTIFNoYXBlcyBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcxNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4YW5kcnUgQ2hpY3VsaXRhLgorCisgICAgICAgIFdpdGgg
dGhlIHNwbGl0IGJldHdlZW4gdGhlIENTUyBFeGNsdXNpb25zIGFuZCBDU1MgU2hhcGVzIHNwZWNp
ZmljYXRpb25zLAorICAgICAgICBzb21lIHJlbmFtaW5nIGlzIG5lY2Vzc2FyeS4gSW4gZ2VuZXJh
bCwgdGhpcyBwYXRjaCByZW1vdmVzICdFeGNsdXNpb24nIGZyb20KKyAgICAgICAgYW55IFNoYXBl
cyBjb2RlLCB3aGlsZSBvcmdhbml6aW5nIHRoZSByZW5kZXJpbmcgc2hhcGVzIGNvZGUgaW50byBh
ICdzaGFwZXMnCisgICAgICAgIGZvbGRlci4KKworICAgICAgICBSZW5hbWVzOgorICAgICAgICBF
eGNsdXNpb25TaGFwZSAtPiBTaGFwZQorICAgICAgICBFeGNsdXNpb25bUmVjdGFuZ2xlfFBvbHln
b25dIC0+IFtSZWN0YW5nbGV8UG9seWdvbl1TaGFwZQorICAgICAgICBFeGNsdXNpb24gLT4gU2hh
cGUKKworICAgICAgICBSZWZhY3RvcmluZywgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUu
cHJpOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OnByb3BlcnR5VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1
ZS5oOgorICAgICAgICAqIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlTaGFwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eVNoYXBlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlTaGFwZTo6Y3JlYXRlSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyOjpEZXByZWNhdGVkU3R5bGVCdWlsZGVyKToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyU2hhcGU6OlBy
b3BlcnR5V3JhcHBlclNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0
aW9uOjplbnN1cmVQcm9wZXJ0eU1hcCk6CisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL0xheW91dFN0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRT
dGF0ZTo6TGF5b3V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OnNoYXBl
SW5zaWRlSW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpzaGFwZUluZm9SZXF1aXJlc1JlbGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9uc0JlZm9yZUNo
aWxkTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlU2hhcGVT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhj
bHVzaW9uc0FmdGVyQ2hpbGRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpj
b21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVuc3VyZVNoYXBlSW5z
aWRlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2hhcGVJbnNpZGVJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRTaGFwZUluc2lkZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnhQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp5UG9zaXRpb25G
b3JGbG9hdEluY2x1ZGluZ01hcmdpbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0U2hh
cGVJbnNpZGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6TGluZVdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdG
bG9hdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlSW5s
aW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1
Y3RCaWRpUnVuc0ZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0TG9naWNhbExpbmVU
b3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUxpbmVCb3VuZGFyaWVz
Rm9yU2hhcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2Fs
TGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCcmVhayk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dXBkYXRlU2hhcGVPdXRzaWRl
SW5mb0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2hhcGVPdXRzaWRlSW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE9mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRT
dGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6bGVmdFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNSZWZsZXhW
ZXJ0ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6aW53YXJkRWRnZU5vcm1hbCk6CisgICAgICAgIChXZWJDb3JlOjpvdXR3YXJk
RWRnZU5vcm1hbCk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRBcmMpOgorICAgICAgICAoV2Vi
Q29yZTo6c25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpj
b21wdXRlU2hhcGVQYWRkaW5nQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTaGFw
ZU1hcmdpbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OnNoYXBlUGFk
ZGluZ0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OnNoYXBlTWFyZ2lu
Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEludGVydmFsWCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wYXJlRWRnZUludGVyc2VjdGlvblgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJ
bnRlcnNlY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVPdmVybGFwcGluZ0VkZ2VY
UHJvamVjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpnZXRFeGNsdWRl
ZEludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmdldEluY2x1ZGVk
SW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0Rml0UmVjdEluUG9seWdvbik6Cisg
ICAgICAgIChXZWJDb3JlOjphYm92ZU9yVG9UaGVMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBv
bHlnb25TaGFwZTo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcCk6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmguCisgICAgICAgIChXZWJDb3JlOjpPZmZz
ZXRQb2x5Z29uRWRnZTo6T2Zmc2V0UG9seWdvbkVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6T2Zm
c2V0UG9seWdvbkVkZ2U6OmVkZ2VJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5
Z29uRWRnZTo6YmFzaXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpQb2x5Z29u
U2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjplbGxpcHNlWEludGVyY2VwdCk6CisgICAgICAgIChXZWJD
b3JlOjplbGxpcHNlWUludGVyY2VwdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0OjpwYWRkaW5nQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6
Om1hcmdpbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Ojpjb3Ju
ZXJJbnRlcmNlcHRGb3JXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6
c2hhcGVQYWRkaW5nQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpz
aGFwZU1hcmdpbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0YW5nbGVTaGFwZTo6Z2V0
RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdGFuZ2xlU2hhcGU6Omdl
dEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpm
aXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hh
cGVzL1JlY3RhbmdsZVNoYXBlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmguCisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0OjpGbG9hdFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3Q6OnJ4KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Q6OnJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlY3RhbmdsZVNoYXBlOjpSZWN0YW5nbGVTaGFwZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVj
dGFuZ2xlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2hhcGVDaXJjbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU2hhcGVFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVBvbHlnb25TaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpwaHlzaWNhbFJlY3RUb0xvZ2lj
YWwpOgorICAgICAgICAoV2ViQ29yZTo6cGh5c2ljYWxQb2ludFRvTG9naWNhbCk6CisgICAgICAg
IChXZWJDb3JlOjpwaHlzaWNhbFNpemVUb0xvZ2ljYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGU6OmNyZWF0ZVNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGUuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVTZWdtZW50OjpMaW5lU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZTo6flNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpzaGFwZU1hcmdp
bik6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6c2hhcGVQYWRkaW5nKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Ojo6
Y29tcHV0ZWRTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjo6OmNvbXB1dGVTZWdtZW50c0Zvckxp
bmUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmguCisgICAgICAg
IChXZWJDb3JlOjpNYXBwZWRJbmZvOjplbnN1cmVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
cHBlZEluZm86OnJlbW92ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVkSW5mbzo6aW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpNYXBwZWRJbmZvOjppbmZvTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXBlSW5mbzo6flNoYXBlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUlu
Zm86OnNldFNoYXBlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmNsZWFyU2Vn
bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpzaGFwZUxvZ2ljYWxUb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpzaGFwZUxvZ2ljYWxCb3R0b20pOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpzaGFwZUxvZ2ljYWxMZWZ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlSW5mbzo6c2hhcGVMb2dpY2FsUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVJbmZvOjpzaGFwZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86
OnNoYXBlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmxvZ2lj
YWxMaW5lVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbExpbmVCb3R0
b20pOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpzaGFwZUNvbnRhaW5pbmdCbG9ja0hl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmxpbmVPdmVybGFwc1NoYXBlQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bGluZVdpdGhpblNoYXBlQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6ZGlydHlTaGFwZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbmZvOjpzaGFwZVNpemVEaXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFwZUluZm86Om93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6U2hhcGVJ
bmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5mbzo6bG9naWNhbFRvcE9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZUluZm86OmxvZ2ljYWxMZWZ0T2Zmc2V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxpbmVTZWdtZW50UmFuZ2U6OkxpbmVTZWdtZW50UmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcGVJbnNpZGVJbmZvOjphZGp1c3RMb2dpY2FsTGluZVRvcCk6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaC4KKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVTZWdtZW50SXRlcmF0b3I6OkxpbmVTZWdtZW50SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpjcmVhdGVJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlSW5zaWRlSW5mbzo6aGFzU2VnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cGVJbnNpZGVJbmZvOjpzZWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUlu
Zm86OnNlZ21lbnRSYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpj
dXJyZW50U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUluc2lkZUluZm86OnNldE5l
ZWRzTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlSW5zaWRlSW5mbzo6bmVlZHNMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnNpZGVJbmZvOjpTaGFwZUluc2lkZUluZm8p
OgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJ2YWxYMUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcGVJbnRlcnZhbDo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OnNvcnRTaGFwZUludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjptZXJnZVNoYXBlSW50ZXJ2
YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnN1YnRyYWN0U2hhcGVJbnRlcnZhbHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmguCisgICAgICAgIChXZWJDb3JlOjpTaGFwZUludGVy
dmFsOjpTaGFwZUludGVydmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0
c2lkZUluZm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRl
SW5mbzo6aXNFbmFibGVkRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86
OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lk
ZUluZm86OnNoYXBlTG9naWNhbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNp
ZGVJbmZvOjpsZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZU91dHNpZGVJbmZvOjpyaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y3JlYXRlSW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpTaGFwZU91dHNpZGVJbmZvKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYXBlVmFsdWUu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9FeGNsdXNpb25T
aGFwZVZhbHVlLmguCisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpjcmVhdGVJbWFnZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlVmFsdWU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVW
YWx1ZTo6c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6aW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVWYWx1ZTo6c2V0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGVWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZVZhbHVlOjpT
aGFwZVZhbHVlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YS5oOgorCiAyMDEzLTA2LTEwICBJYWdvIFRvcmFsIFF1aXJvZ2EgIDxpdG9yYWxAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVc2UgQ2Fpcm8gaW1wbGVtZW50YXRpb24gb2YgdGhlIFdpZGdl
dEJhY2tpbmdTdG9yZSBpbnN0ZWFkIG9mIFgxMSB3aGVuIHJ1bm5pbmcgb24gV2F5bGFuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCBlYTMwYzVlYzI2ODkyYjZlNmFkZDZhODVkYzAyMzFmMGZiNDAyYjlhLi5mMmY1ODAy
NmFjNGM1NzQwOWMxNjhiNDY5MjcyMjY5OTc1MTM0M2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEzLTA2LTA3ICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KKworICAg
ICAgICBbQ1NTIFNoYXBlc11bQ1NTIEV4Y2x1c2lvbnNdIFNwbGl0IENTUyBFeGNsdXNpb25zIGFu
ZCBDU1MgU2hhcGVzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNzE2MgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhhbmRydSBDaGljdWxp
dGEuCisKKyAgICAgICAgQWRkaW5nIHRoZSBXZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMgZGlyZWN0
b3J5IHRvIHRoZSBpbmNsdWRlIGxpc3QuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKwog
MjAxMy0wNi0wNiAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIEJ1aWxkIGNvbmZpZ3VyYXRpb24gZml4LiBXZWJLaXRFeHBvcnRHZW5lcmF0
b3IncyBpbmNsdWRlIHBhdGggc2hvdWxkIGZhbGwgYmFjayB0byAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4MmZl
MzM3ODczYzQzN2ExNTVhNmNkMTFiMmQxZjUwMDkxMDIxNjU5Li5hMTZlNTE0MGNkYjIxZjA1OWQ5
ZGRkZTViN2FhOGZiZDU3YmE2YTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMt
MDYtMTAgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1Mg
U2hhcGVzXVtDU1MgRXhjbHVzaW9uc10gU3BsaXQgQ1NTIEV4Y2x1c2lvbnMgYW5kIENTUyBTaGFw
ZXMgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE3MTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGFuZHJ1IENoaWN1bGl0YS4KKworICAg
ICAgICBBZGRpbmcgdGhlIFdlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcyBkaXJlY3RvcnkgdG8gdGhl
IGluY2x1ZGUgbGlzdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorCiAyMDEzLTA2LTEw
ICBJYWdvIFRvcmFsIFF1aXJvZ2EgIDxpdG9yYWxAaWdhbGlhLmNvbT4KIAogICAgICAgICBVc2Ug
Q2Fpcm8gaW1wbGVtZW50YXRpb24gb2YgdGhlIFdpZGdldEJhY2tpbmdTdG9yZSBpbnN0ZWFkIG9m
IFgxMSB3aGVuIHJ1bm5pbmcgb24gV2F5bGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4ZTgz
NzM1OWM5MzU2NmRjNTU2YTRlM2YyODc5Y2M2Yjc5NzIxZWZkLi43ODVhNmE3MWI3ZTFiOTkwMzlm
ZGU4NzJkNTM1ZTNhMjMyMTA2NGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNzYsNiArNzYs
NyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsdWdpbnMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZyIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcmVuZGVyaW5nL21hdGhtbCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3No
YXBlcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3N0eWxlIgogICAgICIke1dFQkNP
UkVfRElSfS9yZW5kZXJpbmcvc3ZnIgogICAgICIke1dFQkNPUkVfRElSfS9zdG9yYWdlIgpAQCAt
MjA5MywxMyArMjA5NCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvQmlk
aVJ1bi5jcHAKICAgICByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCiAgICAgcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKLSAgICBy
ZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uUmVj
dGFuZ2xlLmNwcAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAKLSAgICByZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVJbmZvLmNwcAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8uY3BwCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3Bw
CiAgICAgcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAogICAgIHJlbmRlcmluZy9G
aXhlZFRhYmxlTGF5b3V0LmNwcAogICAgIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5j
cHAKQEAgLTIyMTQsNiArMjIwOCwxNCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwCiAgICAgcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCiAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25T
aGFwZS5jcHAKKyAgICByZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcAorICAgIHJl
bmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8u
Y3BwCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwCisgICAgcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmNwcAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVP
dXRzaWRlSW5mby5jcHAKKwogICAgIHJlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKICAg
ICByZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Nv
dW50ZXJEaXJlY3RpdmVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBjNmFjNzc4YzQ5OWI1
ZWZmNDZmNDhiMmZiZjhlNDFiMGZkMGQ2ZWM4Li4wNTc0YjhhZmE4YThjNDY4Y2NlOGY4N2FjMjll
OGIyMGJhZjVmYjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtOTAsNiArOTAsNyBAQCB3ZWJj
b3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dp
biBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nIFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggNDY3ZDU0NWE3MDExZjcyMTMwZTQzMzg2MWZlMmU3ZmI1OTFk
OWFmNC4uNzhiZDYxOGNjODhjNmMzYjkzYzcyYzg5MjQ1OWI5NmNmMmM0ZGIyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00Mzg1LDIwICs0Mzg1LDYgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ291bnRlck5vZGUuaCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0VsbGlwc2lzQm94LmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNs
dXNpb25JbnRlcnZhbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25J
bnRlcnZhbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25SZWN0YW5nbGUuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9u
U2hhcGVJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
SW5mby5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mby5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mby5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZU91dHNp
ZGVJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXApAQCAt
NDYzMyw2ICs0NjE5LDIwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uaCBcCisJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRlSW5mby5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9CYXNpY1NoYXBlcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9y
ZGVyRGF0YS5oIFwKQEAgLTQ2NDYsNyArNDY0Niw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1cnNvckRhdGEuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0RhdGFSZWYuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0ZpbGxMYXllci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oIFwK
QEAgLTQ2NjMsNiArNDY2Miw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYWRvd0RhdGEuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBl
VmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3Vu
ZERhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3Jv
dW5kRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCb3hEYXRh
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCAwYjRhNGZkOWQwNmRkZDg1M2YyMDZjMTUyYjA3ZGMwMmMy
ZjJhNjc5Li4wN2JhOGJkOTc3YWY3ODNmZDExNWYzMGNkNjFkYzRlZjI0ZDg0YjZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKQEAgLTExNDUsMTMgKzExNDUsNiBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcv
QmlkaVJ1bi5jcHAgXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5jcHAgXAogICAgIHJlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5j
cHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBcCi0gICAgcmVuZGVyaW5n
L0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5j
cHAgXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uY3BwIFwKLSAgICByZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lv
blNoYXBlT3V0c2lkZUluZm8uY3BwIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuY3BwIFwKICAgICByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAgXAogICAgIHJlbmRl
cmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAgXApAQCAtMTI0NSw2ICsxMjM4LDEzIEBAIFNP
VVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9SZW5kZXJXb3JkQnJlYWsuY3BwIFwKICAgICByZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5j
cHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmNwcCBcCisgICAgcmVuZGVy
aW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgXAorICAgIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUludGVydmFsLmNwcCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZv
LmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcCBcCiAgICAgcmVuZGVy
aW5nL3N0eWxlL0NvbnRlbnREYXRhLmNwcCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0NvdW50ZXJE
aXJlY3RpdmVzLmNwcCBcCkBAIC0yNDAzLDEzICsyNDAzLDYgQEAgSEVBREVSUyArPSBcCiAgICAg
cmVuZGVyaW5nL2JyZWFrX2xpbmVzLmggXAogICAgIHJlbmRlcmluZy9Db3VudGVyTm9kZS5oIFwK
ICAgICByZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvbklu
dGVydmFsLmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmggXAotICAgIHJlbmRl
cmluZy9FeGNsdXNpb25SZWN0YW5nbGUuaCBcCi0gICAgcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBl
LmggXAotICAgIHJlbmRlcmluZy9FeGNsdXNpb25TaGFwZUluZm8uaCBcCi0gICAgcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIFwKLSAgICByZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mby5oIFwKICAgICByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBc
CiAgICAgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaCBcCiAgICAgcmVuZGVyaW5nL0hpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZS5oIFwKQEAgLTI1MTMsMTggKzI1MDYsMjUgQEAgSEVBREVSUyAr
PSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlcldvcmRCcmVhay5oIFwKICAgICByZW5kZXJpbmcvUm9v
dElubGluZUJveC5oIFwKICAgICByZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCBcCisgICAgcmVu
ZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaCBcCisgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0
YW5nbGVTaGFwZS5oIFwKKyAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggXAorICAgIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGVJbmZvLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNp
ZGVJbmZvLmggXAorICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oIFwKKyAgICBy
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxl
L0Jhc2ljU2hhcGVzLmggXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5oIFwKICAg
ICByZW5kZXJpbmcvc3R5bGUvQ291bnRlckRpcmVjdGl2ZXMuaCBcCiAgICAgcmVuZGVyaW5nL3N0
eWxlL0N1cnNvckRhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1cnNvckxpc3QuaCBcCi0g
ICAgcmVuZGVyaW5nL3N0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaCBcCiAgICAgcmVuZGVyaW5n
L3N0eWxlL0ZpbGxMYXllci5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0Lmgg
XAogICAgIHJlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5oIFwKICAgICByZW5kZXJpbmcv
c3R5bGUvUXVvdGVzRGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBc
CiAgICAgcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaCBcCisgICAgcmVuZGVyaW5nL3N0eWxl
L1NoYXBlVmFsdWUuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEu
aCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlQm94RGF0YS5oIFwKICAgICByZW5kZXJpbmcv
c3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggNTMwMmM0Y2UzZGZh
ODZlNGVlZWI3YjcxYzI0YTY2NzI4M2Y3YTA2Zi4uYjVlMzM0YjBiMGM1NGQyYzgxMTk3ZDM0NjM1
ZTVjMDEyMDM0ZmFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTg1LDYgKzg1LDcgQEAgSU5DTFVERVBB
VEggKz0gXAogICAgICQkU09VUkNFX0RJUi9wbHVnaW5zIFwKICAgICAkJFNPVVJDRV9ESVIvcmVu
ZGVyaW5nIFwKICAgICAkJFNPVVJDRV9ESVIvcmVuZGVyaW5nL21hdGhtbCBcCisgICAgJCRTT1VS
Q0VfRElSL3JlbmRlcmluZy9zaGFwZXMgXAogICAgICQkU09VUkNFX0RJUi9yZW5kZXJpbmcvc3R5
bGUgXAogICAgICQkU09VUkNFX0RJUi9yZW5kZXJpbmcvc3ZnIFwKICAgICAkJFNPVVJDRV9ESVIv
c3RvcmFnZSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvagppbmRleCBlODA3MjAxYjQxMTBiOWNhY2U3NWYwZTE2MDc0ZDMyZDJlYzBkNzY5Li4wZDk1
YTIyOTJjZjUwZTBhN2NlNTU3Zjk2ZTJiYjIwNGI0NDYyMDI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTU0MjIsMTIgKzU0MjIsNiBA
QAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXEV4Y2x1c2lvbkludGVydmFsLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25Qb2x5Z29uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25SZWN0YW5nbGUuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNo
YXBlT3V0c2lkZUluZm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMici
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTYzMDYsNiArNjMwMCwxMiBAQAogICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHNoYXBlc1xQb2x5Z29uU2hhcGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnRlcnZhbC5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBl
T3V0c2lkZUluZm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XHN2Z1xTVkdQYXRoRGF0YS5jcHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0xMjEwOSwxMSArMTIxMDksNiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXGJyZWFrX2xpbmVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcQ291bnRlck5vZGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFbGxpcHNpc0JveC5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvbkludGVydmFsLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdvbi5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXEZpbHRlckVmZmVjdFJlbmRlcmVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcRml4ZWRUYWJsZUxheW91dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXEZsb3dUaHJlYWRDb250cm9sbGVyLmgiIC8+CkBAIC0xMjE5Nyw2ICsx
MjE5MiwxMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclNl
bGVjdGlvbkluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xS
ZW5kZXJTbGlkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xS
ZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVP
dXRzaWRlSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2
Z1xSZW5kZXJTVkdCbG9jay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXHN2Z1xSZW5kZXJTVkdDb250YWluZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiIC8+CkBAIC0xMjI2OSw3
ICsxMjI3MCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVc
Q3Vyc29yRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0
eWxlXEN1cnNvckxpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzdHlsZVxEYXRhUmVmLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc3R5bGVcRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEZpbGxMYXllci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEdyaWRQb3NpdGlvbi5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXEdyaWRUcmFja1NpemUuaCIgLz4KQEAgLTEy
MjgwLDYgKzEyMjgwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
dHlsZVxSZW5kZXJTdHlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXHN0eWxlXFJlbmRlclN0eWxlQ29uc3RhbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU2hhZG93RGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN0eWxlXFNoYXBlVmFsdWUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxTdHlsZUJhY2tncm91bmREYXRhLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVCb3hEYXRh
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3R5bGVcU3R5bGVD
YWNoZWRJbWFnZS5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGY1ZTg3MjM4YzdmMjA4Yjc1OGEwZmQ3
MTYxOGQwMmY0ZDIyZGM3MDMuLjVlMmNlMDllYTRmNGMzZjg1MzJhOGIyY2RhMzFhZDJlNjQwODNh
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTI0MzIsMjMgKzI0MzIsMjMgQEAKICAgICA8L0NsQ29tcGls
ZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFbGxpcHNpc0JveC5jcHAi
PgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5jcHAi
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29uU2hh
cGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVzaW9uUG9seWdv
bi5jcHAiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSZWN0
YW5nbGVTaGFwZS5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNp
b25SZWN0YW5nbGUuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
aGFwZXNcU2hhcGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcRXhjbHVz
aW9uU2hhcGUuY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFw
ZXNcU2hhcGVJbnNpZGVJbmZvLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAiPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUludGVydmFsLmNwcCI+
CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8uY3BwIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hh
cGVPdXRzaWRlSW5mby5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xGaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAiPgpAQCAtOTEyMCwxOSArOTEyMCwyMiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEVsbGlwc2lzQm94LmgiPgogICAgICAgPEZpbHRl
cj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25JbnRlcnZhbC5oIj4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUG9seWdvblNoYXBlLmgiPgorICAgICAgPEZp
bHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuaCI+CiAgICAgICA8
RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblBvbHlnb24uaCI+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgiPgogICAgICAgPEZpbHRl
cj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZS5oIj4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmgiPgogICAgICAgPEZp
bHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCI+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuaCI+
CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8uaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBl
T3V0c2lkZUluZm8uaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXEZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgiPgpAQCAtOTU4OCw5ICs5NTkxLDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxEYXRhUmVmLmgiPgogICAgICAgPEZpbHRlcj5yZW5k
ZXJpbmdcc3R5bGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxFeGNsdXNpb25TaGFwZVZhbHVlLmgiPgotICAgICAg
PEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdHlsZVxGaWxsTGF5ZXIuaCI+CiAgICAg
ICA8RmlsdGVyPnJlbmRlcmluZ1xzdHlsZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAt
OTYyMSw2ICs5NjIxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xz
dHlsZVxTaGFkb3dEYXRhLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xzdHlsZVxTaGFwZVZhbHVlLmgiPgorICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3R5bGU8L0Zp
bHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdHlsZVxTdHlsZUJhY2tncm91bmREYXRhLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJp
bmdcc3R5bGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTE1MTg0LDQgKzE1MTg3LDQg
QEAKICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZFN0
ZXA+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0NTBmMmM1ZjViZDY0MDRjZmZjZDc5OTVlNjZhN2ZkZjkzNTRm
OTg3Li40YzQ4N2VhNTNhMTUzOWQwZDhhZDhlMzUzN2FjN2U5NzExMWUyOGQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODM1
LDE0ICsxODM1LDYgQEAKIAkJNkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMz
RE9wZW5HTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLzsg
fTsKIAkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTUxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovOyB9OwogCQk2RTY3RDJBOTEy
ODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5z
aW9uczNELmggKi87IH07Ci0JCTZFODc5OEJBMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25J
bnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RTg3OThCNDE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuY3BwICovOyB9
OwotCQk2RTg3OThCQjE1RjgxRTRBMDBCRkU0QUEgLyogRXhjbHVzaW9uSW50ZXJ2YWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI1MTVGODFF
NEEwMEJGRTRBQSAvKiBFeGNsdXNpb25JbnRlcnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTZFODc5OEJDMTVGODFFNEEwMEJGRTRBQSAvKiBF
eGNsdXNpb25SZWN0YW5nbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU4Nzk4QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3Rhbmds
ZS5jcHAgKi87IH07Ci0JCTZFODc5OEJEMTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0
YW5nbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
ODc5OEI3MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuaCAqLzsgfTsKLQkJ
NkU4Nzk4QkUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODc5OEI4MTVGODFFNEEwMEJG
RTRBQSAvKiBFeGNsdXNpb25TaGFwZS5jcHAgKi87IH07Ci0JCTZFODc5OEJGMTVGODFFNEEwMEJG
RTRBQSAvKiBFeGNsdXNpb25TaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkVB
RjM0MEYxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBRjM0MEQxNjEzODY5QTAwODU5
NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uY3BwICovOyB9OwotCQk2RUFGMzQxMDE2MTM4NjlBMDA4
NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkVBRjM0MEUxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBv
bHlnb24uaCAqLzsgfTsKIAkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFy
cmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
QkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07CiAJCTZF
QkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhB
IC8qIEpTRmxvYXQ2NEFycmF5LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAv
KiBPRVNUZXh0dXJlRmxvYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkVCRjBFNDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5j
cHAgKi87IH07CkBAIC0zMjYzLDggKzMyNTUsNiBAQAogCQk5OENFNDMyQTEyOUUwMEU1MDA1ODIx
REMgLyogTGlua0xvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOThDRTQzMjkxMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLzsgfTsK
IAkJOThFQjFGOTUxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OEVCMUY5NDEzMTNGRTA1MDBE
MEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5QTFCNkY5NzE1ODg2OUM4MDAxMUE4QzQgLyogSlNET01TdHJp
bmdMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlBMUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20u
Y3BwICovOyB9OwotCQk5QTlDRUY4RDE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QTlDRUY4QjE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
by5jcHAgKi87IH07Ci0JCTlBOUNFRjhFMTYzQjNFQTEwMERFN0VGRSAvKiBFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QTlDRUY4QzE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlC
MUFCMDdDMTY0OEM3QzQwMDUxRjNGMiAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MUFCMDdCMTY0OEM3QzQwMDUxRjNGMiAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcCAqLzsgfTsKIAkJOUIyNERFOEUxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI0
REU4QzE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCAqLzsgfTsKIAkJOUIyRDhB
NzkxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0
ZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NTczOSw3ICs1NzI5LDcgQEAKIAkJRkQwNkRGQTUxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDA2REZBMzEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCAqLzsgfTsKIAkJRkQwNkRGQTYxMzRBNERFRjAwNkY1RDdEIC8qIERl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQwNkRGQTQxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oICovOyB9OwogCQlGRDE2NjBBNTEzNzg3QzZEMDAxRkZBN0IgLyog
RGVub3JtYWxEaXNhYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQxNjYwQTQxMzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCAq
LzsgfTsKLQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMUFGMTRF
MTY1NkYxMjEwMEM2RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQxQUYxNTAxNjU2RjE1MTAwQzZE
NEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkQyM0ExMjUxM0Y1
RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMjNBMTIzMTNGNUZBNTkw
MEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgKi87IH07CiAJCUZE
MjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyM0ExMjQx
M0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggKi87IH07
CiAJCUZEMkRCRjEyMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMkRCRjBFMTJC
MDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayAqLzsgfTsKQEAgLTU4NTYsNiAr
NTg0NiwyMCBAQAogCQlGRDMxNjBDMDEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzMTYwQkEx
MkIwMjcyQTAwQzFBMzU5IC8qIEZGVEZyYW1lTWFjLmNwcCAqLzsgfTsKIAkJRkQzNTkxOEYxMzhE
QjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDM1OTE4RDEzOERCMjIwMDBFMUVCRUMgLyog
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcCAqLzsgfTsKIAkJRkQzNTkxOTAxMzhEQjIyMDAwRTFFQkVD
IC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkQzNTkxOEUxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1l
bGluZS5oICovOyB9OworCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdGMTc1RDM5
MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZENDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgxMTc1
RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGRDQ1QTk1MTE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJ
bnNpZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDA4QTg4MzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNpZGVJbmZvLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTIxNzVEM0Yz
RTAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODg3MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91
dHNpZGVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRkQ0NUE5NTMxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdFMTc1RDM5MjYwMDJDRDM2
MCAvKiBTaGFwZS5jcHAgKi87IH07CisJCUZENDVBOTU0MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFw
ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkQwOEE4ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi87IH07CisJCUZENDVB
OTU1MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluc2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODIxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgKi87IH07CisJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVD
OCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZEMDhBODg2MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJ
bmZvLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NTcxNzVENDE0QzAwQzIxRUM4IC8qIFBvbHlnb25TaGFw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4
N0IxNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZENDVBOTU4MTc1RDQxNEMwMEMyMUVDOCAv
KiBSZWN0YW5nbGVTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkQwOEE4N0QxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkQ0NUE5NTkx
NzVENDE3MTAwQzIxRUM4IC8qIFBvbHlnb25TaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3QTE3NUQzOTI2MDAyQ0QzNjAgLyogUG9s
eWdvblNoYXBlLmNwcCAqLzsgfTsKKwkJRkQ0NUE5NUExNzVENDE3MTAwQzIxRUM4IC8qIFJlY3Rh
bmdsZVNoYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMDhBODdDMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgKi87IH07
CisJCUZENDVBOTVCMTc1RDQxRUUwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg4NTE3NUQzOTI2MDAy
Q0QzNjAgLyogU2hhcGVJbnRlcnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUZENDVBOTVDMTc1RDQyMEQwMEMyMUVDOCAvKiBTaGFwZUludGVy
dmFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
MDhBODg0MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmNwcCAqLzsgfTsKIAkJRkQ1
MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENTM3MzUwMTM3QjY1MTgwMDAwOERDRSAvKiBa
ZXJvUG9sZS5jcHAgKi87IH07CiAJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9s
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1Mzcz
NTExMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggKi87IH07CiAJCUZENTM3MzU2MTM3QjY1
M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTQxMzdCNjUzQjAwMDA4RENF
IC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgKi87IH07CkBAIC01ODc4LDggKzU4ODIs
NiBAQAogCQlGRDZFRDJDODEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZFRDJDNjEz
NkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggKi87IH07CiAJCUZENkYyNTJD
MTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ2RjI1MjkxM0Y1RUYw
RTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgKi87IH07CiAJCUZE
NkYyNTJEMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENkYyNTJBMTNG
NUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLzsgfTsKLQkJ
RkQ3NDhBQkYxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDc0OEFCRDE1
QkY3NEVEMDA1OUNGMEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcCAqLzsgfTsKLQkJ
RkQ3NDhBQzAxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3NDhBQkUxNUJG
NzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZENzg2OEI5MTM2Qjk5OTIwMEQ0
MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3ODY4QjcxMzZCOTk5MjAwRDQwM0RGIC8qIEpT
RHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgKi87IH07CiAJCUZENzg2OEJBMTM2Qjk5OTIwMEQ0
MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5
bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCAqLzsgfTsKIAkJRkQ3RjI5OTExM0Q0QzBDQjAwQUQ5NTM1
IC8qIFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQ3RjI5OEExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJE
U1BLZXJuZWwuY3BwICovOyB9OwpAQCAtNTk0MCw4ICs1OTQyLDYgQEAKIAkJRkRCMDUyRTAxNTYx
QTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3VtbWluZ0p1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREIwNTJERTE1NjFBNDJDMDBCNTAwRDYgLyog
QXVkaW9TdW1taW5nSnVuY3Rpb24uaCAqLzsgfTsKIAkJRkRCMTcwMDUxNEEyQkFCMjAwQTJCNUQ5
IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGREIxNzAwMzE0QTJCQUIyMDBBMkI1RDkgLyogTXVsdGlDaGFu
bmVsUmVzYW1wbGVyLmNwcCAqLzsgfTsKIAkJRkRCMTcwMDYxNEEyQkFCMjAwQTJCNUQ5IC8qIE11
bHRpQ2hhbm5lbFJlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkRCMTcwMDQxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2Ft
cGxlci5oICovOyB9OwotCQlGREI4RDFEQTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hh
cGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
REI4RDFEOTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVzaW9uU2hhcGVJbmZvLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkRCOEQxRTUxNkIwQ0M5
NzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREI4RDFEQjE2QjBDMEY2MDAzNDBGMTAgLyogRXhj
bHVzaW9uU2hhcGVJbmZvLmNwcCAqLzsgfTsKIAkJRkRCRDFERkMxNjdGRTI3RDAwNTFBMTFFIC8q
IEpTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkRCRDFERkIxNjdGRTI3RDAwNTFBMTFFIC8qIEpTT3NjaWxsYXRv
ck5vZGVDdXN0b20uY3BwICovOyB9OwogCQlGREJENDgwQzE1OUJDNjg3MDA5M0VCNEYgLyogSlNN
ZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGREJENDgwQTE1OUJDNjg3MDA5M0VCNEYgLyogSlNNZWRpYVN0
cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAgKi87IH07CiAJCUZEQkQ0ODBEMTU5QkM2ODcwMDkzRUI0
RiAvKiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREJENDgwQjE1OUJDNjg3MDA5M0VCNEYgLyogSlNN
ZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oICovOyB9OwpAQCAtODIyOCwxNCArODIyOCw2IEBA
CiAJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3
IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeHRlbnNpb25zM0RPcGVuR0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2
N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkU4Nzk4QjQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvbkludGVydmFsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjUxNUY4MUU0QTAwQkZFNEFB
IC8qIEV4Y2x1c2lvbkludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4Y2x1c2lvbkludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFODc5
OEI2MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1
c2lvblJlY3RhbmdsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNp
b25SZWN0YW5nbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU4Nzk4QjgxNUY4
MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFQUYzNDBEMTYxMzg2OUEwMDg1OTYyNSAvKiBFeGNsdXNp
b25Qb2x5Z29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1
c2lvblBvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RUFGMzQwRTE2
MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFeGNsdXNpb25Qb2x5Z29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2
NEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUQxMzhCNTBG
MjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC05NzA2LDggKzk2OTgsNiBAQAogCQk5OENFNDMyOTEyOUUwMEU1
MDA1ODIxREMgLyogTGlua0xvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMaW5rTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk4RUIxRjk0MTMx
M0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOb3RJbXBsZW1lbnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QTFCNkY5NjE1ODg2OUM4MDAxMUE4QzQgLyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlBOUNFRjhCMTYzQjNFQTEwMERF
N0VGRSAvKiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5QTlDRUY4QzE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eGNsdXNpb25TaGFwZU91dHNpZGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMUFCMDc5MTY0OEM2OUQwMDUxRjNGMiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QjFBQjA3QjE2NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRy
b2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxCRElFbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjU4MCw4ICsxMjU3MCwyMiBAQAogCQlG
RDAwRDdBMzE0QTNGNjE5MDA3MzQwMTEgLyogU2luY1Jlc2FtcGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaW5jUmVzYW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZEMDZERkEzMTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkQwNkRGQTQxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0ExNzVEMzkyNjAw
MkNEMzYwIC8qIFBvbHlnb25TaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb2x5Z29uU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHlnb25TaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRDA4QTg3QzE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFuZ2xlU2hhcGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVjdGFuZ2xlU2hhcGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyog
UmVjdGFuZ2xlU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdGFu
Z2xlU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0UxNzVEMzky
NjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4N0YxNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDhBODgwMTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhcGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4
ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaGFwZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQw
OEE4ODIxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZUluc2lkZUluZm8uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4MzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnNp
ZGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBlSW5zaWRlSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA4QTg4NDE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGVJbnRlcnZhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaGFwZUludGVydmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQw
OEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZvLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlT3V0c2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2hhcGVPdXRzaWRlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDE2NjBB
NDEzNzg3QzZEMDAxRkZBN0IgLyogRGVub3JtYWxEaXNhYmxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZW5vcm1hbERpc2FibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZEMUFGMTRFMTY1NkYxMjEwMEM2RDRGNyAvKiBFeGNsdXNpb25TaGFwZVZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWUu
aDsgcGF0aCA9IHN0eWxlL0V4Y2x1c2lvblNoYXBlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2hhcGVWYWx1ZS5oOyBwYXRoID0gc3R5bGUv
U2hhcGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDIzQTEyMzEzRjVG
QTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDIzQTEyNDEzRjVGQTU5MDBG
NjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQyREJGMEUxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2Vs
ZXJhdGUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBBY2NlbGVyYXRlLmZyYW1ld29yazsg
cGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwpAQCAtMTI3NDIsOCArMTI3NDYsNiBAQAogCQlG
RDZGMjUyOTEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENkYyNTJBMTNG
NUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZENkYyNTJCMTNGNUVGMEUwMDY1MTY1RiAvKiBN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZENzQ4QUJEMTVCRjc0RUQwMDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQ3NDhBQkUxNUJG
NzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQ3ODY4QjcxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRDc4NjhCODEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRHluYW1pY3NDb21wcmVzc29y
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDdGMjk4QTEzRDRDMENCMDBB
RDk1MzUgLyogV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyODA3LDggKzEyODA5LDYgQEAKIAkJRkRCMDUyREUxNTYxQTQyQzAwQjUw
MEQ2IC8qIEF1ZGlvU3VtbWluZ0p1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF1ZGlvU3VtbWluZ0p1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZEQjE3MDAzMTRBMkJBQjIwMEEyQjVEOSAvKiBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXVsdGlDaGFubmVsUmVzYW1w
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCMTcwMDQxNEEyQkFCMjAw
QTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkRCOEQxRDkxNkIwQzBENzAwMzQwRjEwIC8qIEV4Y2x1c2lvblNoYXBlSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNsdXNpb25TaGFwZUluZm8uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEwIC8q
IEV4Y2x1c2lvblNoYXBlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFeGNsdXNpb25TaGFwZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGREJEMURGQjE2N0ZFMjdEMDA1MUExMUUgLyogSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09zY2lsbGF0b3JOb2RlQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRCRDQ4MEExNTlCQzY4NzAw
OTNFQjRGIC8qIEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQkQ0ODBCMTU5QkM2ODcwMDkzRUI0RiAv
KiBKU01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4OTIyLDcgKzE4OTIyLDYgQEAKIAkJCQlCQzIyNzJBMTBFODJFODdD
MDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oICovLAogCQkJCUJDMjI3MkFDMEU4MkU4RjMwMEU3Rjk3
NSAvKiBDdXJzb3JMaXN0LmggKi8sCiAJCQkJQkMyMjc0NkUwRTgzNjY0NTAwRTdGOTc1IC8qIERh
dGFSZWYuaCAqLywKLQkJCQlGRDFBRjE0RTE2NTZGMTIxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hh
cGVWYWx1ZS5oICovLAogCQkJCUJDNUVCNjlDMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIu
Y3BwICovLAogCQkJCUJDNUVCNjlEMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuaCAqLywK
IAkJCQlBMTI3MDVDMjE2NTZCRDY1MDBDMkUyN0MgLyogR3JpZFBvc2l0aW9uLmggKi8sCkBAIC0x
ODk0MCw2ICsxODkzOSw3IEBACiAJCQkJQkM1RUI2NjcwRTgxQ0I3MTAwQjI1OTY1IC8qIFJlbmRl
clN0eWxlQ29uc3RhbnRzLmggKi8sCiAJCQkJQkM1RUI4QzEwRTgyMDMxQjAwQjI1OTY1IC8qIFNo
YWRvd0RhdGEuY3BwICovLAogCQkJCUJDNUVCOEMyMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dE
YXRhLmggKi8sCisJCQkJRkQxQUYxNEUxNjU2RjEyMTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCAq
LywKIAkJCQlCQzVFQjZBMDBFODFEQzRGMDBCMjU5NjUgLyogU3R5bGVCYWNrZ3JvdW5kRGF0YS5j
cHAgKi8sCiAJCQkJQkM1RUI2QTEwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERh
dGEuaCAqLywKIAkJCQlCQzVFQjY3QzBFODFENDIwMDBCMjU5NjUgLyogU3R5bGVCb3hEYXRhLmNw
cCAqLywKQEAgLTE5ODcyLDYgKzE5ODcyLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJNDM5MDQ2QzIxMkRBMjVDRTAwQUY4MEEyIC8qIG1hdGhtbCAqLywKKwkJ
CQlGRDA4QTg3OTE3NUQzOTI2MDAyQ0QzNjAgLyogc2hhcGVzICovLAogCQkJCUJDOEM4RkFBMERE
Q0QyRjIwMEI1OTJGNCAvKiBzdHlsZSAqLywKIAkJCQkwODhDMkY3NDEyMzkwMDgwMDAzRDY1Q0Ug
Lyogc3ZnICovLAogCQkJCUE4Q0ZGMDRCMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlv
dXQuY3BwICovLApAQCAtMTk4ODUsMjAgKzE5ODg2LDYgQEAKIAkJCQk5MzkyRjE0QjBBRDE4NjFC
MDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCAqLywKIAkJCQlBOENGRjZDQTBBMTU2MUNEMDAwQTQy
MzQgLyogRWxsaXBzaXNCb3guY3BwICovLAogCQkJCUE4Q0ZGNkJEMEExNTYxMTgwMDBBNDIzNCAv
KiBFbGxpcHNpc0JveC5oICovLAotCQkJCTZFODc5OEI0MTVGODFFNEEwMEJGRTRBQSAvKiBFeGNs
dXNpb25JbnRlcnZhbC5jcHAgKi8sCi0JCQkJNkU4Nzk4QjUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvbkludGVydmFsLmggKi8sCi0JCQkJNkVBRjM0MEQxNjEzODY5QTAwODU5NjI1IC8qIEV4
Y2x1c2lvblBvbHlnb24uY3BwICovLAotCQkJCTZFQUYzNDBFMTYxMzg2OUEwMDg1OTYyNSAvKiBF
eGNsdXNpb25Qb2x5Z29uLmggKi8sCi0JCQkJNkU4Nzk4QjYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4
Y2x1c2lvblJlY3RhbmdsZS5jcHAgKi8sCi0JCQkJNkU4Nzk4QjcxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvblJlY3RhbmdsZS5oICovLAotCQkJCTZFODc5OEI4MTVGODFFNEEwMEJGRTRBQSAv
KiBFeGNsdXNpb25TaGFwZS5jcHAgKi8sCi0JCQkJNkU4Nzk4QjkxNUY4MUU0QTAwQkZFNEFBIC8q
IEV4Y2x1c2lvblNoYXBlLmggKi8sCi0JCQkJRkRCOEQxREIxNkIwQzBGNjAwMzQwRjEwIC8qIEV4
Y2x1c2lvblNoYXBlSW5mby5jcHAgKi8sCi0JCQkJRkRCOEQxRDkxNkIwQzBENzAwMzQwRjEwIC8q
IEV4Y2x1c2lvblNoYXBlSW5mby5oICovLAotCQkJCUZENzQ4QUJEMTVCRjc0RUQwMDU5Q0YwRCAv
KiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uY3BwICovLAotCQkJCUZENzQ4QUJFMTVCRjc0RUQw
MDU5Q0YwRCAvKiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCAqLywKLQkJCQk5QTlDRUY4QjE2
M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgKi8sCi0JCQkJ
OUE5Q0VGOEMxNjNCM0VBMTAwREU3RUZFIC8qIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8uaCAq
LywKIAkJCQkzMTMxM0Y2MzE0NDNCMzVFMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwICovLAogCQkJCTMxMzEzRjY0MTQ0M0IzNUUwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oICovLAogCQkJCUE4Q0ZGMDQ4MEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5
b3V0LmNwcCAqLywKQEAgLTIwNTUyLDYgKzIwNTM5LDI3IEBACiAJCQlwYXRoID0gb3BlbmdsOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJRkQwOEE4NzkxNzVEMzkyNjAwMkNE
MzYwIC8qIHNoYXBlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJRkQwOEE4N0ExNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5jcHAgKi8sCisJ
CQkJRkQwOEE4N0IxNzVEMzkyNjAwMkNEMzYwIC8qIFBvbHlnb25TaGFwZS5oICovLAorCQkJCUZE
MDhBODdDMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgKi8sCisJCQkJRkQw
OEE4N0QxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi8sCisJCQkJRkQwOEE4
N0UxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAqLywKKwkJCQlGRDA4QTg3RjE3NUQzOTI2
MDAyQ0QzNjAgLyogU2hhcGUuaCAqLywKKwkJCQlGRDA4QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyog
U2hhcGVJbmZvLmNwcCAqLywKKwkJCQlGRDA4QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJ
bmZvLmggKi8sCisJCQkJRkQwOEE4ODIxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5m
by5jcHAgKi8sCisJCQkJRkQwOEE4ODMxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5zaWRlSW5m
by5oICovLAorCQkJCUZEMDhBODg0MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUludGVydmFsLmNw
cCAqLywKKwkJCQlGRDA4QTg4NTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbnRlcnZhbC5oICov
LAorCQkJCUZEMDhBODg2MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCAq
LywKKwkJCQlGRDA4QTg4NzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBzaGFwZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQlGRDMxNUZBMjEyQjAyNUIxMDBDMUEzNTkgLyogd2ViYXVkaW8gKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE3MTYsMTQgKzIxNzI0LDYgQEAK
IAkJCQkxNDhBRkRBNTBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NjdDRTBCMTQ1QUJDMTMwMDVFNjREQiAvKiBFeGNlcHRpb25IZWFk
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzY3Q0UwQzE0NUFCQzEzMDA1RTY0REIgLyogRXhj
ZXB0aW9uSW50ZXJmYWNlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkU4Nzk4QkIxNUY4MUU0QTAw
QkZFNEFBIC8qIEV4Y2x1c2lvbkludGVydmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RUFGMzQx
MDE2MTM4NjlBMDA4NTk2MjUgLyogRXhjbHVzaW9uUG9seWdvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNkU4Nzk4QkQxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblJlY3RhbmdsZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNkU4Nzk4QkYxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlGREI4RDFEQTE2QjBDMEQ3MDAzNDBGMTAgLyogRXhjbHVz
aW9uU2hhcGVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRDc0OEFDMDE1QkY3NEVEMDA1OUNG
MEQgLyogRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQk5QTlD
RUY4RTE2M0IzRUExMDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBl
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwMjQ1NzUyMTZDRUFBMjcwMDBFNTY3MSAvKiBF
WFREcmF3QnVmZmVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTkxMjgwRThCRDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTcxMjgwRThB
NDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjk4
Nyw2ICsyMjk4Nyw3IEBACiAJCQkJODQ3MzBEOTIxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGln
aHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MDU5OTc4MTA3RDk3NTIwMEE1MEE3QyAv
KiBQb2xpY3lDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcwNTk5N0ExMDdEOTc1MjAw
QTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENDVBOTU3MTc1
RDQxNEMwMEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzRF
MjBBMTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNjY4RTE4QjBBREQ5NjI0MDA0MTI4RTAgLyogUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQkMxMjg3NzBCMzNBQTZEMDBDNjkzRDUgLyogUG9wdXBNZW51Q2xpZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTIzMDI4LDYgKzIzMDI5LDcgQEAKIAkJCQlBODREODI3QzExRDMzM0VEMDA5
NzI5OTAgLyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMx
NjAzQzEyQjAyNjc2MDBDMUEzNTkgLyogUmVhbHRpbWVBbmFseXNlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM0MzY4RTgwQzIyNkUzMjAwNUVGQjVGIC8qIFJlY3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZENDVBOTU4MTc1RDQxNEMwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTcyRUEzQkIxNTg1Q0Y1NTAwNEZBQTI2IC8qIFJlZkNvdW50ZWRTdXBwbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5ODMxQUU0QTE1NDIyNUM5MDBGRTI2NDQgLyogUmVm
ZXJyZXJQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUI0MTgyMTNFMzU2RTgwMEQ4QUFG
MyAvKiBSZWdpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjMyOTgsNiArMjMzMDAsMTIgQEAKIAkJ
CQlCQzVFQjhDNDBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTZEMTY5NjQxMzQ2QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MEU2Q0U4MEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkQ0NUE5NEYxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRDQ1QTk1MDE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbmZvLmggaW4g
SGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1MTE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVJbnNpZGVJ
bmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hh
cGVJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4
IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUZEMUFGMTUwMTY1NkYx
NTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0RTBC
NEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0Ix
RjAyRjEzQjAyNUQyMDBGNTEwM0YgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNDM0Miw2ICsyNDM1MCwxMyBAQAogCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMg
PSAoCisJCQkJRkQ0NUE5NUMxNzVENDIwRDAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2YWwuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTkxNzVENDE3MTAwQzIxRUM4IC8qIFBvbHlnb25TaGFw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1QTk1QTE3NUQ0MTcxMDBDMjFFQzggLyogUmVj
dGFuZ2xlU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTMxNzVEM0ZCODAwQzIx
RUM4IC8qIFNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENDVBOTU0MTc1RDNGQjgwMEMy
MUVDOCAvKiBTaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkQ0NUE5NTUxNzVEM0ZC
ODAwQzIxRUM4IC8qIFNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDQ1
QTk1NjE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MUUxQjFEMDBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyOUMxNkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxp
dHlBbGxJbk9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NkNERDJGMjExMDNEQTY2MDA2ODA1
MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQ5MTcs
MTMgKzI0OTMyLDYgQEAKIAkJCQk5NzNEQzYzRjE0NUE5NDA5MDAyODQyQzIgLyogRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0FDREIxMTNDRTg3NUMw
MEJCQkUzRiAvKiBFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ4QUZEQTYwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJNkU4Nzk4QkExNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvbkludGVy
dmFsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTZFQUYzNDBGMTYxMzg2OUEwMDg1OTYyNSAvKiBF
eGNsdXNpb25Qb2x5Z29uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTZFODc5OEJDMTVGODFFNEEw
MEJGRTRBQSAvKiBFeGNsdXNpb25SZWN0YW5nbGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU4
Nzk4QkUxNUY4MUU0QTAwQkZFNEFBIC8qIEV4Y2x1c2lvblNoYXBlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUZEQjhEMUU1MTZCMENDOTcwMDM0MEYxMCAvKiBFeGNsdXNpb25TaGFwZUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJRkQ3NDhBQkYxNUJGNzRFRDAwNTlDRjBEIC8qIEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5QTlDRUY4RDE2M0IzRUEx
MDBERTdFRkUgLyogRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMDI0NTc1MTE2Q0VBQTI3MDAwRTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NERBQjVCMTE1QTYyMzU4MDA5N0MxRTQgLyog
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA2ZjQ1
Y2JhZjIzN2FhYTMyYjMwYWU1NWQyOGJkYjdjNTk5ODhiMzQ4Li5iN2FkZjg3ZjZhNTJhYTg2NWQz
NzA0NjhkNGEyYzY4OWYyMjk1NTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotI2lu
Y2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKKyNpbmNsdWRlICJTaGFwZVZhbHVlLmgiCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTI2OTksMjQgKzI2OTksMjQgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnQKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNo
YXBlSW5zaWRlOgogICAgICAgICAgICAgaWYgKCFzdHlsZS0+c2hhcGVJbnNpZGUoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUo
KSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpPdXRzaWRlKQorICAgICAgICAgICAgaWYgKHN0eWxl
LT5zaGFwZUluc2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6T3V0c2lkZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlT3V0c2lkZVNoYXBlKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+
dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OkltYWdlKSB7CisgICAgICAgICAgICBpZiAo
c3R5bGUtPnNoYXBlSW5zaWRlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpJbWFnZSkgewogICAg
ICAgICAgICAgICAgIGlmIChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+aW1hZ2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5zaGFwZUluc2lkZSgpLT5pbWFnZSgpLT5jc3NWYWx1
ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VS
VChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNo
YXBlKTsKKyAgICAgICAgICAgIEFTU0VSVChzdHlsZS0+c2hhcGVJbnNpZGUoKS0+dHlwZSgpID09
IFNoYXBlVmFsdWU6OlNoYXBlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckJhc2ljU2hh
cGUoc3R5bGUtPnNoYXBlSW5zaWRlKCktPnNoYXBlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0U2hhcGVPdXRzaWRlOgogICAgICAgICAgICAgaWYgKCFzdHlsZS0+c2hhcGVPdXRz
aWRlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5zaGFwZU91
dHNpZGUoKS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OkltYWdlKSB7CisgICAgICAg
ICAgICBpZiAoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6SW1h
Z2UpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5pbWFnZSgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUtPnNoYXBlT3V0c2lkZSgpLT5pbWFn
ZSgpLT5jc3NWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVChzdHlsZS0+c2hhcGVPdXRzaWRlKCktPnR5cGUoKSA9PSBFeGNsdXNpb25T
aGFwZVZhbHVlOjpTaGFwZSk7CisgICAgICAgICAgICBBU1NFUlQoc3R5bGUtPnNoYXBlT3V0c2lk
ZSgpLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6U2hhcGUpOwogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlRm9yQmFzaWNTaGFwZShzdHlsZS0+c2hhcGVPdXRzaWRlKCktPnNoYXBlKCkpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuaAppbmRleCA2NzJjYTRlMTk1NTIxOTUzZDkwZmI1ODc0NmJkOWE4YWFiZWJjZDNlLi4zNzJj
MWIzZjQ2ODA4MWY1NmM3ZDRlYTgxNDM3NDM3MzcyYjg2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaApAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gVGhpcyBpcyB1c2VkIGludGVybmFsbHkgZm9yIGNvdW50ZXIgbmFtZXMgKGFzIG9wcG9zZWQg
dG8gY291bnRlciB2YWx1ZXMpCiAgICAgICAgIENTU19DT1VOVEVSX05BTUUgPSAxMTAsCiAKLSAg
ICAgICAgLy8gVGhpcyBpcyB1c2VkIGJ5IHRoZSBDU1MgRXhjbHVzaW9ucyBkcmFmdAorICAgICAg
ICAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIENTUyBTaGFwZXMgZHJhZnQKICAgICAgICAgQ1NTX1NI
QVBFID0gMTExLAogCiAgICAgICAgIC8vIFVzZWQgYnkgYm9yZGVyIGltYWdlcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAppbmRleCA1NmU4M2ViNTU5
Mjk2M2ZhMDkxOTVhMWMwY2M4NmYzNWZmMGE3ZGY1Li5jMzZmZjI0OGZlNWQyZTU3YTQxYWVmYzMx
OGIzNjA2MzJiMzJhZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRl
ZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIuY3BwCkBAIC00OCw3ICs0OCw3IEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVW
YWx1ZS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwpAQCAtMTkzMywxMCArMTkzMywxMCBAQCBwdWJsaWM6CiB9OwogCiAjaWYgRU5BQkxF
KENTU19TSEFQRVMpCi10ZW1wbGF0ZSA8RXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVu
Y3Rpb24pKFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4pLCBFeGNsdXNpb25TaGFwZVZh
bHVlKiAoKmluaXRpYWxGdW5jdGlvbikoKT4KLWNsYXNzIEFwcGx5UHJvcGVydHlFeGNsdXNpb25T
aGFwZSB7Cit0ZW1wbGF0ZSA8U2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rp
b24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQ
dHI8U2hhcGVWYWx1ZT4pLCBTaGFwZVZhbHVlKiAoKmluaXRpYWxGdW5jdGlvbikoKT4KK2NsYXNz
IEFwcGx5UHJvcGVydHlTaGFwZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVl
KSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBz
ZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUp
IHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKQEAgLTE5NDUsMjAgKzE5NDUsMjAgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOwogICAgICAgICAgICAg
Ly8gRklYTUUgQnVnIDEwMjU3MTogTGF5b3V0IGZvciB0aGUgdmFsdWUgJ291dHNpZGUtc2hhcGUn
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3V0c2lkZVNoYXBlKQotICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNy
ZWF0ZU91dHNpZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBTaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1
ZTo6Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0U2hhcGVWYWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNo
YXBlID0gU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBw
cmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFs
dWU6OmNyZWF0ZUltYWdlVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwg
dmFsdWUpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFs
dWU6OmNyZWF0ZUltYWdlVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwg
dmFsdWUpKTsKICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNo
YXBlLnJlbGVhc2UoKSk7CiAgICAgICAgIH0KIAogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhh
bmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RXhjbHVzaW9uU2hhcGVWYWx1ZSosIGdl
dHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+LCBzZXR0ZXJGdW5j
dGlvbiwgRXhjbHVzaW9uU2hhcGVWYWx1ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRs
ZXIoKTsKKyAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8U2hhcGVWYWx1ZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFNoYXBlVmFs
dWU+LCBzZXR0ZXJGdW5jdGlvbiwgU2hhcGVWYWx1ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0
ZUhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVy
aXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CiAg
ICAgfQogfTsKQEAgLTIzNDMsOCArMjM0Myw4IEBAIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6OkRl
cHJlY2F0ZWRTdHlsZUJ1aWxkZXIoKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luLCBBcHBseVByb3BlcnR5
TGVuZ3RoPCZSZW5kZXJTdHlsZTo6c2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVN
YXJnaW4sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlTWFyZ2luPjo6Y3JlYXRlSGFuZGxlcigp
KTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZVBhZGRpbmcs
IEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpzaGFwZVBhZGRpbmcsICZSZW5kZXJT
dHlsZTo6c2V0U2hhcGVQYWRkaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZVBhZGRpbmc+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdFNoYXBlSW5zaWRlLCBBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxl
OjpzaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxl
Ojppbml0aWFsU2hhcGVJbnNpZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1
c2lvblNoYXBlPCZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNo
YXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVPdXRzaWRlPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZUlu
c2lkZSwgQXBwbHlQcm9wZXJ0eVNoYXBlPCZSZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5k
ZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRl
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRTaGFwZU91dHNpZGUsIEFwcGx5UHJvcGVydHlTaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBl
T3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbFNoYXBlT3V0c2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7CiAjZW5kaWYKICAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
V2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjp3aGl0ZVNwYWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRl
clN0eWxlOjpzZXRXaGl0ZVNwYWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
V2hpdGVTcGFjZT46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2lkb3dzLCBBcHBseVByb3BlcnR5QXV0bzxzaG9ydCwgJlJlbmRlclN0eWxlOjp3
aWRvd3MsICZSZW5kZXJTdHlsZTo6c2V0V2lkb3dzLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9XaWRv
d3MsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0b1dpZG93cz46OmNyZWF0ZUhhbmRsZXIoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKaW5kZXggNTI0NDAwM2NkMWMwOTc3OTY5ZWMwZWUxOWQ1ZDE0NTY1MGExZWYwOS4u
ZmNhNjI2ZjgwZDY2YTEyYjEyNmE0YTgxNjU1ZmJmZmM0ZjJjMjM3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApA
QCAtMTQ0LDEwICsxNDQsMTAgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPENsaXBQYXRoT3Bl
cmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIENsaXAKIH0KIAogI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBl
VmFsdWU+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiwgRXhjbHVzaW9uU2hhcGVWYWx1
ZSogZnJvbSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9u
QmFzZSosIFNoYXBlVmFsdWUqIGZyb20sIFNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CiB7CiAgICAgLy8gRklYTUUgQnVnIDEwMjcyMzogU2hhcGUtaW5zaWRlIHNob3VsZCBiZSBhYmxl
IHRvIGFuaW1hdGUgYSB2YWx1ZSBvZiAnb3V0c2lkZS1zaGFwZScgd2hlbiBzaGFwZS1vdXRzaWRl
IGlzIHNldCB0byBhIEJhc2ljU2hhcGUKLSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IEV4Y2x1c2lv
blNoYXBlVmFsdWU6OlNoYXBlIHx8IHRvLT50eXBlKCkgIT0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
U2hhcGUpCisgICAgaWYgKGZyb20tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpTaGFwZSB8fCB0by0+
dHlwZSgpICE9IFNoYXBlVmFsdWU6OlNoYXBlKQogICAgICAgICByZXR1cm4gdG87CiAKICAgICBj
b25zdCBCYXNpY1NoYXBlKiBmcm9tU2hhcGUgPSBmcm9tLT5zaGFwZSgpOwpAQCAtMTU2LDcgKzE1
Niw3IEBAIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBibGVu
ZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSosIEV4CiAgICAgaWYgKCFmcm9tU2hhcGUtPmNhbkJs
ZW5kKHRvU2hhcGUpKQogICAgICAgICByZXR1cm4gdG87CiAKLSAgICByZXR1cm4gRXhjbHVzaW9u
U2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVWYWx1ZSh0b1NoYXBlLT5ibGVuZChmcm9tU2hhcGUsIHBy
b2dyZXNzKSk7CisgICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUodG9TaGFw
ZS0+YmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVzcykpOwogfQogI2VuZGlmCiAKQEAgLTQwNSwxMCAr
NDA1LDEwIEBAIHB1YmxpYzoKIH07CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLWNsYXNzIFBy
b3BlcnR5V3JhcHBlckV4Y2x1c2lvblNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdy
YXBwZXI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4geworY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUg
OiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPiB7CiBwdWJsaWM6
Ci0gICAgUHJvcGVydHlXcmFwcGVyRXhjbHVzaW9uU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBF
eGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+KSkK
LSAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPEV4Y2x1c2lvblNoYXBlVmFsdWU+
KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3Bl
cnR5SUQgcHJvcCwgU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPikpCisgICAg
ICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIs
IHNldHRlcikKICAgICB7CiAgICAgfQogfTsKQEAgLTExNjUsNyArMTE2NSw3IEBAIHZvaWQgQ1NT
UHJvcGVydHlBbmltYXRpb246OmVuc3VyZVByb3BlcnR5TWFwKCkKICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0eVdlYmtp
dENsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OnNldENsaXBQ
YXRoKSk7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICBnUHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJFeGNsdXNpb25TaGFwZShDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNl
dFNoYXBlSW5zaWRlKSk7CisgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgJlJlbmRlclN0eWxl
OjpzaGFwZUluc2lkZSwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUluc2lkZSkpOwogI2VuZGlmCiAK
ICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVk
QWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZh
bGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25JbnRlcnZhbC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDRlMGVmN2E5OGJhYTY4MTA5YTg4OTE5NThhYjljOTAxNTYzYzg3
Y2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvbkludGVydmFsLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFCi0gKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4
Y2x1c2lvbkludGVydmFsLmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBJbnRlcnZhbFgxQ29tcGFyYXRvciB7Ci0gICAgYm9v
bCBvcGVyYXRvcigpIChjb25zdCBFeGNsdXNpb25JbnRlcnZhbCYgaTEsIGNvbnN0IEV4Y2x1c2lv
bkludGVydmFsJiBpMikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpMS54MSA8IGkyLngx
OwotICAgIH0KLX07Ci0KLWJvb2wgRXhjbHVzaW9uSW50ZXJ2YWw6OmludGVyc2VjdChjb25zdCBF
eGNsdXNpb25JbnRlcnZhbCYgaSwgRXhjbHVzaW9uSW50ZXJ2YWwmIHJ2KSBjb25zdAotewotICAg
IGlmICh4MiA8IGkueDEgfHwgeDEgPiBpLngyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cnYueDEgPSBzdGQ6Om1heCh4MSwgaS54MSk7Ci0gICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54
Mik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgc29ydEV4Y2x1c2lvbkludGVydmFscyhW
ZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2KQotewotICAgIHN0ZDo6c29ydCh2LmJlZ2luKCks
IHYuZW5kKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOwotfQotCi12b2lkIG1lcmdlRXhjbHVz
aW9uSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYxLCBjb25zdCBW
ZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYg
cnYpCi17Ci0gICAgaWYgKCF2MS5zaXplKCkpCi0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJl
Z2luKCksIHYyLmVuZCgpKTsKLSAgICBlbHNlIGlmICghdjIuc2l6ZSgpKQotICAgICAgICBydi5h
cHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZl
Y3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gdih2MS5zaXplKCkgKyB2Mi5zaXplKCkpOwotICAgICAg
ICBFeGNsdXNpb25JbnRlcnZhbCogaW50ZXJ2YWwgPSAwOwotCi0gICAgICAgIHN0ZDo6bWVyZ2Uo
djEuYmVnaW4oKSwgdjEuZW5kKCksIHYyLmJlZ2luKCksIHYyLmVuZCgpLCB2LmJlZ2luKCksIElu
dGVydmFsWDFDb21wYXJhdG9yKCkpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
di5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKCFpbnRlcnZhbCkKLSAgICAgICAgICAg
ICAgICBpbnRlcnZhbCA9ICZ2W2ldOwotICAgICAgICAgICAgZWxzZSBpZiAodltpXS54MSA+PSBp
bnRlcnZhbC0+eDEgJiYgdltpXS54MSA8PSBpbnRlcnZhbC0+eDIpIC8vIEZJWE1FOiAxc3QgPD0g
dGVzdCBub3QgbmVlZGVkPwotICAgICAgICAgICAgICAgIGludGVydmFsLT54MiA9IHN0ZDo6bWF4
KGludGVydmFsLT54MiwgdltpXS54Mik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKLSAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2
W2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGludGVydmFsKQot
ICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7Ci0gICAgfQotfQotCi12b2lkIGludGVy
c2VjdEV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiB2
MSwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgdjIsIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4mIHJ2KQotewotICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7Ci0gICAgc2l6
ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKLQotICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEV4Y2x1c2lvbkludGVydmFsIGludGVydmFsOwotICAgIGJv
b2wgb3ZlcmxhcCA9IGZhbHNlOwotICAgIHNpemVfdCBpMSA9IDA7Ci0gICAgc2l6ZV90IGkyID0g
MDsKLQotICAgIHdoaWxlIChpMSA8IHYxU2l6ZSAmJiBpMiA8IHYyU2l6ZSkgewotICAgICAgICBF
eGNsdXNpb25JbnRlcnZhbCB2MTI7Ci0gICAgICAgIGlmICh2MVtpMV0uaW50ZXJzZWN0KHYyW2ky
XSwgdjEyKSkgewotICAgICAgICAgICAgaWYgKCFvdmVybGFwIHx8ICF2MTIuaW50ZXJzZWN0KGlu
dGVydmFsLCBpbnRlcnZhbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCkKLSAgICAg
ICAgICAgICAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKLSAgICAgICAgICAgICAgICBpbnRl
cnZhbCA9IHYxMjsKLSAgICAgICAgICAgICAgICBvdmVybGFwID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmICh2MVtpMV0ueDIgPCB2MltpMl0ueDIpCi0gICAgICAgICAgICAg
ICAgaTErKzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpMisrOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG92ZXJsYXApCi0gICAgICAgICAgICAgICAgcnYu
YXBwZW5kKGludGVydmFsKTsKLSAgICAgICAgICAgIG92ZXJsYXAgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGlmICh2MVtpMV0ueDEgPCB2MltpMl0ueDEpCi0gICAgICAgICAgICAgICAgaTErKzsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpMisrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG92ZXJsYXApCi0gICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Ci19Ci0KLXZv
aWQgc3VidHJhY3RFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHYyLCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+JiBydikKLXsKLSAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOwot
ICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7Ci0KLSAgICBpZiAoIXYxU2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCF2MlNpemUpCi0gICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYx
LmJlZ2luKCksIHYxLmVuZCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc2l6ZV90IGkxID0gMCwg
aTIgPSAwOwotICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7Ci0K
LSAgICAgICAgd2hpbGUgKGkxIDwgcnYuc2l6ZSgpICYmIGkyIDwgdjJTaXplKSB7Ci0gICAgICAg
ICAgICBFeGNsdXNpb25JbnRlcnZhbCYgaW50ZXJ2YWwxID0gcnZbaTFdOwotICAgICAgICAgICAg
Y29uc3QgRXhjbHVzaW9uSW50ZXJ2YWwmIGludGVydmFsMiA9IHYyW2kyXTsKLQotICAgICAgICAg
ICAgaWYgKGludGVydmFsMi54MSA8PSBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyID49IGlu
dGVydmFsMS54MikKLSAgICAgICAgICAgICAgICBydi5yZW1vdmUoaTEpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngxKQotICAgICAgICAgICAgICAgIGky
ICs9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDIp
Ci0gICAgICAgICAgICAgICAgaTEgKz0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFs
Mi54MSA+IGludGVydmFsMS54MSAmJiBpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDIpIHsKLSAg
ICAgICAgICAgICAgICBydi5pbnNlcnQoaTEsIEV4Y2x1c2lvbkludGVydmFsKGludGVydmFsMS54
MSwgaW50ZXJ2YWwyLngxKSk7Ci0gICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2
YWwyLngyOwotICAgICAgICAgICAgICAgIGkyICs9IDE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGludGVydmFsMi54MSA8PSBpbnRlcnZhbDEueDEpIHsKLSAgICAgICAgICAgICAgICBpbnRlcnZh
bDEueDEgPSBpbnRlcnZhbDIueDI7Ci0gICAgICAgICAgICAgICAgaTIgKz0gMTsKLSAgICAgICAg
ICAgIH0gZWxzZSAgeyAvLyAoaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKLSAgICAgICAg
ICAgICAgICBpbnRlcnZhbDEueDIgPSBpbnRlcnZhbDIueDE7Ci0gICAgICAgICAgICAgICAgaTEg
Kz0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lv
bkludGVydmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzMWZlYjE4MTEzZGU4YzFlNDM0MWUw
MTAzNzA4Yjc3NGNhMzUxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uSW50ZXJ2YWwuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRv
YmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAg
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvbkludGVy
dmFsX2gKLSNkZWZpbmUgRXhjbHVzaW9uSW50ZXJ2YWxfaAotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBFeGNsdXNpb25JbnRlcnZhbCB7
Ci1wdWJsaWM6Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeDI7Ci0KLSAgICBFeGNsdXNpb25J
bnRlcnZhbChmbG9hdCB4MSA9IDAsIGZsb2F0IHgyID0gMCkKLSAgICAgICAgOiB4MSh4MSkKLSAg
ICAgICAgLCB4Mih4MikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBpbnRlcnNlY3QoY29uc3Qg
RXhjbHVzaW9uSW50ZXJ2YWwmLCBFeGNsdXNpb25JbnRlcnZhbCYpIGNvbnN0OwotfTsKLQotdm9p
ZCBzb3J0RXhjbHVzaW9uSW50ZXJ2YWxzKFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKTsKLXZv
aWQgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFs
PiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mLCBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+Jik7Ci12b2lkIGludGVyc2VjdEV4Y2x1c2lvbkludGVydmFscyhjb25zdCBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIFZl
Y3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKTsKLXZvaWQgc3VidHJhY3RFeGNsdXNpb25JbnRlcnZh
bHMoY29uc3QgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4mLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+Jik7Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEV4Y2x1c2lvbkludGVydmFsX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTlmOTc4ZjMwYjU4ZTIxNGI4NGE5ZDNkMWY4ZDQwODdhZTBiMmEyNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICog
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25Q
b2x5Z29uLmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWVudW0gRWRnZUludGVyc2VjdGlvblR5cGUgewotICAgIE5vcm1hbCwKLSAgICBW
ZXJ0ZXhNaW5ZLAotICAgIFZlcnRleE1heFksCi0gICAgVmVydGV4WUJvdGgKLX07Ci0KLXN0cnVj
dCBFZGdlSW50ZXJzZWN0aW9uIHsKLSAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlOwot
ICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKLX07
Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4
MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17
Ci0gICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0g
dmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgp
IC0gdmVydGV4MS55KCkpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzUmVmbGV4VmVydGV4
KGNvbnN0IEZsb2F0UG9pbnQmIHByZXZWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCwg
Y29uc3QgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKLXsKLSAgICByZXR1cm4gbGVmdFNpZGUocHJl
dlZlcnRleCwgbmV4dFZlcnRleCwgdmVydGV4KSA8IDA7Ci19Ci0KLXN0YXRpYyBib29sIGNvbXB1
dGVYSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9h
dCB5LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCi17Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSYgZWRnZSA9ICplZGdlUG9pbnRlcjsKLQotICAgIGlmIChlZGdlLm1pblkoKSA+IHkgfHwg
ZWRnZS5tYXhZKCkgPCB5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBGbG9h
dFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52ZXJ0ZXgxKCk7Ci0gICAgY29uc3QgRmxvYXRQb2ludCYg
dmVydGV4MiA9IGVkZ2UudmVydGV4MigpOwotICAgIGZsb2F0IGR5ID0gdmVydGV4Mi55KCkgLSB2
ZXJ0ZXgxLnkoKTsKLQotICAgIGZsb2F0IGludGVyc2VjdGlvblg7Ci0gICAgRWRnZUludGVyc2Vj
dGlvblR5cGUgaW50ZXJzZWN0aW9uVHlwZTsKLQotICAgIGlmICghZHkpIHsKLSAgICAgICAgaW50
ZXJzZWN0aW9uVHlwZSA9IFZlcnRleFlCb3RoOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gZWRn
ZS5taW5YKCk7Ci0gICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWluWSgpKSB7Ci0gICAgICAgIGlu
dGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNaW5ZOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZl
cnRleDEueSgpIDwgdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKLSAg
ICB9IGVsc2UgaWYgKHkgPT0gZWRnZS5tYXhZKCkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uVHlw
ZSA9IFZlcnRleE1heFk7Ci0gICAgICAgIGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPiB2
ZXJ0ZXgyLnkoKSkgPyB2ZXJ0ZXgxLngoKSA6IHZlcnRleDIueCgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBOb3JtYWw7Ci0gICAgICAgIGludGVyc2VjdGlvblgg
PSAoKHkgLSB2ZXJ0ZXgxLnkoKSkgKiAodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgLyBkeSkg
KyB2ZXJ0ZXgxLngoKTsKLSAgICB9Ci0KLSAgICByZXN1bHQuZWRnZSA9IGVkZ2VQb2ludGVyOwot
ICAgIHJlc3VsdC50eXBlID0gaW50ZXJzZWN0aW9uVHlwZTsKLSAgICByZXN1bHQucG9pbnQuc2V0
KGludGVyc2VjdGlvblgsIHkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRmxvYXRTaXplIGlud2FyZEVkZ2VOb3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRn
ZSkKLXsKLSAgICBGbG9hdFNpemUgZWRnZURlbHRhID0gZWRnZS52ZXJ0ZXgyKCkgLSBlZGdlLnZl
cnRleDEoKTsKLSAgICBpZiAoIWVkZ2VEZWx0YS53aWR0aCgpKQotICAgICAgICByZXR1cm4gRmxv
YXRTaXplKChlZGdlRGVsdGEuaGVpZ2h0KCkgPiAwID8gLTEgOiAxKSwgMCk7Ci0gICAgaWYgKCFl
ZGdlRGVsdGEuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoMCwgKGVkZ2VEZWx0
YS53aWR0aCgpID4gMCA/IDEgOiAtMSkpOwotICAgIGZsb2F0IGVkZ2VMZW5ndGggPSBlZGdlRGVs
dGEuZGlhZ29uYWxMZW5ndGgoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKC1lZGdlRGVsdGEuaGVp
Z2h0KCkgLyBlZGdlTGVuZ3RoLCBlZGdlRGVsdGEud2lkdGgoKSAvIGVkZ2VMZW5ndGgpOwotfQot
Ci1zdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvdXR3YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBv
bHlnb25FZGdlJiBlZGdlKQotewotICAgIHJldHVybiAtaW53YXJkRWRnZU5vcm1hbChlZGdlKTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZEFyYyhWZWN0b3I8RmxvYXRQb2ludD4mIHZl
cnRpY2VzLCBjb25zdCBGbG9hdFBvaW50JiBhcmNDZW50ZXIsIGZsb2F0IGFyY1JhZGl1cywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRBcmNWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZEFyY1Zl
cnRleCwgYm9vbCBwYWRkaW5nKQotewotICAgIGZsb2F0IHN0YXJ0QW5nbGUgPSBhdGFuMihzdGFy
dEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgpLCBzdGFydEFyY1ZlcnRleC54KCkgLSBhcmND
ZW50ZXIueCgpKTsKLSAgICBmbG9hdCBlbmRBbmdsZSA9IGF0YW4yKGVuZEFyY1ZlcnRleC55KCkg
LSBhcmNDZW50ZXIueSgpLCBlbmRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7Ci0gICAg
Y29uc3QgZmxvYXQgdHdvUEkgPSBwaUZsb2F0ICogMjsKLSAgICBpZiAoc3RhcnRBbmdsZSA8IDAp
Ci0gICAgICAgIHN0YXJ0QW5nbGUgKz0gdHdvUEk7Ci0gICAgaWYgKGVuZEFuZ2xlIDwgMCkKLSAg
ICAgICAgZW5kQW5nbGUgKz0gdHdvUEk7Ci0gICAgZmxvYXQgYW5nbGUgPSAoc3RhcnRBbmdsZSA+
IGVuZEFuZ2xlKSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpIDogKHN0YXJ0QW5nbGUgKyB0d29Q
SSAtIGVuZEFuZ2xlKTsKLSAgICBjb25zdCBmbG9hdCBhcmNTZWdtZW50Q291bnQgPSA2OyAvLyBB
biBldmVuIG51bWJlciBzbyB0aGF0IG9uZSBhcmMgdmVydGV4IHdpbGwgYmUgZWFjdGx5IGFyY1Jh
ZGl1cyBmcm9tIGFyY0NlbnRlci4KLSAgICBmbG9hdCBhcmNTZWdtZW50QW5nbGUgPSAgKChwYWRk
aW5nKSA/IC1hbmdsZSA6IHR3b1BJIC0gYW5nbGUpIC8gYXJjU2VnbWVudENvdW50OwotCi0gICAg
dmVydGljZXMuYXBwZW5kKHN0YXJ0QXJjVmVydGV4KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgYXJjU2VnbWVudENvdW50OyArK2kpIHsKLSAgICAgICAgZmxvYXQgYW5nbGUgPSBzdGFy
dEFuZ2xlICsgYXJjU2VnbWVudEFuZ2xlICogaTsKLSAgICAgICAgdmVydGljZXMuYXBwZW5kKGFy
Y0NlbnRlciArIEZsb2F0UG9pbnQoY29zKGFuZ2xlKSAqIGFyY1JhZGl1cywgc2luKGFuZ2xlKSAq
IGFyY1JhZGl1cykpOwotICAgIH0KLSAgICB2ZXJ0aWNlcy5hcHBlbmQoZW5kQXJjVmVydGV4KTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoVmVj
dG9yPEZsb2F0UG9pbnQ+JiB2ZXJ0aWNlcykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmVydGljZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHZlcnRpY2VzW2ldLnNldChMYXlvdXRV
bml0KHZlcnRpY2VzW2ldLngoKSkudG9GbG9hdCgpLCBMYXlvdXRVbml0KHZlcnRpY2VzW2ldLnko
KSkudG9GbG9hdCgpKTsKLX0KLQotc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdv
bj4gY29tcHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24s
IGZsb2F0IHBhZGRpbmcsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIE93blB0cjxWZWN0b3I8
RmxvYXRQb2ludD4gPiBwYWRkZWRWZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQ
b2ludD4oKSk7Ci0gICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb247Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcG9seWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkgewotICAgICAgICBj
b25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRnZUF0KGkpOwotICAg
ICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNFZGdlLnByZXZpb3Vz
RWRnZSgpOwotICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRn
ZSwgaW53YXJkRWRnZU5vcm1hbCh0aGlzRWRnZSkgKiBwYWRkaW5nKTsKLSAgICAgICAgT2Zmc2V0
UG9seWdvbkVkZ2UgcHJldk9mZnNldEVkZ2UocHJldkVkZ2UsIGlud2FyZEVkZ2VOb3JtYWwocHJl
dkVkZ2UpICogcGFkZGluZyk7Ci0KLSAgICAgICAgaWYgKHByZXZPZmZzZXRFZGdlLmludGVyc2Vj
dGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9uKSkKLSAgICAgICAgICAgIHBhZGRlZFZl
cnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoaXNSZWZsZXhW
ZXJ0ZXgocHJldkVkZ2UudmVydGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZl
cnRleDIoKSkpCi0gICAgICAgICAgICBhcHBlbmRBcmMoKnBhZGRlZFZlcnRpY2VzLCB0aGlzRWRn
ZS52ZXJ0ZXgxKCksIHBhZGRpbmcsIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNl
dEVkZ2UudmVydGV4MSgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBzbmFwVmVydGljZXNUb0xheW91
dFVuaXRHcmlkKCpwYWRkZWRWZXJ0aWNlcyk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9h
dFBvbHlnb24ocGFkZGVkVmVydGljZXMucmVsZWFzZSgpLCBmaWxsUnVsZSkpOwotfQotCi1zdGF0
aWMgaW5saW5lIFBhc3NPd25QdHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hhcGVNYXJnaW5Cb3Vu
ZHMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtYXJnaW4sIFdpbmRSdWxlIGZp
bGxSdWxlKQotewotICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtYXJnaW5WZXJ0aWNl
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKSk7Ci0gICAgRmxvYXRQb2ludCBp
bnRlcnNlY3Rpb247Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seWdvbi5udW1i
ZXJPZkVkZ2VzKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlz
RWRnZSA9IHBvbHlnb24uZWRnZUF0KGkpOwotICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdl
JiBwcmV2RWRnZSA9IHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpOwotICAgICAgICBPZmZzZXRQb2x5
Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwodGhpc0Vk
Z2UpICogbWFyZ2luKTsKLSAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9mZnNldEVkZ2Uo
cHJldkVkZ2UsIG91dHdhcmRFZGdlTm9ybWFsKHByZXZFZGdlKSAqIG1hcmdpbik7Ci0KLSAgICAg
ICAgaWYgKHByZXZPZmZzZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJz
ZWN0aW9uKSkKLSAgICAgICAgICAgIG1hcmdpblZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9u
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQXJjKCptYXJnaW5WZXJ0aWNlcywg
dGhpc0VkZ2UudmVydGV4MSgpLCBtYXJnaW4sIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhp
c09mZnNldEVkZ2UudmVydGV4MSgpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgc25hcFZlcnRpY2Vz
VG9MYXlvdXRVbml0R3JpZCgqbWFyZ2luVmVydGljZXMpOwotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRmxvYXRQb2x5Z29uKG1hcmdpblZlcnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKLX0K
LQotY29uc3QgRmxvYXRQb2x5Z29uJiBFeGNsdXNpb25Qb2x5Z29uOjpzaGFwZVBhZGRpbmdCb3Vu
ZHMoKSBjb25zdAotewotICAgIEFTU0VSVChzaGFwZVBhZGRpbmcoKSA+PSAwKTsKLSAgICBpZiAo
IXNoYXBlUGFkZGluZygpKQotICAgICAgICByZXR1cm4gbV9wb2x5Z29uOwotCi0gICAgaWYgKCFt
X3BhZGRpbmdCb3VuZHMpCi0gICAgICAgIG1fcGFkZGluZ0JvdW5kcyA9IGNvbXB1dGVTaGFwZVBh
ZGRpbmdCb3VuZHMobV9wb2x5Z29uLCBzaGFwZVBhZGRpbmcoKSwgbV9wb2x5Z29uLmZpbGxSdWxl
KCkpOwotCi0gICAgcmV0dXJuICptX3BhZGRpbmdCb3VuZHM7Ci19Ci0KLWNvbnN0IEZsb2F0UG9s
eWdvbiYgRXhjbHVzaW9uUG9seWdvbjo6c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAotewotICAg
IEFTU0VSVChzaGFwZU1hcmdpbigpID49IDApOwotICAgIGlmICghc2hhcGVNYXJnaW4oKSkKLSAg
ICAgICAgcmV0dXJuIG1fcG9seWdvbjsKLQotICAgIGlmICghbV9tYXJnaW5Cb3VuZHMpCi0gICAg
ICAgIG1fbWFyZ2luQm91bmRzID0gY29tcHV0ZVNoYXBlTWFyZ2luQm91bmRzKG1fcG9seWdvbiwg
c2hhcGVNYXJnaW4oKSwgbV9wb2x5Z29uLmZpbGxSdWxlKCkpOwotCi0gICAgcmV0dXJuICptX21h
cmdpbkJvdW5kczsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlv
blZlcnRpY2VzKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbiwgRmxvYXRQb2lu
dCYgcHJldlZlcnRleCwgRmxvYXRQb2ludCYgdGhpc1ZlcnRleCwgRmxvYXRQb2ludCYgbmV4dFZl
cnRleCkKLXsKLSAgICBpZiAoaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWluWSAmJiBpbnRl
cnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhNYXhZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBBU1NFUlQoaW50ZXJzZWN0aW9uLmVkZ2UgJiYgaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24o
KSk7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gKihpbnRlcnNlY3Rpb24uZWRn
ZS0+cG9seWdvbigpKTsKLSAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICoo
aW50ZXJzZWN0aW9uLmVkZ2UpOwotCi0gICAgaWYgKChpbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0
ZXhNaW5ZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpIDwgdGhpc0VkZ2UudmVydGV4MigpLnko
KSkpCi0gICAgICAgIHx8IChpbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZICYmICh0aGlz
RWRnZS52ZXJ0ZXgxKCkueSgpID4gdGhpc0VkZ2UudmVydGV4MigpLnkoKSkpKSB7Ci0gICAgICAg
IHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpLnZl
cnRleEluZGV4MSgpKTsKLSAgICAgICAgdGhpc1ZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhp
c0VkZ2UudmVydGV4SW5kZXgxKCkpOwotICAgICAgICBuZXh0VmVydGV4ID0gcG9seWdvbi52ZXJ0
ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJl
dlZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkpOwotICAg
ICAgICB0aGlzVmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDIo
KSk7Ci0gICAgICAgIG5leHRWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLm5leHRF
ZGdlKCkudmVydGV4SW5kZXgyKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgYXBwZW5kSW50ZXJ2YWxYKGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBW
ZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCi17Ci0gICAgaWYgKCFpbnNpZGUpCi0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoRXhjbHVzaW9uSW50ZXJ2YWwoeCkpOwotICAgIGVsc2UKLSAg
ICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxXS54MiA9IHg7Ci0KLSAgICByZXR1cm4gIWlu
c2lkZTsKLX0KLQotc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKGNvbnN0IEVk
Z2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGlu
dGVyc2VjdGlvbjIpCi17Ci0gICAgZmxvYXQgeDEgPSBpbnRlcnNlY3Rpb24xLnBvaW50LngoKTsK
LSAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIucG9pbnQueCgpOwotICAgIHJldHVybiAoeDEg
PT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwgaW50ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4
MjsKLX0KLQotc3RhdGljIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGNvbnN0IEZsb2F0UG9s
eWdvbiYgcG9seWdvbiwgZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4mIHJlc3VsdCkKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVk
Z2VzOwotICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHksIHksIGVkZ2VzKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlv
bnM7Ci0gICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjb21wdXRlWElu
dGVyc2VjdGlvbihlZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlw
ZSAhPSBWZXJ0ZXhZQm90aCkKLSAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYXBwZW5kKGludGVy
c2VjdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKGludGVyc2VjdGlvbnMuc2l6ZSgpIDwgMikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjpzb3J0KGludGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50
ZXJzZWN0aW9ucy5lbmQoKSwgV2ViQ29yZTo6Y29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25YKTsKLQot
ICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBpbnQgd2luZENvdW50ID0gMDsKLSAgICBib29s
IGluc2lkZSA9IGZhbHNlOwotCi0gICAgd2hpbGUgKGluZGV4IDwgaW50ZXJzZWN0aW9ucy5zaXpl
KCkpIHsKLSAgICAgICAgY29uc3QgRWRnZUludGVyc2VjdGlvbiYgdGhpc0ludGVyc2VjdGlvbiA9
IGludGVyc2VjdGlvbnNbaW5kZXhdOwotICAgICAgICBpZiAoaW5kZXggKyAxIDwgaW50ZXJzZWN0
aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIG5leHRJ
bnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4ICsgMV07Ci0gICAgICAgICAgICBpZiAo
KHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpID09IG5leHRJbnRlcnNlY3Rpb24ucG9pbnQueCgp
KSAmJiAodGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1pblkgfHwgdGhpc0ludGVyc2Vj
dGlvbi50eXBlID09IFZlcnRleE1heFkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXNJbnRl
cnNlY3Rpb24udHlwZSA9PSBuZXh0SW50ZXJzZWN0aW9uLnR5cGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gU2tpcCBwYWlycyBvZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0
ZXhNYXhZLFZlcnRleE1heFkgYW5kIFZlcnRleE1pblksVmVydGV4TWluWS4KLSAgICAgICAgICAg
ICAgICAgICAgaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBSZXBsYWNlIHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMg
YXJlIFZlcnRleE1pblksVmVydGV4TWF4WSBvciBWZXJ0ZXhNYXhZLFZlcnRleE1pblkgd2l0aCBv
bmUgaW50ZXJzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJ
bnRlcnNlY3Rpb24uZWRnZTsKLSAgICAgICAgYm9vbCBldmVuT2RkQ3Jvc3NpbmcgPSAhd2luZENv
dW50OwotCi0gICAgICAgIGlmIChwb2x5Z29uLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7
Ci0gICAgICAgICAgICB3aW5kQ291bnQgKz0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlz
RWRnZS52ZXJ0ZXgxKCkueSgpKSA/IDEgOiAtMTsKLSAgICAgICAgICAgIGV2ZW5PZGRDcm9zc2lu
ZyA9IGV2ZW5PZGRDcm9zc2luZyB8fCAhd2luZENvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGV2ZW5PZGRDcm9zc2luZykgewotICAgICAgICAgICAgYm9vbCBlZGdlQ3Jvc3NpbmcgPSB0
aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gTm9ybWFsOwotICAgICAgICAgICAgaWYgKCFlZGdlQ3Jv
c3NpbmcpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHByZXZWZXJ0ZXg7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRQb2ludCB0aGlzVmVydGV4OwotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgbmV4dFZlcnRleDsKLQotICAgICAgICAgICAgICAgIGlmIChnZXRWZXJ0ZXhJbnRlcnNlY3Rp
b25WZXJ0aWNlcyh0aGlzSW50ZXJzZWN0aW9uLCBwcmV2VmVydGV4LCB0aGlzVmVydGV4LCBuZXh0
VmVydGV4KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZlcnRleC55KCkgPT0geSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gcHJldlZl
cnRleC55KCkgPiB5IDogcHJldlZlcnRleC55KCkgPCB5OwotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChwcmV2VmVydGV4LnkoKSA9PSB5KQotICAgICAgICAgICAgICAgICAgICAgICAgZWRn
ZUNyb3NzaW5nID0gKGlzTWluWSkgPyBuZXh0VmVydGV4LnkoKSA+IHkgOiBuZXh0VmVydGV4Lnko
KSA8IHk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVkZ2VDcm9zc2luZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGVkZ2VDcm9zc2luZykKLSAgICAgICAgICAgICAgICBpbnNpZGUgPSBh
cHBlbmRJbnRlcnZhbFgodGhpc0ludGVyc2VjdGlvbi5wb2ludC54KCksIGluc2lkZSwgcmVzdWx0
KTsKLSAgICAgICAgfQotCi0gICAgICAgICsraW5kZXg7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYg
cG9seWdvbiwgZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiBy
ZXN1bHQpCi17Ci0gICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKLSAg
ICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5MSwgeTIsIGVkZ2VzKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tpXTsKLSAgICAgICAgZmxvYXQgeDE7Ci0gICAg
ICAgIGZsb2F0IHgyOwotCi0gICAgICAgIGlmIChlZGdlLT5taW5ZKCkgPCB5MSkgewotICAgICAg
ICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwgeTEsIGludGVyc2VjdGlvbik7Ci0gICAg
ICAgICAgICB4MSA9IGludGVyc2VjdGlvbi5wb2ludC54KCk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgeDEgPSAoZWRnZS0+dmVydGV4MSgpLnkoKSA8IGVkZ2UtPnZlcnRleDIoKS55KCkp
ID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2UtPnZlcnRleDIoKS54KCk7Ci0KLSAgICAgICAg
aWYgKGVkZ2UtPm1heFkoKSA+IHkyKSB7Ci0gICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlv
bihlZGdlLCB5MiwgaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgICAgIHgyID0gaW50ZXJzZWN0aW9u
LnBvaW50LngoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB4MiA9IChlZGdlLT52ZXJ0
ZXgxKCkueSgpID4gZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDog
ZWRnZS0+dmVydGV4MigpLngoKTsKLQotICAgICAgICBpZiAoeDEgPiB4MikKLSAgICAgICAgICAg
IHN0ZDo6c3dhcCh4MSwgeDIpOwotCi0gICAgICAgIGlmICh4MiA+IHgxKQotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChFeGNsdXNpb25JbnRlcnZhbCh4MSwgeDIpKTsKLSAgICB9Ci0KLSAgICBz
b3J0RXhjbHVzaW9uSW50ZXJ2YWxzKHJlc3VsdCk7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUG9seWdv
bjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
RmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKLSAgICBpZiAocG9s
eWdvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHkxID0gbG9naWNh
bFRvcDsKLSAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAg
ICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7
Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2
YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOwot
ICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBt
ZXJnZWRJbnRlcnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdlSW50
ZXJ2YWxzOwotICAgIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMocG9seWdvbiwg
eTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4g
ZXhjbHVkZWRJbnRlcnZhbHM7Ci0gICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMobWVyZ2VkSW50
ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVydmFscyk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhjbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgRXhjbHVzaW9uSW50ZXJ2YWwgaW50ZXJ2YWwgPSBleGNsdWRlZEludGVydmFsc1tpXTsKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbnRlcnZhbC54MSwgaW50ZXJ2YWwueDIp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZh
bHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21l
bnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29u
ID0gc2hhcGVQYWRkaW5nQm91bmRzKCk7Ci0gICAgaWYgKHBvbHlnb24uaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIg
PSBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKLQotICAgIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rp
b25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOwotICAgIGNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHkyWEludGVydmFscyk7Ci0KLSAgICBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+IGNvbW1vbkludGVydmFsczsKLSAgICBpbnRlcnNlY3RFeGNsdXNp
b25JbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7
Ci0KLSAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29t
cHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRl
cnZhbHMpOwotCi0gICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBpbmNsdWRlZEludGVydmFs
czsKLSAgICBzdWJ0cmFjdEV4Y2x1c2lvbkludGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJ
bnRlcnZhbHMsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25J
bnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOwotICAgICAgICByZXN1bHQu
YXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOwotICAgIH0KLX0K
LQotc3RhdGljIGlubGluZSBib29sIGZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFBv
bHlnb24mIHBvbHlnb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5zaWduZWQgb2Zmc2V0RWRn
ZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MikKLXsKLSAgICBWZWN0b3I8Y29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwotICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0Vk
Z2VzKHJlY3QueSgpLCByZWN0Lm1heFkoKSwgZWRnZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07Ci0gICAgICAgIGlm
IChlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJbmRl
eCgpICE9IG9mZnNldEVkZ2VJbmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgYWJvdmVPclRvVGhlTGVmdChjb25zdCBGbG9hdFJlY3QmIHIxLCBj
b25zdCBGbG9hdFJlY3QmIHIyKQotewotICAgIGlmIChyMS55KCkgPCByMi55KCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChyMS55KCkgPT0gcjIueSgpKQotICAgICAgICByZXR1cm4g
cjEueCgpIDwgcjIueCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFeGNsdXNpb25Q
b2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9n
aWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXpl
LCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxUb3Ag
PSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBt
aW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhlaWdodCgpOwotICAgIGZsb2F0IG1pbkludGVydmFsV2lk
dGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCk7Ci0KLSAgICBjb25zdCBGbG9hdFBv
bHlnb24mIHBvbHlnb24gPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBjb25zdCBGbG9hdFJl
Y3QgYm91bmRpbmdCb3ggPSBwb2x5Z29uLmJvdW5kaW5nQm94KCk7Ci0gICAgaWYgKG1pbkludGVy
dmFsV2lkdGggPiBib3VuZGluZ0JveC53aWR0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBmbG9hdCBtaW5ZID0gc3RkOjptYXgoYm91bmRpbmdCb3gueSgpLCBtaW5JbnRlcnZhbFRv
cCk7Ci0gICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRlcnZhbEhlaWdodDsKLQotICAgIGlm
IChtYXhZID4gYm91bmRpbmdCb3gubWF4WSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwotICAgIHBvbHlnb24ub3Zl
cmxhcHBpbmdFZGdlcyhtaW5JbnRlcnZhbFRvcCwgYm91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7
Ci0KLSAgICBmbG9hdCBkeCA9IG1pbkludGVydmFsV2lkdGggLyAyOwotICAgIGZsb2F0IGR5ID0g
bWluSW50ZXJ2YWxIZWlnaHQgLyAyOwotICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zm
c2V0RWRnZXM7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0p
OwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2Uo
KS52ZXJ0ZXgxKCk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZl
cnRleDEoKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4
MigpOwotICAgICAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNldEVkZ2VCdWZmZXI7
Ci0KLSAgICAgICAgaWYgKHZlcnRleDIueSgpID4gdmVydGV4MS55KCkgPyB2ZXJ0ZXgyLngoKSA+
PSB2ZXJ0ZXgxLngoKSA6IHZlcnRleDEueCgpID49IHZlcnRleDIueCgpKSB7Ci0gICAgICAgICAg
ICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShlZGdlLCBGbG9hdFNp
emUoZHgsIC1keSkpKTsKLSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNl
dFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIGR5KSkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2Uo
ZWRnZSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKLSAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIu
YXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6ZSgtZHgsIC1keSkpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChpc1JlZmxleFZlcnRleCh2ZXJ0ZXgwLCB2ZXJ0ZXgxLCB2
ZXJ0ZXgyKSkgewotICAgICAgICAgICAgaWYgKHZlcnRleDIueCgpIDw9IHZlcnRleDEueCgpICYm
IHZlcnRleDAueCgpIDw9IHZlcnRleDEueCgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VC
dWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZShkeCwgLWR5
KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueCgp
ID49IHZlcnRleDEueCgpICYmIHZlcnRleDAueCgpID49IHZlcnRleDEueCgpKQotICAgICAgICAg
ICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEs
IEZsb2F0U2l6ZSgtZHgsIC1keSksIEZsb2F0U2l6ZSgtZHgsIGR5KSkpOwotICAgICAgICAgICAg
aWYgKHZlcnRleDIueSgpIDw9IHZlcnRleDEueSgpICYmIHZlcnRleDAueSgpIDw9IHZlcnRleDEu
eSgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHln
b25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIGR5KSwgRmxvYXRTaXplKGR4LCBkeSkpKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHZlcnRleDIueSgpID49IHZlcnRleDEueSgpICYmIHZlcnRl
eDAueSgpID49IHZlcnRleDEueSgpKQotICAgICAgICAgICAgICAgIG9mZnNldEVkZ2VCdWZmZXIu
YXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHZlcnRleDEsIEZsb2F0U2l6ZSgtZHgsIC1keSksIEZs
b2F0U2l6ZShkeCwgLWR5KSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IG9mZnNldEVkZ2VCdWZmZXIuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBpZiAo
b2Zmc2V0RWRnZUJ1ZmZlcltqXS5tYXhZKCkgPj0gbWluWSkKLSAgICAgICAgICAgICAgICBvZmZz
ZXRFZGdlcy5hcHBlbmQob2Zmc2V0RWRnZUJ1ZmZlcltqXSk7Ci0gICAgfQotCi0gICAgb2Zmc2V0
RWRnZXMuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKHBvbHlnb24sIG1pbkludGVydmFsVG9wLCBG
bG9hdFNpemUoMCwgZHkpKSk7Ci0KLSAgICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0
aW9uOwotICAgIEZsb2F0UmVjdCBmaXJzdEZpdFJlY3Q7Ci0gICAgYm9vbCBmaXJzdEZpdEZvdW5k
ID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2Zmc2V0RWRnZXMuc2l6
ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgb2Zm
c2V0RWRnZXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXRFZGdlc1tpXS5p
bnRlcnNlY3Rpb24ob2Zmc2V0RWRnZXNbal0sIG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKSkgewot
ICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbihvZmZz
ZXRFZGdlc0ludGVyc2VjdGlvbi54KCkgLSBkeCwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24ueSgp
IC0gZHkpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZpdFJlY3Qo
cG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbiwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKChvZmZzZXRFZGdlc1tpXS5iYXNpcygpID09IE9mZnNldFBvbHlnb25F
ZGdlOjpMaW5lVG9wCi0gICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldEVkZ2VzW2pdLmJhc2lz
KCkgPT0gT2Zmc2V0UG9seWdvbkVkZ2U6OkxpbmVUb3AKLSAgICAgICAgICAgICAgICAgICAgfHwg
cG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbi55KCkgPj0gbWluSW50ZXJ2YWxUb3ApCi0gICAgICAg
ICAgICAgICAgICAgICYmICghZmlyc3RGaXRGb3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVu
dGlhbEZpcnN0Rml0UmVjdCwgZmlyc3RGaXRSZWN0KSkKLSAgICAgICAgICAgICAgICAgICAgJiYg
cG9seWdvbi5jb250YWlucyhvZmZzZXRFZGdlc0ludGVyc2VjdGlvbikKLSAgICAgICAgICAgICAg
ICAgICAgJiYgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKHBvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0
UmVjdCwgb2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRl
eCgpKSkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgZmlyc3RGaXRSZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChmaXJzdEZpdEZvdW5kKQotICAgICAgICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGZpcnN0
Rml0UmVjdC55KCkpOwotICAgIHJldHVybiBmaXJzdEZpdEZvdW5kOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uUG9seWdvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4NTUzYWIyMWQwNjQ0MWJlYmEzMDE5
YWMwYjlhNTI4NmE1ZmVlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRv
YmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAg
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblBvbHln
b25faAotI2RlZmluZSBFeGNsdXNpb25Qb2x5Z29uX2gKLQotI2luY2x1ZGUgIkV4Y2x1c2lvbklu
dGVydmFsLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKLSNpbmNsdWRlICJGbG9hdFBv
bHlnb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBPZmZzZXRQb2x5Z29uRWRn
ZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKLXB1YmxpYzoKLSAgICBlbnVtIEJhc2lzIHsKLSAgICAg
ICAgRWRnZSwKLSAgICAgICAgVmVydGV4LAotICAgICAgICBMaW5lVG9wCi0gICAgfTsKLQotICAg
IE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgb2Zmc2V0KQotICAgICAgICA6IG1fdmVydGV4MShlZGdlLnZlcnRleDEoKSArIG9m
ZnNldCkKLSAgICAgICAgLCBtX3ZlcnRleDIoZWRnZS52ZXJ0ZXgyKCkgKyBvZmZzZXQpCi0gICAg
ICAgICwgbV9lZGdlSW5kZXgoZWRnZS5lZGdlSW5kZXgoKSkKLSAgICAgICAgLCBtX2Jhc2lzKEVk
Z2UpCi0gICAgewotICAgIH0KLQotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9p
bnQmIHJlZmxleFZlcnRleCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQxLCBjb25zdCBGbG9hdFNp
emUmIG9mZnNldDIpCi0gICAgICAgIDogbV92ZXJ0ZXgxKHJlZmxleFZlcnRleCArIG9mZnNldDEp
Ci0gICAgICAgICwgbV92ZXJ0ZXgyKHJlZmxleFZlcnRleCArIG9mZnNldDIpCi0gICAgICAgICwg
bV9lZGdlSW5kZXgoLTEpCi0gICAgICAgICwgbV9iYXNpcyhWZXJ0ZXgpCi0gICAgewotICAgIH0K
LQotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxv
YXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLSAgICAg
ICAgOiBtX3ZlcnRleDEoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgpLCBtaW5M
b2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQotICAgICAgICAsIG1fdmVydGV4MihGbG9hdFBv
aW50KHBvbHlnb24uYm91bmRpbmdCb3goKS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkg
KyBvZmZzZXQpCi0gICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCi0gICAgICAgICwgbV9iYXNpcyhM
aW5lVG9wKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZl
cnRleDEoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRleDE7IH0KLSAgICB2aXJ0dWFs
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Zl
cnRleDI7IH0KLSAgICBpbnQgZWRnZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZGdlSW5kZXg7
IH0KLSAgICBCYXNpcyBiYXNpcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFzaXM7IH0KLQotcHJpdmF0
ZToKLSAgICBGbG9hdFBvaW50IG1fdmVydGV4MTsKLSAgICBGbG9hdFBvaW50IG1fdmVydGV4MjsK
LSAgICBpbnQgbV9lZGdlSW5kZXg7Ci0gICAgQmFzaXMgbV9iYXNpczsKLX07Ci0KLWNsYXNzIEV4
Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOwotcHVibGljOgotICAgIEV4Y2x1c2lvblBvbHln
b24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmls
bFJ1bGUpCi0gICAgICAgIDogRXhjbHVzaW9uU2hhcGUoKQotICAgICAgICAsIG1fcG9seWdvbih2
ZXJ0aWNlcywgZmlsbFJ1bGUpCi0gICAgICAgICwgbV9tYXJnaW5Cb3VuZHMobnVsbHB0cikKLSAg
ICAgICAgLCBtX3BhZGRpbmdCb3VuZHMobnVsbHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgdmly
dHVhbCBMYXlvdXRSZWN0IHNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVNYXJnaW5Cb3VuZHMo
KS5ib3VuZGluZ0JveCgpKTsgfQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZVBhZGRpbmdM
b2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBzdGF0aWNfY2FzdDxM
YXlvdXRSZWN0PihzaGFwZVBhZGRpbmdCb3VuZHMoKS5ib3VuZGluZ0JveCgpKTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wb2x5Z29uLmlz
RW1wdHkoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5
b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0
JikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZh
bExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91
dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdCBPVkVSUklE
RTsKLQotcHJpdmF0ZToKLSAgICBjb25zdCBGbG9hdFBvbHlnb24mIHNoYXBlTWFyZ2luQm91bmRz
KCkgY29uc3Q7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZVBhZGRpbmdCb3VuZHMoKSBj
b25zdDsKLQotICAgIEZsb2F0UG9seWdvbiBtX3BvbHlnb247Ci0gICAgbXV0YWJsZSBPd25QdHI8
RmxvYXRQb2x5Z29uPiBtX21hcmdpbkJvdW5kczsKLSAgICBtdXRhYmxlIE93blB0cjxGbG9hdFBv
bHlnb24+IG1fcGFkZGluZ0JvdW5kczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEV4Y2x1c2lvblBvbHlnb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDZiNTIwMjZlOGExZTE2Y2Y0ZTNmOWI2YzlkMmFiMWQyNWYwZWZiZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uUmVjdGFuZ2xlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
LSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblJlY3RhbmdsZS5o
IgotCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VYSW50ZXJjZXB0KGZsb2F0IHksIGZsb2F0IHJ4
LCBmbG9hdCByeSkKLXsKLSAgICBBU1NFUlQocnkgPiAwKTsKLSAgICByZXR1cm4gcnggKiBzcXJ0
KDEgLSAoeSAqIHkpIC8gKHJ5ICogcnkpKTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBlbGxp
cHNlWUludGVyY2VwdChmbG9hdCB4LCBmbG9hdCByeCwgZmxvYXQgcnkpCi17Ci0gICAgQVNTRVJU
KHJ4ID4gMCk7Ci0gICAgcmV0dXJuIHJ5ICogc3FydCgxIC0gKHggKiB4KSAvIChyeCAqIHJ4KSk7
Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgRmxvYXRSb3VuZGVkUmVjdDo6cGFkZGluZ0JvdW5kcyhm
bG9hdCBwYWRkaW5nKSBjb25zdAotewotICAgIEFTU0VSVChwYWRkaW5nID49IDApOwotICAgIGlm
ICghcGFkZGluZyB8fCBpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIGZs
b2F0IGJvdW5kc1ggPSB4KCkgKyBzdGQ6Om1pbih3aWR0aCgpIC8gMiwgcGFkZGluZyk7Ci0gICAg
ZmxvYXQgYm91bmRzWSA9IHkoKSArIHN0ZDo6bWluKGhlaWdodCgpIC8gMiwgcGFkZGluZyk7Ci0g
ICAgZmxvYXQgYm91bmRzV2lkdGggPSBzdGQ6Om1heCgwLjBmLCB3aWR0aCgpIC0gcGFkZGluZyAq
IDIpOwotICAgIGZsb2F0IGJvdW5kc0hlaWdodCA9IHN0ZDo6bWF4KDAuMGYsIGhlaWdodCgpIC0g
cGFkZGluZyAqIDIpOwotICAgIGZsb2F0IGJvdW5kc1JhZGl1c1ggPSBzdGQ6Om1heCgwLjBmLCBy
eCgpIC0gcGFkZGluZyk7Ci0gICAgZmxvYXQgYm91bmRzUmFkaXVzWSA9IHN0ZDo6bWF4KDAuMGYs
IHJ5KCkgLSBwYWRkaW5nKTsKLSAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdChGbG9hdFJlY3Qo
Ym91bmRzWCwgYm91bmRzWSwgYm91bmRzV2lkdGgsIGJvdW5kc0hlaWdodCksIEZsb2F0U2l6ZShi
b3VuZHNSYWRpdXNYLCBib3VuZHNSYWRpdXNZKSk7Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgRmxv
YXRSb3VuZGVkUmVjdDo6bWFyZ2luQm91bmRzKGZsb2F0IG1hcmdpbikgY29uc3QKLXsKLSAgICBB
U1NFUlQobWFyZ2luID49IDApOwotICAgIGlmICghbWFyZ2luKQotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0KLSAgICBmbG9hdCBib3VuZHNYID0geCgpIC0gbWFyZ2luOwotICAgIGZsb2F0IGJvdW5k
c1kgPSB5KCkgLSBtYXJnaW47Ci0gICAgZmxvYXQgYm91bmRzV2lkdGggPSB3aWR0aCgpICsgbWFy
Z2luICogMjsKLSAgICBmbG9hdCBib3VuZHNIZWlnaHQgPSBoZWlnaHQoKSArIG1hcmdpbiAqIDI7
Ci0gICAgZmxvYXQgYm91bmRzUmFkaXVzWCA9IHJ4KCkgKyBtYXJnaW47Ci0gICAgZmxvYXQgYm91
bmRzUmFkaXVzWSA9IHJ5KCkgKyBtYXJnaW47Ci0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Qo
RmxvYXRSZWN0KGJvdW5kc1gsIGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBG
bG9hdFNpemUoYm91bmRzUmFkaXVzWCwgYm91bmRzUmFkaXVzWSkpOwotfQotCi1GbG9hdFBvaW50
IEZsb2F0Um91bmRlZFJlY3Q6OmNvcm5lckludGVyY2VwdEZvcldpZHRoKGZsb2F0IHdpZHRoQXRJ
bnRlcmNlcHQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgeGkgPSAod2lkdGgoKSAtIHdpZHRoQXRJbnRl
cmNlcHQpIC8gMjsKLSAgICBmbG9hdCB5aSA9IHJ5KCkgLSBlbGxpcHNlWUludGVyY2VwdChyeCgp
IC0geGksIHJ4KCksIHJ5KCkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHhpLCB5aSk7Ci19Ci0K
LUZsb2F0Um91bmRlZFJlY3QgRXhjbHVzaW9uUmVjdGFuZ2xlOjpzaGFwZVBhZGRpbmdCb3VuZHMo
KSBjb25zdAotewotICAgIGlmICghbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKSB7Ci0g
ICAgICAgIG1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcyA9IHRydWU7Ci0gICAgICAgIG1f
cGFkZGluZ0JvdW5kcyA9IG1fYm91bmRzLnBhZGRpbmdCb3VuZHMoc2hhcGVQYWRkaW5nKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gbV9wYWRkaW5nQm91bmRzOwotfQotCi1GbG9hdFJvdW5kZWRSZWN0
IEV4Y2x1c2lvblJlY3RhbmdsZTo6c2hhcGVNYXJnaW5Cb3VuZHMoKSBjb25zdAotewotICAgIGlm
ICghbV9oYXZlSW5pdGlhbGl6ZWRNYXJnaW5Cb3VuZHMpIHsKLSAgICAgICAgbV9oYXZlSW5pdGlh
bGl6ZWRNYXJnaW5Cb3VuZHMgPSB0cnVlOwotICAgICAgICBtX21hcmdpbkJvdW5kcyA9IG1fYm91
bmRzLm1hcmdpbkJvdW5kcyhzaGFwZU1hcmdpbigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbWFy
Z2luQm91bmRzOwotfQotCi12b2lkIEV4Y2x1c2lvblJlY3RhbmdsZTo6Z2V0RXhjbHVkZWRJbnRl
cnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
Ym91bmRzID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKLSAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0
IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBpZiAoeTIgPCBib3VuZHMu
eSgpIHx8IHkxID49IGJvdW5kcy5tYXhZKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0
IHgxID0gYm91bmRzLngoKTsKLSAgICBmbG9hdCB4MiA9IGJvdW5kcy5tYXhYKCk7Ci0KLSAgICBp
ZiAoYm91bmRzLnJ5KCkgPiAwKSB7Ci0gICAgICAgIGlmICh5MiA8IGJvdW5kcy55KCkgKyBib3Vu
ZHMucnkoKSkgewotICAgICAgICAgICAgZmxvYXQgeWkgPSB5MiAtIGJvdW5kcy55KCkgLSBib3Vu
ZHMucnkoKTsKLSAgICAgICAgICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIGJv
dW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBi
b3VuZHMucngoKSAtIHhpOwotICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRz
LnJ4KCkgKyB4aTsKLSAgICAgICAgfSBlbHNlIGlmICh5MSA+IGJvdW5kcy5tYXhZKCkgLSBib3Vu
ZHMucnkoKSkgewotICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTEgLSAoYm91bmRzLm1heFkoKSAt
IGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQo
eWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgICAgICB4MSA9IGJvdW5kcy54
KCkgKyBib3VuZHMucngoKSAtIHhpOwotICAgICAgICAgICAgeDIgPSBib3VuZHMubWF4WCgpIC0g
Ym91bmRzLnJ4KCkgKyB4aTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQo
TGluZVNlZ21lbnQoeDEsIHgyKSk7Ci19Ci0KLXZvaWQgRXhjbHVzaW9uUmVjdGFuZ2xlOjpnZXRJ
bmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNh
bEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBpZiAoYm91bmRz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9w
OwotICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBpZiAo
eTEgPCBib3VuZHMueSgpIHx8IHkyID4gYm91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZmxvYXQgeDEgPSBib3VuZHMueCgpOwotICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgo
KTsKLQotICAgIGlmIChib3VuZHMucnkoKSA+IDApIHsKLSAgICAgICAgYm9vbCB5MUludGVyY2Vw
dHNDb3JuZXIgPSB5MSA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKTsKLSAgICAgICAgYm9vbCB5
MkludGVyY2VwdHNDb3JuZXIgPSB5MiA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKLSAg
ICAgICAgZmxvYXQgeGkgPSAwOwotCi0gICAgICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgJiYg
eTJJbnRlcmNlcHRzQ29ybmVyKSB7Ci0gICAgICAgICAgICBpZiAgKHkxIDwgYm91bmRzLmhlaWdo
dCgpICsgMiAqIGJvdW5kcy55KCkgLSB5MikgewotICAgICAgICAgICAgICAgIGZsb2F0IHlpID0g
eTEgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5KCk7Ci0gICAgICAgICAgICAgICAgeGkgPSBlbGxp
cHNlWEludGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFko
KSAtIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0
KHlpLCBib3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lcikgewotICAgICAgICAgICAgZmxvYXQgeWkgPSB5
MSAtIGJvdW5kcy55KCkgLSBib3VuZHMucnkoKTsKLSAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJ
bnRlcmNlcHQoeWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoeTJJbnRlcmNlcHRzQ29ybmVyKSB7Ci0gICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChi
b3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCkpOwotICAgICAgICAgICAgeGkgPSBlbGxpcHNlWElu
dGVyY2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgfHwgeTJJbnRlcmNlcHRzQ29ybmVyKSB7Ci0gICAg
ICAgICAgICB4MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAtIHhpOwotICAgICAgICAgICAg
eDIgPSBib3VuZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoeDEsIHgyKSk7Ci19Ci0KLWJvb2wgRXhj
bHVzaW9uUmVjdGFuZ2xlOjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVu
aXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50
ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgZmxvYXQgbWluSW50
ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxI
ZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhlaWdodCgpOwotICAgIGZsb2F0IG1pbklu
dGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCk7Ci0KLSAgICBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiBib3VuZHMgPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKLSAgICBp
ZiAoYm91bmRzLmlzRW1wdHkoKSB8fCBtaW5JbnRlcnZhbFdpZHRoID4gYm91bmRzLndpZHRoKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3Vu
ZHMueSgpLCBtaW5JbnRlcnZhbFRvcCk7Ci0gICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5JbnRl
cnZhbEhlaWdodDsKLQotICAgIGlmIChtYXhZID4gYm91bmRzLm1heFkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBpbnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyID0gbWluWSA8
IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKTsKLSAgICBib29sIGludGVydmFsT3ZlcmxhcHNNYXhD
b3JuZXIgPSBtYXhZID4gYm91bmRzLm1heFkoKSAtIGJvdW5kcy5yeSgpOwotCi0gICAgaWYgKCFp
bnRlcnZhbE92ZXJsYXBzTWluQ29ybmVyICYmICFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyKSB7
Ci0gICAgICAgIHJlc3VsdCA9IG1pblk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMjsKLSAg
ICBib29sIG1pbkNvcm5lckRlZmluZXNYID0gZmFicyhjZW50ZXJZIC0gbWluWSkgPiBmYWJzKGNl
bnRlclkgLSBtYXhZKTsKLSAgICBib29sIGludGVydmFsRml0c1dpdGhpbkNvcm5lcnMgPSBtaW5J
bnRlcnZhbFdpZHRoICsgMiAqIGJvdW5kcy5yeCgpIDw9IGJvdW5kcy53aWR0aCgpOwotICAgIEZs
b2F0UG9pbnQgY29ybmVySW50ZXJjZXB0ID0gYm91bmRzLmNvcm5lckludGVyY2VwdEZvcldpZHRo
KG1pbkludGVydmFsV2lkdGgpOwotCi0gICAgaWYgKGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIg
JiYgKCFpbnRlcnZhbE92ZXJsYXBzTWF4Q29ybmVyIHx8IG1pbkNvcm5lckRlZmluZXNYKSkgewot
ICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyB8fCBib3VuZHMueSgpICsgY29y
bmVySW50ZXJjZXB0LnkoKSA8IG1pblkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1pblk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWluSW50ZXJ2
YWxIZWlnaHQgPCBib3VuZHMuaGVpZ2h0KCkgLSAoMiAqIGNvcm5lckludGVyY2VwdC55KCkpKSB7
Ci0gICAgICAgICAgICByZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KGJvdW5kcy55KCkgKyBjb3Ju
ZXJJbnRlcmNlcHQueSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIgJiYgKCFpbnRlcnZhbE92
ZXJsYXBzTWluQ29ybmVyIHx8ICFtaW5Db3JuZXJEZWZpbmVzWCkpIHsKLSAgICAgICAgaWYgKGlu
dGVydmFsRml0c1dpdGhpbkNvcm5lcnMgfHwgbWluWSA8PSAgYm91bmRzLm1heFkoKSAtIGNvcm5l
ckludGVyY2VwdC55KCkgLSBtaW5JbnRlcnZhbEhlaWdodCkgewotICAgICAgICAgICAgcmVzdWx0
ID0gbWluWTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUmVjdGFuZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDMwOWZkYWMxNjNjMTJlZTczZDJiZTg5M2VmMzE4OGJkMzI3N2MyYTAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblJlY3RhbmdsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICog
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uUmVjdGFuZ2xlX2gKLSNkZWZpbmUgRXhj
bHVzaW9uUmVjdGFuZ2xlX2gKLQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0Um91bmRlZFJlY3QgOiBw
dWJsaWMgRmxvYXRSZWN0IHsKLXB1YmxpYzoKLSAgICBGbG9hdFJvdW5kZWRSZWN0KCkgeyB9Ci0g
ICAgRmxvYXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRT
aXplJiByYWRpaSkKLSAgICAgICAgOiBGbG9hdFJlY3QoYm91bmRzKQotICAgICAgICAsIG1fcmFk
aWkocmFkaWkpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IHJ4KCkgY29uc3QgeyByZXR1cm4g
bV9yYWRpaS53aWR0aCgpOyB9Ci0gICAgZmxvYXQgcnkoKSBjb25zdCB7IHJldHVybiBtX3JhZGlp
LmhlaWdodCgpOyB9Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBtYXJnaW5Cb3VuZHMoZmxvYXQgbWFy
Z2luKSBjb25zdDsKLSAgICBGbG9hdFJvdW5kZWRSZWN0IHBhZGRpbmdCb3VuZHMoZmxvYXQgcGFk
ZGluZykgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9h
dCB3aWR0aCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRTaXplIG1fcmFkaWk7Ci19Owot
Ci1jbGFzcyBFeGNsdXNpb25SZWN0YW5nbGUgOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewotcHVi
bGljOgotICAgIEV4Y2x1c2lvblJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29u
c3QgRmxvYXRTaXplJiByYWRpaSkKLSAgICAgICAgOiBFeGNsdXNpb25TaGFwZSgpCi0gICAgICAg
ICwgbV9ib3VuZHMoYm91bmRzLCByYWRpaSkKLSAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZE1h
cmdpbkJvdW5kcyhmYWxzZSkKLSAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdCb3Vu
ZHMoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1h
cmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19j
YXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2luQm91bmRzKCkpOyB9Ci0gICAgdmlydHVhbCBMYXlv
dXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygpKTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ib3Vu
ZHMuaXNFbXB0eSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExh
eW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlz
dCYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZEludGVydmFs
cyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVu
dExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZElu
dGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3Qg
TGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0IE9W
RVJSSURFOwotCi1wcml2YXRlOgotICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVNYXJnaW5Cb3Vu
ZHMoKSBjb25zdDsKLSAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlUGFkZGluZ0JvdW5kcygpIGNv
bnN0OwotCi0gICAgRmxvYXRSb3VuZGVkUmVjdCBtX2JvdW5kczsKLSAgICBtdXRhYmxlIEZsb2F0
Um91bmRlZFJlY3QgbV9tYXJnaW5Cb3VuZHM7Ci0gICAgbXV0YWJsZSBGbG9hdFJvdW5kZWRSZWN0
IG1fcGFkZGluZ0JvdW5kczsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWRNYXJn
aW5Cb3VuZHMgOiAxOwotICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZFBhZGRpbmdC
b3VuZHMgOiAxOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhj
bHVzaW9uUmVjdGFuZ2xlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
eGNsdXNpb25TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmU2NDBkYjVkNzYxNzQ0YTRh
MDFiNjgwNWI4NWM3OGNiYjA2N2Q3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwot
ICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgotCi0jaW5jbHVkZSAiQmFzaWNTaGFwZUZ1
bmN0aW9ucy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblBvbHlnb24uaCIKLSNpbmNsdWRlICJFeGNs
dXNpb25SZWN0YW5nbGUuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJMZW5n
dGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJXaW5kUnVsZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVz
aW9uU2hhcGU+IGNyZWF0ZUV4Y2x1c2lvblJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJvdW5k
cywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKLXsKLSAgICBBU1NFUlQoYm91bmRzLndpZHRoKCkg
Pj0gMCAmJiBib3VuZHMuaGVpZ2h0KCkgPj0gMCAmJiByYWRpaS53aWR0aCgpID49IDAgJiYgcmFk
aWkuaGVpZ2h0KCkgPj0gMCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0
YW5nbGUoYm91bmRzLCByYWRpaSkpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25T
aGFwZT4gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlciwgZmxv
YXQgcmFkaXVzKQotewotICAgIEFTU0VSVChyYWRpdXMgPj0gMCk7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5nbGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpdXMs
IGNlbnRlci55KCkgLSByYWRpdXMsIHJhZGl1cyoyLCByYWRpdXMqMiksIEZsb2F0U2l6ZShyYWRp
dXMsIHJhZGl1cykpKTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGNy
ZWF0ZUV4Y2x1c2lvbkVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBjb25zdCBGbG9h
dFNpemUmIHJhZGlpKQotewotICAgIEFTU0VSVChyYWRpaS53aWR0aCgpID49IDAgJiYgcmFkaWku
aGVpZ2h0KCkgPj0gMCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25SZWN0YW5n
bGUoRmxvYXRSZWN0KGNlbnRlci54KCkgLSByYWRpaS53aWR0aCgpLCBjZW50ZXIueSgpIC0gcmFk
aWkuaGVpZ2h0KCksIHJhZGlpLndpZHRoKCkqMiwgcmFkaWkuaGVpZ2h0KCkqMiksIHJhZGlpKSk7
Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlPiBjcmVhdGVFeGNsdXNpb25Q
b2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxl
IGZpbGxSdWxlKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRXhjbHVzaW9uUG9seWdvbih2
ZXJ0aWNlcywgZmlsbFJ1bGUpKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFJlY3QgcGh5c2lj
YWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbG9naWNhbEJveEhl
aWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgaWYgKGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgaWYgKGlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdChyZWN0LnkoKSwgbG9naWNhbEJveEhlaWdodCAtIHJlY3QubWF4WCgpLCByZWN0Lmhl
aWdodCgpLCByZWN0LndpZHRoKCkpOwotICAgIHJldHVybiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBsb2dpY2FsQm94SGVpZ2h0LCBXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkKLXsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpKQotICAgICAgICByZXR1cm4gcG9pbnQ7Ci0gICAgaWYgKGlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9pbnQu
eSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0gcG9pbnQueCgpKTsKLSAgICByZXR1cm4gcG9pbnQudHJh
bnNwb3NlZFBvaW50KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBoeXNpY2FsU2l6
ZVRvTG9naWNhbChjb25zdCBGbG9hdFNpemUmIHNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQotewotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkpCi0gICAg
ICAgIHJldHVybiBzaXplOwotICAgIHJldHVybiBzaXplLnRyYW5zcG9zZWRTaXplKCk7Ci19Ci0K
LVBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+IEV4Y2x1c2lvblNoYXBlOjpjcmVhdGVFeGNsdXNp
b25TaGFwZShjb25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRTaXplJiBs
b2dpY2FsQm94U2l6ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExl
bmd0aCBwYWRkaW5nKQotewotICAgIEFTU0VSVChiYXNpY1NoYXBlKTsKLQotICAgIGJvb2wgaG9y
aXpvbnRhbFdyaXRpbmdNb2RlID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
OwotICAgIGZsb2F0IGJveFdpZHRoID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJv
eFNpemUud2lkdGgoKSA6IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpOwotICAgIGZsb2F0IGJveEhl
aWdodCA9IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpIDog
bG9naWNhbEJveFNpemUud2lkdGgoKTsKLSAgICBPd25QdHI8RXhjbHVzaW9uU2hhcGU+IGV4Y2x1
c2lvblNoYXBlOwotCi0gICAgc3dpdGNoIChiYXNpY1NoYXBlLT50eXBlKCkpIHsKLQotICAgIGNh
c2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVJlY3RhbmdsZVR5cGU6IHsKLSAgICAgICAgY29uc3Qg
QmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNT
aGFwZVJlY3RhbmdsZSo+KGJhc2ljU2hhcGUpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAot
ICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPngoKSwgYm94V2lkdGgp
LAotICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnkoKSwgYm94SGVp
Z2h0KSwKLSAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT53aWR0aCgp
LCBib3hXaWR0aCksCi0gICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+
aGVpZ2h0KCksIGJveEhlaWdodCkpOwotICAgICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJl
Y3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgpOwotICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9
IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWSgpOwotICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFk
aWkoCi0gICAgICAgICAgICByYWRpdXNYTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRW
YWx1ZUZvckxlbmd0aChyYWRpdXNYTGVuZ3RoLCBib3hXaWR0aCksCi0gICAgICAgICAgICByYWRp
dXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZ
TGVuZ3RoLCBib3hIZWlnaHQpKTsKLSAgICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBw
aHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3Jp
dGluZ01vZGUpOwotCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9uUmVj
dGFuZ2xlKGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3JuZXJSYWRpaSwg
d3JpdGluZ01vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBCYXNpY1No
YXBlOjpCYXNpY1NoYXBlQ2lyY2xlVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1NoYXBlQ2ly
Y2xlKiBjaXJjbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4oYmFzaWNT
aGFwZSk7Ci0gICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNs
ZS0+Y2VudGVyWCgpLCBib3hXaWR0aCk7Ci0gICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpOwotICAgICAgICBmbG9h
dCByYWRpdXMgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWlu
KGJveEhlaWdodCwgYm94V2lkdGgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVy
ID0gcGh5c2ljYWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBs
b2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwotCi0gICAgICAgIGV4Y2x1c2lv
blNoYXBlID0gY3JlYXRlRXhjbHVzaW9uQ2lyY2xlKGxvZ2ljYWxDZW50ZXIsIHJhZGl1cyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUVs
bGlwc2VUeXBlOiB7Ci0gICAgICAgIGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKiBlbGxpcHNlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqPihiYXNpY1NoYXBlKTsKLSAgICAg
ICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWCgp
LCBib3hXaWR0aCk7Ci0gICAgICAgIGZsb2F0IGNlbnRlclkgPSBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KGVsbGlwc2UtPmNlbnRlclkoKSwgYm94SGVpZ2h0KTsKLSAgICAgICAgZmxvYXQgcmFkaXVzWCA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWCgpLCBib3hXaWR0aCk7Ci0gICAg
ICAgIGZsb2F0IHJhZGl1c1kgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1ko
KSwgYm94SGVpZ2h0KTsKLSAgICAgICAgRmxvYXRQb2ludCBsb2dpY2FsQ2VudGVyID0gcGh5c2lj
YWxQb2ludFRvTG9naWNhbChGbG9hdFBvaW50KGNlbnRlclgsIGNlbnRlclkpLCBsb2dpY2FsQm94
U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOwotICAgICAgICBGbG9hdFNpemUgbG9naWNhbFJh
ZGlpID0gcGh5c2ljYWxTaXplVG9Mb2dpY2FsKEZsb2F0U2l6ZShyYWRpdXNYLCByYWRpdXNZKSwg
d3JpdGluZ01vZGUpOwotCi0gICAgICAgIGV4Y2x1c2lvblNoYXBlID0gY3JlYXRlRXhjbHVzaW9u
RWxsaXBzZShsb2dpY2FsQ2VudGVyLCBsb2dpY2FsUmFkaWkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVQb2x5Z29uVHlwZTogewotICAg
ICAgICBjb25zdCBCYXNpY1NoYXBlUG9seWdvbiogcG9seWdvbiA9IHN0YXRpY19jYXN0PGNvbnN0
IEJhc2ljU2hhcGVQb2x5Z29uKj4oYmFzaWNTaGFwZSk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxM
ZW5ndGg+JiB2YWx1ZXMgPSBwb2x5Z29uLT52YWx1ZXMoKTsKLSAgICAgICAgc2l6ZV90IHZhbHVl
c1NpemUgPSB2YWx1ZXMuc2l6ZSgpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZXNTaXplICUgMikp
OwotICAgICAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPEZsb2F0UG9pbnQ+KHZhbHVlc1NpemUgLyAyKSk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXNTaXplOyBpICs9IDIpIHsKLSAgICAgICAgICAgIEZs
b2F0UG9pbnQgdmVydGV4KAotICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFs
dWVzLmF0KGkpLCBib3hXaWR0aCksCi0gICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0
aCh2YWx1ZXMuYXQoaSArIDEpLCBib3hIZWlnaHQpKTsKLSAgICAgICAgICAgICgqdmVydGljZXMp
W2kgLyAyXSA9IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwodmVydGV4LCBsb2dpY2FsQm94U2l6ZS5o
ZWlnaHQoKSwgd3JpdGluZ01vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhjbHVzaW9uU2hh
cGUgPSBjcmVhdGVFeGNsdXNpb25Qb2x5Z29uKHZlcnRpY2VzLnJlbGVhc2UoKSwgcG9seWdvbi0+
d2luZFJ1bGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQmFzaWNTaGFw
ZTo6QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTogewotICAgICAgICBjb25zdCBCYXNpY1No
YXBlSW5zZXRSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hh
cGVJbnNldFJlY3RhbmdsZSo+KGJhc2ljU2hhcGUpOwotICAgICAgICBmbG9hdCBsZWZ0ID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmxlZnQoKSwgYm94V2lkdGgpOwotICAgICAgICBm
bG9hdCB0b3AgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+dG9wKCksIGJveEhlaWdo
dCk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZHMoCi0gICAgICAgICAgICBsZWZ0LAotICAgICAg
ICAgICAgdG9wLAotICAgICAgICAgICAgYm94V2lkdGggLSBsZWZ0IC0gZmxvYXRWYWx1ZUZvckxl
bmd0aChyZWN0YW5nbGUtPnJpZ2h0KCksIGJveFdpZHRoKSwKLSAgICAgICAgICAgIGJveEhlaWdo
dCAtIHRvcCAtIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5ib3R0b20oKSwgYm94SGVp
Z2h0KSk7Ci0gICAgICAgIExlbmd0aCByYWRpdXNYTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3JuZXJS
YWRpdXNYKCk7Ci0gICAgICAgIExlbmd0aCByYWRpdXNZTGVuZ3RoID0gcmVjdGFuZ2xlLT5jb3Ju
ZXJSYWRpdXNZKCk7Ci0gICAgICAgIEZsb2F0U2l6ZSBjb3JuZXJSYWRpaSgKLSAgICAgICAgICAg
IHJhZGl1c1hMZW5ndGguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJh
ZGl1c1hMZW5ndGgsIGJveFdpZHRoKSwKLSAgICAgICAgICAgIHJhZGl1c1lMZW5ndGguaXNVbmRl
ZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJhZGl1c1lMZW5ndGgsIGJveEhlaWdo
dCkpOwotICAgICAgICBGbG9hdFJlY3QgbG9naWNhbEJvdW5kcyA9IHBoeXNpY2FsUmVjdFRvTG9n
aWNhbChib3VuZHMsIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7Ci0KLSAg
ICAgICAgZXhjbHVzaW9uU2hhcGUgPSBjcmVhdGVFeGNsdXNpb25SZWN0YW5nbGUobG9naWNhbEJv
dW5kcywgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvcm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBleGNsdXNpb25TaGFwZS0+bV93cml0aW5nTW9kZSA9
IHdyaXRpbmdNb2RlOwotICAgIGV4Y2x1c2lvblNoYXBlLT5tX21hcmdpbiA9IGZsb2F0VmFsdWVG
b3JMZW5ndGgobWFyZ2luLCAwKTsKLSAgICBleGNsdXNpb25TaGFwZS0+bV9wYWRkaW5nID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChwYWRkaW5nLCAwKTsKLQotICAgIHJldHVybiBleGNsdXNpb25TaGFw
ZS5yZWxlYXNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFwZS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGUzZDUxZjA0MTY4MjMyMTgyMTUyYzMyODAzZmE3M2ZhNDg5ZDQ1MWQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwot
ICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBFeGNsdXNpb25TaGFwZV9oCi0jZGVmaW5lIEV4Y2x1c2lvblNoYXBlX2gKLQotI2lu
Y2x1ZGUgIkJhc2ljU2hhcGVzLmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUg
IldyaXRpbmdNb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IExpbmVTZWdtZW50
IHsKLSAgICBMaW5lU2VnbWVudChmbG9hdCBsb2dpY2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0
KQotICAgICAgICA6IGxvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQotICAgICAgICAsIGxvZ2ljYWxS
aWdodChsb2dpY2FsUmlnaHQpCi0gICAgewotICAgIH0KLQotICAgIExheW91dFVuaXQgbG9naWNh
bExlZnQ7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQ7Ci19OwotCi10eXBlZGVmIFZlY3Rv
cjxMaW5lU2VnbWVudD4gU2VnbWVudExpc3Q7Ci0KLQotLy8gQSByZXByZXNlbnRhdGlvbiBvZiBh
IEJhc2ljU2hhcGUgdGhhdCBlbmFibGVzIGxheW91dCBjb2RlIHRvIGRldGVybWluZSBob3cgdG8g
YnJlYWsgYSBsaW5lIHVwIGludG8gc2VnbWVudHMKLS8vIHRoYXQgd2lsbCBmaXQgd2l0aGluIG9y
IGFyb3VuZCBhIHNoYXBlLiBUaGUgbGluZSBpcyBkZWZpbmVkIGJ5IGEgcGFpciBvZiBsb2dpY2Fs
IFkgY29vcmRpbmF0ZXMgYW5kIHRoZQotLy8gY29tcHV0ZWQgc2VnbWVudHMgYXJlIHJldHVybmVk
IGFzIHBhaXJzIG9mIGxvZ2ljYWwgWCBjb29yZGluYXRlcy4gVGhlIEJhc2ljU2hhcGUgaXRzZWxm
IGlzIGRlZmluZWQgaW4KLS8vIHBoeXNpY2FsIGNvb3JkaW5hdGVzLgotCi1jbGFzcyBFeGNsdXNp
b25TaGFwZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGU+
IGNyZWF0ZUV4Y2x1c2lvblNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqLCBjb25zdCBMYXlvdXRTaXpl
JiBsb2dpY2FsQm94U2l6ZSwgV3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRk
aW5nKTsKLQotICAgIHZpcnR1YWwgfkV4Y2x1c2lvblNoYXBlKCkgeyB9Ci0KLSAgICB2aXJ0dWFs
IExheW91dFJlY3Qgc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBMYXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dp
Y2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUs
IExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZmxvYXQg
c2hhcGVNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcmdpbjsgfQotICAgIGZsb2F0IHNoYXBl
UGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcGFkZGluZzsgfQotCi1wcml2YXRlOgotICAgIFdy
aXRpbmdNb2RlIG1fd3JpdGluZ01vZGU7Ci0gICAgZmxvYXQgbV9tYXJnaW47Ci0gICAgZmxvYXQg
bV9wYWRkaW5nOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXhj
bHVzaW9uU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblNoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hh
cGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYxNGY4MjJiNzg1NDFl
ZGUzZTNjNDhiODM0ZDgyYzMyOGFjZTFiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJ
bmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBl
SW5mby5oIgotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25T
aGFwZS5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZSwgRXhjbHVzaW9u
U2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEV4
Y2x1c2lvblNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExheW91dFVuaXQsIFNl
Z21lbnRMaXN0JikgY29uc3Q+Ci1jb25zdCBFeGNsdXNpb25TaGFwZSogRXhjbHVzaW9uU2hhcGVJ
bmZvPFJlbmRlclR5cGUsIHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVkU2hh
cGUoKSBjb25zdAotewotICAgIGlmIChFeGNsdXNpb25TaGFwZSogZXhjbHVzaW9uU2hhcGUgPSBt
X3NoYXBlLmdldCgpKQotICAgICAgICByZXR1cm4gZXhjbHVzaW9uU2hhcGU7Ci0KLSAgICBFeGNs
dXNpb25TaGFwZVZhbHVlKiBzaGFwZVZhbHVlID0gKG1fcmVuZGVyZXItPnN0eWxlKCktPipzaGFw
ZUdldHRlcikoKTsKLSAgICBCYXNpY1NoYXBlKiBzaGFwZSA9IChzaGFwZVZhbHVlICYmIHNoYXBl
VmFsdWUtPnR5cGUoKSA9PSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSkgPyBzaGFwZVZhbHVl
LT5zaGFwZSgpIDogMDsKLQotICAgIEFTU0VSVChzaGFwZSk7Ci0KLSAgICBtX3NoYXBlID0gRXhj
bHVzaW9uU2hhcGU6OmNyZWF0ZUV4Y2x1c2lvblNoYXBlKHNoYXBlLCBMYXlvdXRTaXplKG1fc2hh
cGVMb2dpY2FsV2lkdGgsIG1fc2hhcGVMb2dpY2FsSGVpZ2h0KSwgbV9yZW5kZXJlci0+c3R5bGUo
KS0+d3JpdGluZ01vZGUoKSwgbV9yZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVNYXJnaW4oKSwgbV9y
ZW5kZXJlci0+c3R5bGUoKS0+c2hhcGVQYWRkaW5nKCkpOwotICAgIEFTU0VSVChtX3NoYXBlKTsK
LSAgICByZXR1cm4gbV9zaGFwZS5nZXQoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlw
ZSwgRXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqc2hhcGVHZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKEV4Y2x1c2lvblNoYXBlOjoqaW50ZXJ2YWxHZXR0ZXIpKExheW91dFVuaXQsIExh
eW91dFVuaXQsIFNlZ21lbnRMaXN0JikgY29uc3Q+Ci1ib29sIEV4Y2x1c2lvblNoYXBlSW5mbzxS
ZW5kZXJUeXBlLCBzaGFwZUdldHRlciwgaW50ZXJ2YWxHZXR0ZXI+Ojpjb21wdXRlU2VnbWVudHNG
b3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQotewotICAg
IEFTU0VSVChsaW5lSGVpZ2h0ID49IDApOwotICAgIG1fc2hhcGVMaW5lVG9wID0gbGluZVRvcCAt
IGxvZ2ljYWxUb3BPZmZzZXQoKTsKLSAgICBtX2xpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0OwotICAg
IG1fc2VnbWVudHMuY2xlYXIoKTsKLQotICAgIGlmIChsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygp
KQotICAgICAgICAoY29tcHV0ZWRTaGFwZSgpLT4qaW50ZXJ2YWxHZXR0ZXIpKG1fc2hhcGVMaW5l
VG9wLCBzdGQ6Om1pbihtX2xpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGluZVRv
cCksIG1fc2VnbWVudHMpOwotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IHRo
aXMtPmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Nl
Z21lbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbExlZnQg
Kz0gbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAgICAgIG1fc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0
ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0OwotICAgIH0KLQotICAgIHJldHVybiBtX3NlZ21lbnRzLnNp
emUoKTsKLX0KLQotdGVtcGxhdGUgY2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZvPFJlbmRlckJsb2Nr
LCAmUmVuZGVyU3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0
SW5jbHVkZWRJbnRlcnZhbHM+OwotdGVtcGxhdGUgY2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZvPFJl
bmRlckJveCwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZFeGNsdXNpb25TaGFwZTo6Z2V0
RXhjbHVkZWRJbnRlcnZhbHM+OwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRXhjbHVzaW9uU2hhcGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVh
NzA3OTJhM2Y5MTI2ZmQ3NWNmYjc2ODI5ZmI5YWFjNjAxOGZmYjkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblNoYXBlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0q
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
Ci0qICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0qICAgIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0qICAgIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIEJFCi0qIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSogT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUgotKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKi8KLQotI2lm
bmRlZiBFeGNsdXNpb25TaGFwZUluZm9faAotI2RlZmluZSBFeGNsdXNpb25TaGFwZUluZm9faAot
Ci0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgot
I2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIEluZm9UeXBlPgotY2xh
c3MgTWFwcGVkSW5mbyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIEluZm9UeXBlKiBlbnN1cmVJbmZv
KGNvbnN0IEtleVR5cGUqIGtleSkKLSAgICB7Ci0gICAgICAgIEluZm9NYXAmIGluZm9NYXAgPSBN
YXBwZWRJbmZvPEtleVR5cGUsIEluZm9UeXBlPjo6aW5mb01hcCgpOwotICAgICAgICBpZiAoSW5m
b1R5cGUqIGluZm8gPSBpbmZvTWFwLmdldChrZXkpKQotICAgICAgICAgICAgcmV0dXJuIGluZm87
Ci0gICAgICAgIHR5cGVuYW1lIEluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbmZvTWFwLmFk
ZChrZXksIEluZm9UeXBlOjpjcmVhdGVJbmZvKGtleSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlSW5m
byhjb25zdCBLZXlUeXBlKiBrZXkpIHsgaW5mb01hcCgpLnJlbW92ZShrZXkpOyB9Ci0gICAgc3Rh
dGljIEluZm9UeXBlKiBpbmZvKGNvbnN0IEtleVR5cGUqIGtleSkgeyByZXR1cm4gaW5mb01hcCgp
LmdldChrZXkpOyB9Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBLZXlUeXBl
KiwgT3duUHRyPEluZm9UeXBlPiA+IEluZm9NYXA7Ci0gICAgc3RhdGljIEluZm9NYXAmIGluZm9N
YXAoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbmZvTWFwLCBzdGF0aWNJ
bmZvTWFwLCAoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNJbmZvTWFwOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGUsIEV4Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJT
dHlsZTo6KnNoYXBlR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChFeGNsdXNpb25TaGFwZTo6KmludGVy
dmFsR2V0dGVyKShMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0Pgot
Y2xhc3MgRXhjbHVzaW9uU2hhcGVJbmZvIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5FeGNsdXNpb25TaGFwZUluZm8oKSB7IH0KLQotICAgIHZv
aWQgc2V0U2hhcGVTaXplKExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQpCi0gICAgewotICAgICAgICBpZiAobV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6
aW5nKCkgPT0gQ09OVEVOVF9CT1gpIHsKLSAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3Jl
bmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICBsb2dp
Y2FsSGVpZ2h0IC09IG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9zaGFwZUxvZ2ljYWxXaWR0aCA9PSBsb2dpY2Fs
V2lkdGggJiYgbV9zaGFwZUxvZ2ljYWxIZWlnaHQgPT0gbG9naWNhbEhlaWdodCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZGlydHlTaGFwZVNpemUoKTsKLSAgICAgICAgbV9zaGFwZUxv
Z2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aDsKLSAgICAgICAgbV9zaGFwZUxvZ2ljYWxIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0OwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVu
dHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KTsKLSAg
ICB2b2lkIGNsZWFyU2VnbWVudHMoKSB7IG1fc2VnbWVudHMuY2xlYXIoKTsgfQotCi0gICAgTGF5
b3V0VW5pdCBzaGFwZUxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9n
aWNhbEJvdW5kaW5nQm94KCkueSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0
VW5pdCBzaGFwZUxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9n
aWNhbEJvdW5kaW5nQm94KCkubWF4WSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5
b3V0VW5pdCBzaGFwZUxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxv
Z2ljYWxCb3VuZGluZ0JveCgpLngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KLSAgICBMYXlv
dXRVbml0IHNoYXBlTG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxv
Z2ljYWxCb3VuZGluZ0JveCgpLm1heFgoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KLSAgICBM
YXlvdXRVbml0IHNoYXBlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFw
ZUxvZ2ljYWxCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9n
aWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdC
b3goKS5oZWlnaHQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZVRvcCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9wICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGluZUJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVMaW5lVG9w
ICsgbV9saW5lSGVpZ2h0ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0
IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXIt
PnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKSA/IChtX3NoYXBlTG9naWNhbEhl
aWdodCArIG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpIDogbV9z
aGFwZUxvZ2ljYWxIZWlnaHQ7IH0KLQotICAgIGJvb2wgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGluZVRvcCgpIDwgc2hhcGVMb2dpY2FsQm90dG9tKCkg
JiYgc2hhcGVMb2dpY2FsVG9wKCkgPD0gbG9naWNhbExpbmVCb3R0b20oKTsgfQotICAgIGJvb2wg
bGluZVdpdGhpblNoYXBlQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVC
b3VuZHMoKSAmJiAobG9naWNhbExpbmVCb3R0b20oKSA8PSBzaGFwZUxvZ2ljYWxCb3R0b20oKSk7
IH0KLQotICAgIHZvaWQgZGlydHlTaGFwZVNpemUoKSB7IG1fc2hhcGUuY2xlYXIoKTsgfQotICAg
IGJvb2wgc2hhcGVTaXplRGlydHkoKSB7IHJldHVybiAhbV9zaGFwZS5nZXQoKTsgfQotICAgIGNv
bnN0IFJlbmRlclR5cGUqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgRXhjbHVzaW9uU2hhcGVJbmZvKGNvbnN0IFJlbmRlclR5cGUqIHJlbmRl
cmVyKTogbV9yZW5kZXJlcihyZW5kZXJlcikgeyB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25TaGFw
ZSogY29tcHV0ZWRTaGFwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRl
ZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwotCi0gICAgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci0+c3R5bGUoKS0+Ym94
U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCkgOiBMYXlvdXRVbml0KCk7IH07Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBD
T05URU5UX0JPWCAmJiAhbV9yZW5kZXJlci0+aXNSZW5kZXJSZWdpb24oKSkgPyBtX3JlbmRlcmVy
LT5ib3JkZXJBbmRQYWRkaW5nU3RhcnQoKSA6IExheW91dFVuaXQoKTsgfQotCi0gICAgTGF5b3V0
VW5pdCBtX3NoYXBlTGluZVRvcDsKLSAgICBMYXlvdXRVbml0IG1fbGluZUhlaWdodDsKLSAgICBT
ZWdtZW50TGlzdCBtX3NlZ21lbnRzOwotCi1wcml2YXRlOgotICAgIG11dGFibGUgT3duUHRyPEV4
Y2x1c2lvblNoYXBlPiBtX3NoYXBlOwotCi0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTG9naWNhbFdp
ZHRoOwotICAgIExheW91dFVuaXQgbV9zaGFwZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgY29uc3QgUmVu
ZGVyVHlwZSogbV9yZW5kZXJlcjsKLX07Ci19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhNzQ0ZmNiYTk5NTRkOWRhMGE5OTU1ZGNhODdh
YmRlZDNlOTMxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAq
ICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluc2lk
ZUluZm8uaCIKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUxpbmVTZWdtZW50UmFuZ2U6OkxpbmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0
b3ImIHN0YXJ0LCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kKQotICAgIDogc3RhcnQoc3RhcnQu
cm9vdCgpLCBzdGFydC5vYmplY3QoKSwgc3RhcnQub2Zmc2V0KCkpCi0gICAgLCBlbmQoZW5kLnJv
b3QoKSwgZW5kLm9iamVjdCgpLCBlbmQub2Zmc2V0KCkpCi0gICAgewotICAgIH0KLQotYm9vbCBF
eGNsdXNpb25TaGFwZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIpCi17Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IHJlbmRl
cmVyLT5zdHlsZSgpLT5yZXNvbHZlZFNoYXBlSW5zaWRlKCk7Ci0gICAgaWYgKCFzaGFwZVZhbHVl
IHx8IHNoYXBlVmFsdWUtPnR5cGUoKSAhPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpTaGFwZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQmFzaWNTaGFwZSogc2hhcGUgPSBzaGFwZVZhbHVl
LT5zaGFwZSgpOwotICAgIHJldHVybiBzaGFwZSAmJiBzaGFwZS0+dHlwZSgpICE9IEJhc2ljU2hh
cGU6OkJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZVR5cGU7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvOjphZGp1c3RMb2dpY2FsTGluZVRvcChmbG9hdCBtaW5TZWdtZW50V2lkdGgp
Ci17Ci0gICAgY29uc3QgRXhjbHVzaW9uU2hhcGUqIHNoYXBlID0gY29tcHV0ZWRTaGFwZSgpOwot
ICAgIGlmICghc2hhcGUgfHwgbV9saW5lSGVpZ2h0IDw9IDAgfHwgbG9naWNhbExpbmVUb3AoKSA+
IHNoYXBlTG9naWNhbEJvdHRvbSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMYXlv
dXRVbml0IG5ld0xpbmVUb3A7Ci0gICAgaWYgKHNoYXBlLT5maXJzdEluY2x1ZGVkSW50ZXJ2YWxM
b2dpY2FsVG9wKG1fc2hhcGVMaW5lVG9wLCBMYXlvdXRTaXplKG1pblNlZ21lbnRXaWR0aCwgbV9s
aW5lSGVpZ2h0KSwgbmV3TGluZVRvcCkpIHsKLSAgICAgICAgaWYgKG5ld0xpbmVUb3AgPiBtX3No
YXBlTGluZVRvcCkgewotICAgICAgICAgICAgbV9zaGFwZUxpbmVUb3AgPSBuZXdMaW5lVG9wOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzODQwMzJmZjk5ZjZmZGI3ZGNjMjRiODY2Yzk0MWI4NjMwMjU4MDJhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvX2gKLSNkZWZpbmUgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvX2gKLQotI2lmIEVO
QUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbmZvLmgiCi0jaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW5saW5lSXRlcmF0b3I7Ci1jbGFzcyBSZW5kZXJCbG9j
azsKLWNsYXNzIFJlbmRlck9iamVjdDsKLQotc3RydWN0IExpbmVTZWdtZW50SXRlcmF0b3Igewot
ICAgIFJlbmRlck9iamVjdCogcm9vdDsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdDsKLSAgICB1
bnNpZ25lZCBvZmZzZXQ7Ci0gICAgTGluZVNlZ21lbnRJdGVyYXRvcihSZW5kZXJPYmplY3QqIHJv
b3QsIFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogcm9v
dChyb290KQotICAgICAgICAsIG9iamVjdChvYmplY3QpCi0gICAgICAgICwgb2Zmc2V0KG9mZnNl
dCkKLSAgICB7Ci0gICAgfQotfTsKLQotc3RydWN0IExpbmVTZWdtZW50UmFuZ2UgewotICAgIExp
bmVTZWdtZW50SXRlcmF0b3Igc3RhcnQ7Ci0gICAgTGluZVNlZ21lbnRJdGVyYXRvciBlbmQ7Ci0g
ICAgTGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnQsIGNvbnN0IElu
bGluZUl0ZXJhdG9yJiBlbmQpOwotfTsKLQotdHlwZWRlZiBWZWN0b3I8TGluZVNlZ21lbnRSYW5n
ZT4gU2VnbWVudFJhbmdlTGlzdDsKLQotY2xhc3MgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvIDog
cHVibGljIEV4Y2x1c2lvblNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNv
bHZlZFNoYXBlSW5zaWRlLCAmRXhjbHVzaW9uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
PiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyhyZW5kZXJlcikpOyB9Ci0KLSAgICBzdGF0
aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKTsKLQotICAg
IHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9zZWdtZW50
UmFuZ2VzLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVy
QmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwgJkV4Y2x1c2lvblNoYXBl
OjpnZXRJbmNsdWRlZEludGVydmFscz46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwg
bGluZUhlaWdodCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNTZWdtZW50cygpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSAmJiBtX3NlZ21lbnRz
LnNpemUoKTsKLSAgICB9Ci0gICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNTZWdtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIG1f
c2VnbWVudHM7Ci0gICAgfQotICAgIFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSB7
IHJldHVybiBtX3NlZ21lbnRSYW5nZXM7IH0KLSAgICBjb25zdCBTZWdtZW50UmFuZ2VMaXN0JiBz
ZWdtZW50UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50UmFuZ2VzOyB9Ci0gICAgY29u
c3QgTGluZVNlZ21lbnQqIGN1cnJlbnRTZWdtZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
ICghaGFzU2VnbWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBBU1NFUlQo
bV9zZWdtZW50UmFuZ2VzLnNpemUoKSA8IG1fc2VnbWVudHMuc2l6ZSgpKTsKLSAgICAgICAgcmV0
dXJuICZtX3NlZ21lbnRzW21fc2VnbWVudFJhbmdlcy5zaXplKCldOwotICAgIH0KLSAgICBib29s
IGFkanVzdExvZ2ljYWxMaW5lVG9wKGZsb2F0IG1pblNlZ21lbnRXaWR0aCk7Ci0KLSAgICB2b2lk
IHNldE5lZWRzTGF5b3V0KGJvb2wgdmFsdWUpIHsgbV9uZWVkc0xheW91dCA9IHZhbHVlOyB9Ci0g
ICAgYm9vbCBuZWVkc0xheW91dCgpIHsgcmV0dXJuIG1fbmVlZHNMYXlvdXQ7IH0KLQotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5n
Qm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5zaGFwZVBhZGRp
bmdMb2dpY2FsQm91bmRpbmdCb3goKTsgfQotCi1wcml2YXRlOgotICAgIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyhjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCi0gICAgOiBFeGNsdXNpb25T
aGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVzb2x2ZWRTaGFwZUluc2lkZSwg
JkV4Y2x1c2lvblNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz4gKHJlbmRlcmVyKQotICAgICwg
bV9uZWVkc0xheW91dChmYWxzZSkKLSAgICB7IH0KLQotICAgIFNlZ21lbnRSYW5nZUxpc3QgbV9z
ZWdtZW50UmFuZ2VzOwotICAgIGJvb2wgbV9uZWVkc0xheW91dDoxOwotfTsKLQotfQotI2VuZGlm
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5Y2Nl
NWE1NmYxY2E5ZGMwNGM0OTgzMGYyYzg1Y2Q3ZGRlMmE1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVz
aW9uU2hhcGVPdXRzaWRlSW5mby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
LSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0g
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICog
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUlu
Zm8uaCIKLQotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1i
b29sIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJC
b3gqIGJveCkKLXsKLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiB2YWx1ZSA9IGJveC0+c3R5bGUo
KS0+c2hhcGVPdXRzaWRlKCk7Ci0gICAgcmV0dXJuIGJveC0+aXNGbG9hdGluZ1dpdGhTaGFwZU91
dHNpZGUoKSAmJiB2YWx1ZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6OlNoYXBlICYm
IHZhbHVlLT5zaGFwZSgpOwotfQotCi1ib29sIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm86OmNv
bXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVI
ZWlnaHQpCi17Ci0gICAgaWYgKHNoYXBlU2l6ZURpcnR5KCkgfHwgbV9saW5lVG9wICE9IGxpbmVU
b3AgfHwgbV9saW5lSGVpZ2h0ICE9IGxpbmVIZWlnaHQpIHsKLSAgICAgICAgaWYgKEV4Y2x1c2lv
blNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmRXhjbHVz
aW9uU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShs
aW5lVG9wLCBsaW5lSGVpZ2h0KSkgewotICAgICAgICAgICAgbV9sZWZ0U2VnbWVudFNoYXBlQm91
bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbMF0ubG9naWNhbExlZnQgLSBzaGFwZUxvZ2ljYWxM
ZWZ0KCk7Ci0gICAgICAgICAgICBtX3JpZ2h0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9
IG1fc2VnbWVudHNbbV9zZWdtZW50cy5zaXplKCktMV0ubG9naWNhbFJpZ2h0IC0gc2hhcGVMb2dp
Y2FsUmlnaHQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGVmdFNlZ21lbnRT
aGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOwotICAgICAgICAgICAgbV9yaWdodFNlZ21lbnRTaGFw
ZUJvdW5kaW5nQm94RGVsdGEgPSAwOwotICAgICAgICB9Ci0gICAgICAgIG1fbGluZVRvcCA9IGxp
bmVUb3A7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOwotfQotCi19Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODdhNWM0OGI3YjFm
ZmNlMjE1NmY4MTc4NzQ2ZjNmMzMyMDc4NWY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICog
ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0g
KiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9f
aAotI2RlZmluZSBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvX2gKLQotI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQotCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbmZvLmgiCi0jaW5jbHVkZSAiTGF5
b3V0U2l6ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJveDsKLQot
Y2xhc3MgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZUlu
Zm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lvblNoYXBl
OjpnZXRFeGNsdWRlZEludGVydmFscz4sIHB1YmxpYyBNYXBwZWRJbmZvPFJlbmRlckJveCwgRXhj
bHVzaW9uU2hhcGVPdXRzaWRlSW5mbz4gewotcHVibGljOgotICAgIExheW91dFNpemUgc2hhcGVM
b2dpY2FsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0U2l6ZShzaGFwZUxvZ2ljYWxMZWZ0
KCksIHNoYXBlTG9naWNhbFRvcCgpKTsgfQotCi0gICAgTGF5b3V0VW5pdCBsZWZ0U2VnbWVudFNo
YXBlQm91bmRpbmdCb3hEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdFNlZ21lbnRTaGFwZUJv
dW5kaW5nQm94RGVsdGE7IH0KLSAgICBMYXlvdXRVbml0IHJpZ2h0U2VnbWVudFNoYXBlQm91bmRp
bmdCb3hEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkgT1ZFUlJJREU7Ci0KLSAgICBz
dGF0aWMgUGFzc093blB0cjxFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvPiBjcmVhdGVJbmZvKGNv
bnN0IFJlbmRlckJveCogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBFeGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvKHJlbmRlcmVyKSk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRG
b3IoY29uc3QgUmVuZGVyQm94Kik7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIExheW91dFJl
Y3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIGNvbXB1dGVkU2hhcGUoKS0+c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQot
Ci1wcml2YXRlOgotICAgIEV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oY29uc3QgUmVuZGVyQm94
KiByZW5kZXJlcikgOiBFeGNsdXNpb25TaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6
OnNoYXBlT3V0c2lkZSwgJkV4Y2x1c2lvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz4ocmVu
ZGVyZXIpIHsgfQotCi0gICAgTGF5b3V0VW5pdCBtX2xlZnRTZWdtZW50U2hhcGVCb3VuZGluZ0Jv
eERlbHRhOwotICAgIExheW91dFVuaXQgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVs
dGE7Ci0gICAgTGF5b3V0VW5pdCBtX2xpbmVUb3A7Ci19OwotCi19Ci0jZW5kaWYKLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKaW5kZXggMGY2ZDkzY2FiOTUz
MmQ0MzczMWMwZDVhYjI0MzMxNWRmMzYyNWYzMi4uZDllYmQ2NDdhN2Q5NTg1N2QyOGE5YWU5OTZm
M2VlYjM0Yzg3ZjkyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91
dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3Bw
CkBAIC00MCw3ICs0MCw3IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSog
cHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6CiAgICAgLCBtX2xpbmVH
cmlkKDApCiAgICAgLCBtX25leHQocHJldikKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAs
IG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKDApCisgICAgLCBtX3NoYXBlSW5zaWRlSW5mbygw
KQogI2VuZGlmCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9yZW5kZXJlcihyZW5kZXJlcikKQEAg
LTExMyw5ICsxMTMsOSBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHBy
ZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IExheW91dFNpegogI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQogICAgIGlmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpKSB7CiAgICAgICAgIGNv
bnN0IFJlbmRlckJsb2NrKiByZW5kZXJCbG9jayA9IHRvUmVuZGVyQmxvY2socmVuZGVyZXIpOwot
ICAgICAgICBtX2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IHJlbmRlckJsb2NrLT5leGNsdXNp
b25TaGFwZUluc2lkZUluZm8oKTsKLSAgICAgICAgaWYgKCFtX2V4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyAmJiBtX25leHQtPm1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIHJlbmRlckJsb2Nr
LT5hbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkpCi0gICAgICAgICAgICBt
X2V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IG1fbmV4dC0+bV9leGNsdXNpb25TaGFwZUluc2lk
ZUluZm87CisgICAgICAgIG1fc2hhcGVJbnNpZGVJbmZvID0gcmVuZGVyQmxvY2stPnNoYXBlSW5z
aWRlSW5mbygpOworICAgICAgICBpZiAoIW1fc2hhcGVJbnNpZGVJbmZvICYmIG1fbmV4dC0+bV9z
aGFwZUluc2lkZUluZm8gJiYgcmVuZGVyQmxvY2stPmFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJp
bmcoKSkKKyAgICAgICAgICAgIG1fc2hhcGVJbnNpZGVJbmZvID0gbV9uZXh0LT5tX3NoYXBlSW5z
aWRlSW5mbzsKICAgICB9CiAjZW5kaWYKIApAQCAtMTQ5LDcgKzE0OSw3IEBAIExheW91dFN0YXRl
OjpMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqIHJvb3QpCiAgICAgLCBtX2xpbmVHcmlkKDApCiAg
ICAgLCBtX25leHQoMCkKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAsIG1fZXhjbHVzaW9u
U2hhcGVJbnNpZGVJbmZvKDApCisgICAgLCBtX3NoYXBlSW5zaWRlSW5mbygwKQogI2VuZGlmCiAg
ICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0KDApCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAppbmRleCAyMDFjNmYyZjUwNTczNDk3YjBmNzYwNzQzMWFj
ZDc2Nzg1MTBhODcyLi5kNzc0OWM1MmM2MGQ3NTYyMDFhOTgxMzkyZTgzYjViNWMxNzJhMDlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaApAQCAtMzksNyArMzksNyBAQCBj
bGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJGbG93VGhy
ZWFkOwogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotY2xhc3MgRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvOworY2xhc3MgU2hhcGVJbnNpZGVJbmZvOwogI2VuZGlmCiAKIGNsYXNzIExheW91dFN0YXRl
IHsKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fbGluZUdyaWQoMCkKICAg
ICAgICAgLCBtX25leHQoMCkKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgLCBtX2V4
Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygwKQorICAgICAgICAsIG1fc2hhcGVJbnNpZGVJbmZvKDAp
CiAjZW5kaWYKICAgICAgICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0KDApCiAjaWZuZGVmIE5ERUJV
RwpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Jsb2NrRGlyZWN0aW9u
TG9jYXRpb25TZXRCZWZvcmVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVHcmlkIHx8ICht
X2lzUGFnaW5hdGVkICYmIG1fcGFnZUxvZ2ljYWxIZWlnaHQpOyB9CiAKICNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvOyB9Cisg
ICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8oKSBjb25zdCB7IHJldHVybiBtX3No
YXBlSW5zaWRlSW5mbzsgfQogI2VuZGlmCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3JtYWwgb3Bl
cmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQuCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAg
IFJlbmRlckJsb2NrKiBtX2xpbmVHcmlkOwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBtX2V4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mbzsKKyAgICBTaGFwZUluc2lkZUluZm8qIG1fc2hhcGVJbnNpZGVJ
bmZvOwogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogRGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbGF5
b3V0IGNsaXAgcmVjdCBhbmQgdGhlIHBhaW50IGNsaXAgcmVjdCB3aGljaCBtYXkgYmUgbGFyZ2Vy
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggODQwYjg2ODcx
YWQxZmE3NmQ3ZThkZjRlZThhM2U4NmU5ZWNmZjkzZi4uZmFiNjlhODNmNmJlNzA1MDE5MTBmZmNh
NmZlMzhlNzYxM2E4NzU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCkBAIC02NSw4ICs2NSw4IEBACiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgog
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mby5oIgorI2luY2x1ZGUg
IlNoYXBlSW5zaWRlSW5mby5oIgorI2luY2x1ZGUgIlNoYXBlT3V0c2lkZUluZm8uaCIKICNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMzU5LDkgKzM1OSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5CiAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICAK
ICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAvLyBGSVhNRTogQnVnIDg5OTkzOiBTdHlsZSBj
aGFuZ2VzIHNob3VsZCBhZmZlY3QgdGhlIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb3MgZm9yIG90
aGVyIHJlbmRlciBibG9ja3MgdGhhdAotICAgIC8vIHNoYXJlIHRoZSBzYW1lIEV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mbwotICAgIHVwZGF0ZUV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb0FmdGVyU3R5
bGVDaGFuZ2UobmV3U3R5bGUtPnJlc29sdmVkU2hhcGVJbnNpZGUoKSwgb2xkU3R5bGUgPyBvbGRT
dHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpIDogMCk7CisgICAgdXBkYXRlU2hhcGVJbnNpZGVJ
bmZvQWZ0ZXJTdHlsZUNoYW5nZShuZXdTdHlsZS0+cmVzb2x2ZWRTaGFwZUluc2lkZSgpLCBvbGRT
dHlsZSA/IG9sZFN0eWxlLT5yZXNvbHZlZFNoYXBlSW5zaWRlKCkgOiAwKTsKICNlbmRpZgogCiAg
ICAgaWYgKCFpc0Fub255bW91c0Jsb2NrKCkpIHsKQEAgLTE0MzcsMTcgKzE0MzUsMTcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotdm9p
ZCBSZW5kZXJCbG9jazo6dXBkYXRlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvQWZ0ZXJTdHlsZUNo
YW5nZShjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBzaGFwZUluc2lkZSwgY29uc3QgRXhjbHVz
aW9uU2hhcGVWYWx1ZSogb2xkU2hhcGVJbnNpZGUpCit2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVT
aGFwZUluc2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlSW5z
aWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZUluc2lkZSkKIHsKICAgICAvLyBGSVhNRTog
QSBmdXR1cmUgb3B0aW1pemF0aW9uIHdvdWxkIGRvIGEgZGVlcCBjb21wYXJpc29uIGZvciBlcXVh
bGl0eS4KICAgICBpZiAoc2hhcGVJbnNpZGUgPT0gb2xkU2hhcGVJbnNpZGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChzaGFwZUluc2lkZSkgewotICAgICAgICBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGVuc3VyZUV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbygpOwotICAgICAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmRpcnR5U2hh
cGVTaXplKCk7CisgICAgICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNpZGVJbmZvID0gZW5z
dXJlU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgICAgIHNoYXBlSW5zaWRlSW5mby0+ZGlydHlTaGFw
ZVNpemUoKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZXRFeGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8obnVsbHB0cik7CisgICAgICAgIHNldFNoYXBlSW5zaWRlSW5mbyhudWxscHRyKTsKICAgICAg
ICAgbWFya1NoYXBlSW5zaWRlRGVzY2VuZGFudHNGb3JMYXlvdXQoKTsKICAgICB9CiB9CkBAIC0x
NDY5LDE2ICsxNDY3LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtTaGFwZUluc2lkZURlc2Nl
bmRhbnRzRm9yTGF5b3V0KCkKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGJvb2wgZXhjbHVz
aW9uSW5mb1JlcXVpcmVzUmVsYXlvdXQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQorc3RhdGlj
IGlubGluZSBib29sIHNoYXBlSW5mb1JlcXVpcmVzUmVsYXlvdXQoY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrKQogewogI2lmICFFTkFCTEUoQ1NTX1NIQVBFUykKICAgICByZXR1cm4gZmFsc2U7CiAj
ZWxzZQotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogaW5mbyA9IGJsb2NrLT5leGNsdXNp
b25TaGFwZUluc2lkZUluZm8oKTsKKyAgICBTaGFwZUluc2lkZUluZm8qIGluZm8gPSBibG9jay0+
c2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgaWYgKGluZm8pCiAgICAgICAgIGluZm8tPnNldE5lZWRz
TGF5b3V0KGluZm8tPnNoYXBlU2l6ZURpcnR5KCkpOwogICAgIGVsc2UKLSAgICAgICAgaW5mbyA9
IGJsb2NrLT5sYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKKyAgICAgICAgaW5mbyA9
IGJsb2NrLT5sYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKICAgICByZXR1cm4gaW5mbyAmJiBpbmZv
LT5uZWVkc0xheW91dCgpOwogI2VuZGlmCiB9CkBAIC0xNDg2LDExICsxNDg0LDExIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxheW91dChjb25zdCBSZW5kZXJC
bG9jayogYmxvY2spCiBib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25zQW5kRXhjbHVzaW9u
c0JlZm9yZUNoaWxkTGF5b3V0KFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiB7CiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0gICAgaWYgKCFmbG93VGhyZWFkICYmICFleGNsdXNpb25TaGFw
ZUluc2lkZUluZm8oKSkKKyAgICBpZiAoIWZsb3dUaHJlYWQgJiYgIXNoYXBlSW5zaWRlSW5mbygp
KQogI2Vsc2UKICAgICBpZiAoIWZsb3dUaHJlYWQpCiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIGV4
Y2x1c2lvbkluZm9SZXF1aXJlc1JlbGF5b3V0KHRoaXMpOworICAgICAgICByZXR1cm4gc2hhcGVJ
bmZvUmVxdWlyZXNSZWxheW91dCh0aGlzKTsKIAogICAgIExheW91dFVuaXQgb2xkSGVpZ2h0ID0g
bG9naWNhbEhlaWdodCgpOwogICAgIExheW91dFVuaXQgb2xkVG9wID0gbG9naWNhbFRvcCgpOwpA
QCAtMTUwMSw3ICsxNDk5LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlUmVnaW9uc0FuZEV4
Y2x1c2lvbnNCZWZvcmVDaGlsZExheW91dChSZW5kZXJGbG93VGhyZWFkKgogICAgIHVwZGF0ZUxv
Z2ljYWxIZWlnaHQoKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIGNvbXB1dGVFeGNs
dXNpb25TaGFwZVNpemUoKTsKKyAgICBjb21wdXRlU2hhcGVTaXplKCk7CiAjZW5kaWYKIAogICAg
IC8vIFNldCBvdXIgc3RhcnQgYW5kIGVuZCByZWdpb25zLiBObyByZWdpb25zIGFib3ZlIG9yIGJl
bG93IHVzIHdpbGwgYmUgY29uc2lkZXJlZCBieSBvdXIgY2hpbGRyZW4uIFRoZXkgYXJlCkBAIC0x
NTExLDE2ICsxNTA5LDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvbnNBbmRFeGNs
dXNpb25zQmVmb3JlQ2hpbGRMYXlvdXQoUmVuZGVyRmxvd1RocmVhZCoKICAgICBzZXRMb2dpY2Fs
SGVpZ2h0KG9sZEhlaWdodCk7CiAgICAgc2V0TG9naWNhbFRvcChvbGRUb3ApOwogICAgIAotICAg
IHJldHVybiBleGNsdXNpb25JbmZvUmVxdWlyZXNSZWxheW91dCh0aGlzKTsKKyAgICByZXR1cm4g
c2hhcGVJbmZvUmVxdWlyZXNSZWxheW91dCh0aGlzKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQotdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUV4Y2x1c2lvblNoYXBlU2l6ZSgpCit2b2lk
IFJlbmRlckJsb2NrOjpjb21wdXRlU2hhcGVTaXplKCkKIHsKLSAgICBFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IHRoaXMtPmV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbygpOwotICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lkZUluZm8pIHsKKyAgICBT
aGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHRoaXMtPnNoYXBlSW5zaWRlSW5mbygp
OworICAgIGlmIChzaGFwZUluc2lkZUluZm8pIHsKICAgICAgICAgYm9vbCBwZXJjZW50YWdlTG9n
aWNhbEhlaWdodFJlc29sdmFibGUgPSBwZXJjZW50YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJs
ZUZyb21CbG9jayh0aGlzLCBmYWxzZSk7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by0+c2V0U2hhcGVTaXplKGxvZ2ljYWxXaWR0aCgpLCBwZXJjZW50YWdlTG9naWNhbEhlaWdodFJl
c29sdmFibGUgPyBsb2dpY2FsSGVpZ2h0KCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICBzaGFw
ZUluc2lkZUluZm8tPnNldFNoYXBlU2l6ZShsb2dpY2FsV2lkdGgoKSwgcGVyY2VudGFnZUxvZ2lj
YWxIZWlnaHRSZXNvbHZhYmxlID8gbG9naWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpKTsKICAg
ICB9CiB9CiAjZW5kaWYKQEAgLTE1MjksNyArMTUyNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVw
ZGF0ZVJlZ2lvbnNBbmRFeGNsdXNpb25zQWZ0ZXJDaGlsZExheW91dChSZW5kZXJGbG93VGhyZWFk
KiBmCiB7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgLy8gQSBwcmV2aW91cyBzaWJsaW5n
IGhhcyBjaGFuZ2VkIGRpbWVuc2lvbiwgc28gd2UgbmVlZCB0byByZWxheW91dCB0aGUgc2hhcGUg
d2l0aCB0aGUgY29udGVudAotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNp
ZGVJbmZvID0gbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNp
ZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSBsYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKICAgICBp
ZiAoaGVpZ2h0Q2hhbmdlZCAmJiBzaGFwZUluc2lkZUluZm8pCiAgICAgICAgIHNoYXBlSW5zaWRl
SW5mby0+ZGlydHlTaGFwZVNpemUoKTsKICNlbmRpZgpAQCAtNDAyMSwxMCArNDAxOSwxMCBAQCBS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09i
amVjdChSZW5kZXJCb3gqIG8pCiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAg
RXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gby0+ZXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbygpOworICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG8t
PnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRzaWRlKSB7CiAgICAgICAgIHNo
YXBlT3V0c2lkZS0+c2V0U2hhcGVTaXplKG8tPmxvZ2ljYWxXaWR0aCgpLCBvLT5sb2dpY2FsSGVp
Z2h0KCkpOwotICAgICAgICAvLyBUaGUgQ1NTIEV4Y2x1c2lvbnMgc3BlY2lmaWNhdGlvbiBzYXlz
IHRoYXQgdGhlIG1hcmdpbnMgYXJlIGlnbm9yZWQKKyAgICAgICAgLy8gVGhlIENTUyBTaGFwZXMg
c3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdGhlIG1hcmdpbnMgYXJlIGlnbm9yZWQKICAgICAgICAg
Ly8gd2hlbiBhIGZsb2F0IGhhcyBhIHNoYXBlIG91dHNpZGUuCiAgICAgICAgIHNldExvZ2ljYWxX
aWR0aEZvckZsb2F0KG5ld09iaiwgc2hhcGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxXaWR0aCgpKTsK
ICAgICB9IGVsc2UKQEAgLTQxMDIsNyArNDEwMCw3IEBAIExheW91dFBvaW50IFJlbmRlckJsb2Nr
Ojpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZs
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXQ7IC8vIENvbnN0YW50IHBhcnQgb2Yg
cmlnaHQgb2Zmc2V0LgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIC8vIEZJWE1FIEJ1ZyAx
MDI5NDg6IFRoaXMgb25seSB3b3JrcyBmb3Igc2hhcGUgb3V0c2lkZSBkaXJlY3RseSBzZXQgb24g
dGhpcyBibG9jay4KLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5m
byA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hh
cGVJbnNpZGVJbmZvID0gdGhpcy0+c2hhcGVJbnNpZGVJbmZvKCk7CiAgICAgLy8gRklYTUUgQnVn
IDEwMjg0NjogVGFrZSBpbnRvIGFjY291bnQgdGhlIGhlaWdodCBvZiB0aGUgY29udGVudC4gVGhl
IG9mZnNldCBzaG91bGQgYmUKICAgICAvLyBlcXVhbCB0byB0aGUgbWF4aW11bSBzZWdtZW50IGxl
bmd0aC4KICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvICYmIHNoYXBlSW5zaWRlSW5mby0+aGFzU2Vn
bWVudHMoKSAmJiBzaGFwZUluc2lkZUluZm8tPnNlZ21lbnRzKCkuc2l6ZSgpID09IDEpIHsKQEAg
LTQyNTcsOCArNDI1NSw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkK
IAogICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGZsb2F0TG9n
aWNhbExvY2F0aW9uLnkoKSk7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIGlmIChj
aGlsZEJveC0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbygpKQotICAgICAgICAgICAgc2V0TG9n
aWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBjaGlsZEJveC0+ZXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbygpLT5zaGFwZUxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgIGlmIChjaGls
ZEJveC0+c2hhcGVPdXRzaWRlSW5mbygpKQorICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodEZv
ckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBjaGlsZEJveC0+c2hhcGVPdXRzaWRlSW5mbygpLT5zaGFw
ZUxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgc2V0
TG9naWNhbEhlaWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsSGVpZ2h0Rm9yQ2hp
bGQoY2hpbGRCb3gpICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGRCb3gpICsgbWFyZ2luQWZ0
ZXJGb3JDaGlsZChjaGlsZEJveCkpOwpAQCAtNDQ0NCw3ICs0NDQyLDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW4KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdCA9IGFkYXB0ZXIubGFzdEZsb2F0KCk7CiAgICAgICAgIGlmIChv
ZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgbGFzdEZsb2F0KSB7
Ci0gICAgICAgICAgICBpZiAoRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRl
ID0gbGFzdEZsb2F0LT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKCkpIHsK
KyAgICAgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0Rmxv
YXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgewogICAgICAgICAgICAgICAgIHNo
YXBlT3V0c2lkZS0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsb2dpY2FsVG9wIC0gbG9naWNhbFRv
cEZvckZsb2F0KGxhc3RGbG9hdCkgKyBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbFRvcCgpLCBs
b2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBsZWZ0ICs9IHNoYXBlT3V0c2lkZS0+cmln
aHRTZWdtZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCk7CiAgICAgICAgICAgICB9CkBAIC00NTAy
LDcgKzQ1MDAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRG
b3JMaW5lKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VQogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0ID0gYWRhcHRlci5s
YXN0RmxvYXQoKTsKICAgICAgICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRT
aGFwZU9mZnNldCAmJiBsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgIGlmIChFeGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBsYXN0RmxvYXQtPnJlbmRlcmVyKCktPmV4Y2x1
c2lvblNoYXBlT3V0c2lkZUluZm8oKSkgeworICAgICAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUlu
Zm8qIHNoYXBlT3V0c2lkZSA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5m
bygpKSB7CiAgICAgICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT5jb21wdXRlU2VnbWVudHNGb3JM
aW5lKGxvZ2ljYWxUb3AgLSBsb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSArIHNoYXBlT3V0
c2lkZS0+c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgICAg
IHJpZ2h0RmxvYXRPZmZzZXQgKz0gc2hhcGVPdXRzaWRlLT5sZWZ0U2VnbWVudFNoYXBlQm91bmRp
bmdCb3hEZWx0YSgpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAppbmRleCBkY2M2ZDA3MTQwMDFjNzc4ZDFmY2NjNzhmZDEyNjY2ZjExMTFiNWJhLi5i
ZDEwYzk4YTU3ODdkYTYwODkzZDExNGYxY2VmMGM3NTVmZTM0ZjBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMzUsOCArMzUsOCBAQAogI2luY2x1ZGUgPHd0Zi9M
aXN0SGFzaFNldC5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVkZSAiRXhjbHVz
aW9uU2hhcGVJbnNpZGVJbmZvLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIgor
I2luY2x1ZGUgIlNoYXBlSW5zaWRlSW5mby5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKICNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NDYsMjggKzQ0NiwyOCBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyogZW5zdXJlRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkKKyAgICBTaGFwZUluc2lk
ZUluZm8qIGVuc3VyZVNoYXBlSW5zaWRlSW5mbygpCiAgICAgewogICAgICAgICBpZiAoIW1fcmFy
ZURhdGEgfHwgIW1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvKQotICAgICAgICAgICAgc2V0
RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbzo6Y3JlYXRl
SW5mbyh0aGlzKSk7CisgICAgICAgICAgICBzZXRTaGFwZUluc2lkZUluZm8oU2hhcGVJbnNpZGVJ
bmZvOjpjcmVhdGVJbmZvKHRoaXMpKTsKICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fc2hh
cGVJbnNpZGVJbmZvLmdldCgpOwogICAgIH0KIAotICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
byogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKKyAgICBTaGFwZUluc2lkZUluZm8q
IHNoYXBlSW5zaWRlSW5mbygpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fcmFyZURhdGEg
fHwgIW1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvKQogICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIHJldHVybiBFeGNsdXNpb25TaGFwZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcih0
aGlzKSA/IG1fcmFyZURhdGEtPm1fc2hhcGVJbnNpZGVJbmZvLmdldCgpIDogMDsKKyAgICAgICAg
cmV0dXJuIFNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpID8gbV9yYXJlRGF0YS0+
bV9zaGFwZUluc2lkZUluZm8uZ2V0KCkgOiAwOwogICAgIH0KLSAgICB2b2lkIHNldEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbyhQYXNzT3duUHRyPEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbz4gdmFs
dWUpCisgICAgdm9pZCBzZXRTaGFwZUluc2lkZUluZm8oUGFzc093blB0cjxTaGFwZUluc2lkZUlu
Zm8+IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICAgICAg
bV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9zaGFwZUluc2lkZUluZm8gPSB2YWx1ZTsKICAgICB9CiAgICAg
dm9pZCBtYXJrU2hhcGVJbnNpZGVEZXNjZW5kYW50c0ZvckxheW91dCgpOwotICAgIEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbyogbGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKCkgY29uc3Q7
Ci0gICAgYm9vbCBhbGxvd3NFeGNsdXNpb25TaGFwZUluc2lkZUluZm9TaGFyaW5nKCkgY29uc3Qg
eyByZXR1cm4gIWlzSW5saW5lKCkgJiYgIWlzRmxvYXRpbmcoKTsgfQorICAgIFNoYXBlSW5zaWRl
SW5mbyogbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd3NTaGFw
ZUluc2lkZUluZm9TaGFyaW5nKCkgY29uc3QgeyByZXR1cm4gIWlzSW5saW5lKCkgJiYgIWlzRmxv
YXRpbmcoKTsgfQogI2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTU4Niw4ICs1ODYsOCBAQCBwcm90
ZWN0ZWQ6CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgdm9pZCBjb21w
dXRlRXhjbHVzaW9uU2hhcGVTaXplKCk7Ci0gICAgdm9pZCB1cGRhdGVFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBjb25z
dCBFeGNsdXNpb25TaGFwZVZhbHVlKiBvbGRFeGNsdXNpb25TaGFwZSk7CisgICAgdm9pZCBjb21w
dXRlU2hhcGVTaXplKCk7CisgICAgdm9pZCB1cGRhdGVTaGFwZUluc2lkZUluZm9BZnRlclN0eWxl
Q2hhbmdlKGNvbnN0IFNoYXBlVmFsdWUqLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZSk7CiAj
ZW5kaWYKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVu
KCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9
CkBAIC03OTAsNyArNzkwLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHhQb3NpdGlvbkZv
ckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QK
ICAgICB7CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9IGNoaWxkLT5yZW5kZXJlcigpLT5leGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvKCk7CisgICAgICAgIFNoYXBlT3V0c2lkZUluZm8gKnNoYXBlT3V0c2lkZSA9
IGNoaWxkLT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgICAgIGlmIChzaGFw
ZU91dHNpZGUpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKTsKICNlbmRpZgpAQCAtODA0
LDcgKzgwNCw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCB5UG9zaXRpb25Gb3JGbG9hdElu
Y2x1ZGluZ01hcmdpbihjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAgewog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZv
ICpzaGFwZU91dHNpZGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9uU2hhcGVPdXRzaWRl
SW5mbygpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZvICpzaGFwZU91dHNpZGUgPSBjaGlsZC0+
cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAgICBpZiAoc2hhcGVPdXRzaWRl
KQogICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT55KCk7CiAjZW5kaWYKQEAgLTEwODUsOCArMTA4
NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRT
dGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOwogICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZsb2F0
c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3QgSW5s
aW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVC
aWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCi0gICAgdm9pZCB1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVu
dExpbmUoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCYsIExpbmVMYXlvdXRT
dGF0ZSYsIGJvb2wmKTsKLSAgICBib29sIGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhl
aWdodElmTmVlZGVkKEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyosIExheW91dFVuaXQsIExpbmVM
YXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIEZsb2F0aW5nT2JqZWN0KiwgSW5saW5l
SXRlcmF0b3ImLCBXb3JkTWVhc3VyZW1lbnRzJik7CisgICAgdm9pZCB1cGRhdGVTaGFwZUFuZFNl
Z21lbnRzRm9yQ3VycmVudExpbmUoU2hhcGVJbnNpZGVJbmZvKiwgTGF5b3V0VW5pdCYsIExpbmVM
YXlvdXRTdGF0ZSYsIGJvb2wmKTsKKyAgICBib29sIGFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9n
aWNhbEhlaWdodElmTmVlZGVkKFNoYXBlSW5zaWRlSW5mbyosIExheW91dFVuaXQsIExpbmVMYXlv
dXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIEZsb2F0aW5nT2JqZWN0KiwgSW5saW5lSXRl
cmF0b3ImLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAjZW5kaWYKICAgICBjb25zdCBJbmxpbmVJdGVy
YXRvciYgcmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExheW91dFVuaXQgb2xkTG9n
aWNhbEhlaWdodCwgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0LCAgRmxvYXRpbmdPYmplY3Qq
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIElubGluZUJpZGlSZXNvbHZlciYsICBjb25zdCBJ
bmxpbmVJdGVyYXRvciYpOwogICAgIHZvaWQgbGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlv
dXRTdGF0ZSYpOwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAgcHVibGljOgogCiAgICAgICAgIFJvb3RJ
bmxpbmVCb3gqIG1fbGluZUJyZWFrVG9Bdm9pZFdpZG93OwogI2lmIEVOQUJMRShDU1NfU0hBUEVT
KQotICAgICAgICBPd25QdHI8RXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvPiBtX3NoYXBlSW5zaWRl
SW5mbzsKKyAgICAgICAgT3duUHRyPFNoYXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87
CiAjZW5kaWYKICAgICAgICAgYm9vbCBtX3Nob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93IDog
MTsKICAgICAgICAgYm9vbCBtX2Rpc2NhcmRNYXJnaW5CZWZvcmUgOiAxOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBjMWIz
ZGJmYTdmZDY1NDgxMDA4OTYwZWYwNWRlNzljNTNiYmY1MjIxLi43MjA5MWEyYWNjMWZlZmQ3NWU5
OWU0NTU2YTk5OGFhZjNlODIwNDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUg
PHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
LSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZUluc2lkZUluZm8uaCIKKyNpbmNsdWRlICJTaGFwZUlu
c2lkZUluZm8uaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTc3LDE2ICs3NywxNiBA
QCBzdGF0aWMgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0Rm9yTGluZShjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2ssIGJvb2wgaXNGaXJzdExpbgogfQogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi1F
eGNsdXNpb25TaGFwZUluc2lkZUluZm8qIFJlbmRlckJsb2NrOjpsYXlvdXRFeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8oKSBjb25zdAorU2hhcGVJbnNpZGVJbmZvKiBSZW5kZXJCbG9jazo6bGF5b3V0
U2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKIHsKLSAgICBFeGNsdXNpb25TaGFwZUluc2lkZUluZm8q
IHNoYXBlSW5zaWRlSW5mbyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+ZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8gPSB2aWV3
KCktPmxheW91dFN0YXRlKCktPnNoYXBlSW5zaWRlSW5mbygpOwogCi0gICAgaWYgKCFzaGFwZUlu
c2lkZUluZm8gJiYgZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpICYmIGFsbG93c0V4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSkgeworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvICYm
IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSAmJiBhbGxvd3NTaGFwZUluc2lkZUluZm9TaGFy
aW5nKCkpIHsKICAgICAgICAgLy8gcmVnaW9uQXRCbG9ja09mZnNldCByZXR1cm5zIHJlZ2lvbnMg
bGlrZSBhbiBhcnJheSBmaXJzdD17MCxOLTF9LCBzZWNvbmQ9e04sTS0xfSwgLi4uCiAgICAgICAg
IExheW91dFVuaXQgb2Zmc2V0ID0gbG9naWNhbEhlaWdodCgpICsgbG9naWNhbEhlaWdodEZvckxp
bmUodGhpcywgZmFsc2UpIC0gTGF5b3V0VW5pdCgxKTsKICAgICAgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIGlmIChyZWdpb24p
Ci0gICAgICAgICAgICBzaGFwZUluc2lkZUluZm8gPSByZWdpb24tPmV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbygpOworICAgICAgICAgICAgc2hhcGVJbnNpZGVJbmZvID0gcmVnaW9uLT5zaGFwZUlu
c2lkZUluZm8oKTsKICAgICB9CiAKICAgICByZXR1cm4gc2hhcGVJbnNpZGVJbmZvOwpAQCAtMTE0
LDkgKzExNCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAjaWYg
RU5BQkxFKENTU19TSEFQRVMpCi0gICAgICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKCk7Ci0gICAgICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lkZUluZm8pCi0gICAgICAg
ICAgICBtX3NlZ21lbnQgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmN1cnJlbnRTZWdtZW50
KCk7CisgICAgICAgIGlmIChTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IG1fYmxv
Y2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpKQorICAgICAgICAgICAgbV9zZWdtZW50ID0gc2hh
cGVJbnNpZGVJbmZvLT5jdXJyZW50U2VnbWVudCgpOwogI2VuZGlmCiAgICAgICAgIHVwZGF0ZUF2
YWlsYWJsZVdpZHRoKCk7CiAgICAgfQpAQCAtMTk2LDIxICsxOTUsMjEgQEAgaW5saW5lIHZvaWQg
TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoUmVuZGVy
QmxvY2s6OkZsb2EKICAgICAvLyB3aGVuIHdlIGFkZCBhIHN1YnNlcXVlbnQgZmxvYXQgb24gdGhl
IHNhbWUgbGluZSwgd2UgbmVlZCB0byB1bmRvIHRoZSBzaGFwZSBkZWx0YSBpbiBvcmRlciB0byBw
b3NpdGlvbgogICAgIC8vIGJhc2VkIG9uIHRoZSBib3VuZGluZyBib3guIEluIG9yZGVyIHRvIGRv
IHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2ggdGhlIGZsb2F0aW5nIG9iamVjdCBs
aXN0IHRvIGZpbmQKICAgICAvLyB0aGUgZmlyc3QgcHJldmlvdXMgZmxvYXQgdGhhdCBpcyBvbiB0
aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KLSAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJ
bmZvKiBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IDA7CisgICAgU2hhcGVPdXRzaWRlSW5mbyogbGFz
dFNoYXBlT3V0c2lkZUluZm8gPSAwOwogICAgIGNvbnN0IFJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CiAgICAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgZm9yICgt
LWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkgewogICAgICAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdP
YmplY3QqIGxhc3RGbG9hdCA9ICppdDsKICAgICAgICAgaWYgKGxhc3RGbG9hdCAhPSBuZXdGbG9h
dCAmJiBsYXN0RmxvYXQtPnR5cGUoKSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7Ci0gICAgICAgICAg
ICBsYXN0U2hhcGVPdXRzaWRlSW5mbyA9IGxhc3RGbG9hdC0+cmVuZGVyZXIoKS0+ZXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICAgICAgbGFzdFNoYXBlT3V0c2lkZUluZm8gPSBs
YXN0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgICAgIGlm
IChsYXN0U2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgICAgICBsYXN0U2hhcGVPdXRzaWRl
SW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkgLSBt
X2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSArIGxhc3RTaGFwZU91dHNpZGVJ
bmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSwgbG9naWNhbEhlaWdodEZvckxpbmUobV9ibG9jaywgbV9p
c0ZpcnN0TGluZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQt
PnJlbmRlcmVyKCktPmV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8oKTsKKyAgICBTaGFwZU91dHNp
ZGVJbmZvKiBzaGFwZU91dHNpZGVJbmZvID0gbmV3RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0
c2lkZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgc2hhcGVPdXRz
aWRlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCkg
LSBtX2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpICsgc2hhcGVPdXRzaWRlSW5m
by0+c2hhcGVMb2dpY2FsVG9wKCksIGxvZ2ljYWxIZWlnaHRGb3JMaW5lKG1fYmxvY2ssIG1faXNG
aXJzdExpbmUpKTsKICNlbmRpZgpAQCAtMTAzNywxMCArMTAzNiwxMCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94
KiBsaW5lQm94LAogICAgIHVwZGF0ZUxvZ2ljYWxJbmxpbmVQb3NpdGlvbnModGhpcywgbGluZUxv
Z2ljYWxMZWZ0LCBsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGlzRmly
c3RMaW5lLCBzaG91bGRJbmRlbnRUZXh0LCAwKTsKICAgICBib29sIG5lZWRzV29yZFNwYWNpbmc7
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8o
KTsKLSAgICBpZiAoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvICYmIGV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbnNp
ZGVJbmZvID0gbGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKHNoYXBlSW5zaWRlSW5m
byAmJiBzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsKICAgICAgICAgQmlkaVJ1biog
c2VnbWVudFN0YXJ0ID0gZmlyc3RSdW47Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRMaXN0JiBzZWdt
ZW50cyA9IGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsKKyAgICAgICAgY29u
c3QgU2VnbWVudExpc3QmIHNlZ21lbnRzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50cygpOwog
ICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IG1heDxmbG9hdD4ocm91bmRUb0ludChzZWdtZW50
c1swXS5sb2dpY2FsTGVmdCksIGxpbmVMb2dpY2FsTGVmdCk7CiAgICAgICAgIGZsb2F0IGxvZ2lj
YWxSaWdodCA9IG1pbjxmbG9hdD4oZmxvb3JUb0ludChzZWdtZW50c1swXS5sb2dpY2FsUmlnaHQp
LCBsaW5lTG9naWNhbFJpZ2h0KTsKICAgICAgICAgZmxvYXQgc3RhcnRMb2dpY2FsTGVmdCA9IGxv
Z2ljYWxMZWZ0OwpAQCAtMTM2MSwxMyArMTM2MCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29u
c3RydWN0QmlkaVJ1bnNGb3JMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgSW5saW5lQmlk
aQogICAgIFVOVVNFRF9QQVJBTShibG9jayk7CiAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdt
ZW50KHRvcFJlc29sdmVyLCBiaWRpUnVucywgZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5KTsKICNlbHNlCi0gICAgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8gPSBibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hhcGVJbnNp
ZGVJbmZvKCk7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgIWV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkgeworICAgIFNoYXBlSW5zaWRlSW5mbyog
c2hhcGVJbnNpZGVJbmZvID0gYmxvY2stPmxheW91dFNoYXBlSW5zaWRlSW5mbygpOworICAgIGlm
ICghc2hhcGVJbnNpZGVJbmZvIHx8ICFzaGFwZUluc2lkZUluZm8tPmhhc1NlZ21lbnRzKCkpIHsK
ICAgICAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KHRvcFJlc29sdmVyLCBiaWRpUnVu
cywgZW5kT2ZMaW5lLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRS
YW5nZXMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNlZ21lbnRSYW5nZXMoKTsKKyAgICBj
b25zdCBTZWdtZW50UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gc2hhcGVJbnNpZGVJbmZvLT5z
ZWdtZW50UmFuZ2VzKCk7CiAgICAgQVNTRVJUKHNlZ21lbnRSYW5nZXMuc2l6ZSgpKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudFJhbmdlcy5zaXplKCk7IGkrKykgewpAQCAt
MTYzMywyNiArMTYzMiwyNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGZpcnN0UG9zaXRpdmVXaWR0
aChjb25zdCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogICAgIHJldHVybiAw
OwogfQogCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0TG9naWNhbExpbmVUb3AoRXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIElubGluZUl0
ZXJhdG9yIHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJlbWVudHMm
IHdvcmRNZWFzdXJlbWVudHMpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYWRqdXN0TG9naWNh
bExpbmVUb3AoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8sIElubGluZUl0ZXJhdG9y
IHN0YXJ0LCBJbmxpbmVJdGVyYXRvciBlbmQsIGNvbnN0IFdvcmRNZWFzdXJlbWVudHMmIHdvcmRN
ZWFzdXJlbWVudHMpCiB7Ci0gICAgaWYgKCFleGNsdXNpb25TaGFwZUluc2lkZUluZm8gfHwgZW5k
ICE9IHN0YXJ0KQorICAgIGlmICghc2hhcGVJbnNpZGVJbmZvIHx8IGVuZCAhPSBzdGFydCkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBmbG9hdCBtaW5XaWR0aCA9IGZpcnN0UG9zaXRpdmVXaWR0
aCh3b3JkTWVhc3VyZW1lbnRzKTsKICAgICBBU1NFUlQobWluV2lkdGggfHwgd29yZE1lYXN1cmVt
ZW50cy5pc0VtcHR5KCkpOwotICAgIGlmIChtaW5XaWR0aCA+IDAgJiYgZXhjbHVzaW9uU2hhcGVJ
bnNpZGVJbmZvLT5hZGp1c3RMb2dpY2FsTGluZVRvcChtaW5XaWR0aCkpCi0gICAgICAgIHJldHVy
biBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxvZ2ljYWxMaW5lVG9wKCk7CisgICAgaWYgKG1p
bldpZHRoID4gMCAmJiBzaGFwZUluc2lkZUluZm8tPmFkanVzdExvZ2ljYWxMaW5lVG9wKG1pbldp
ZHRoKSkKKyAgICAgICAgcmV0dXJuIHNoYXBlSW5zaWRlSW5mby0+bG9naWNhbExpbmVUb3AoKTsK
IAotICAgIHJldHVybiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbEJvdHRv
bSgpOworICAgIHJldHVybiBzaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbEJvdHRvbSgpOwog
fQogCi12b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTaGFwZUFuZFNlZ21lbnRzRm9yQ3VycmVudExp
bmUoRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvKiBleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIExh
eW91dFVuaXQmIGFic29sdXRlTG9naWNhbFRvcCwgTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0
ZSwgYm9vbCYgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSkKK3ZvaWQgUmVuZGVyQmxvY2s6
OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShTaGFwZUluc2lkZUluZm8qIHNo
YXBlSW5zaWRlSW5mbywgTGF5b3V0VW5pdCYgYWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBib29sJiBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBlSW5zaWRlKQog
ewogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IHRoaXMtPmxvZ2ljYWxIZWlnaHQoKTsK
ICAgICBSZW5kZXJSZWdpb24qIGN1cnJlbnRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxv
Z2ljYWxIZWlnaHQpOwogICAgIGlmIChjdXJyZW50UmVnaW9uKQotICAgICAgICBleGNsdXNpb25T
aGFwZUluc2lkZUluZm8gPSBsYXlvdXRFeGNsdXNpb25TaGFwZUluc2lkZUluZm8oKTsKLSAgICBp
ZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbykKKyAgICAgICAgc2hhcGVJbnNpZGVJbmZvID0g
bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCk7CisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8pCiAgICAg
ICAgIHJldHVybjsKIAogICAgIExheW91dFVuaXQgbGluZVRvcCA9IGxvZ2ljYWxIZWlnaHQgKyBh
YnNvbHV0ZUxvZ2ljYWxUb3A7CkBAIC0xNjYwLDE4ICsxNjU5LDE4IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShFeGNsdXNpb25TaGFwZUlu
c2lkZUluZm8qCiAKICAgICBpZiAobGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKSB7CiAgICAgICAg
IFJlbmRlclJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQobG9naWNhbEhl
aWdodCArIGxpbmVIZWlnaHQgLSBMYXlvdXRVbml0KDEpKTsKLSAgICAgICAgbGluZVRvcCArPSBl
eGNsdXNpb25TaGFwZUluc2lkZUluZm8tPm93bmVyKCktPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KTsKKyAgICAgICAgbGluZVRvcCArPSBzaGFwZUluc2lkZUluZm8tPm93bmVyKCktPmJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUoKTsKICAgICAgICAgLy8gQ29udGVudCBpbiBhIGZsb3cgdGhyZWFkIGlz
IHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRocmVhZCwgYnV0IHRoZSBzaGFwZSBj
YWxjdWxhdGlvbiBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcmVnaW9uLgogICAg
ICAgICBpZiAoY3VycmVudFJlZ2lvbiA9PSBuZXh0UmVnaW9uKQogICAgICAgICAgICAgbGluZVRv
cCAtPSBjdXJyZW50UmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKTsKICAg
ICB9CiAKICAgICAvLyBGSVhNRTogQnVnIDk1MzYxOiBJdCBpcyBwb3NzaWJsZSBmb3IgYSBsaW5l
IHRvIGdyb3cgYmV5b25kIGxpbmVIZWlnaHQsIGluIHdoaWNoIGNhc2UgdGhlc2Ugc2VnbWVudHMg
bWF5IGJlIGluY29ycmVjdC4KLSAgICBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmNvbXB1dGVT
ZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUhlaWdodCk7CisgICAgc2hhcGVJbnNpZGVJbmZv
LT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVIZWlnaHQpOwogCiAgICAgLy8g
VGhlIG92ZXJmbG93IHNob3VsZCBiZSBwdXNoZWQgYmVsb3cgdGhlIGNvbnRlbnQgYm94Ci0gICAg
TGF5b3V0VW5pdCBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IGV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mby0+c2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQoKTsKLSAgICBpZiAoIWV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mby0+bGluZVdpdGhpblNoYXBlQm91bmRzKCkgJiYgIWxpbmVPdmVyZmxv
d3NGcm9tU2hhcGVJbnNpZGUgJiYgc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQpIHsKKyAgICBM
YXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gc2hhcGVJbnNpZGVJbmZvLT5z
aGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCgpOworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvLT5s
aW5lV2l0aGluU2hhcGVCb3VuZHMoKSAmJiAhbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSAm
JiBzaGFwZUNvbnRhaW5pbmdCbG9ja0hlaWdodCkgewogICAgICAgICBsaW5lT3ZlcmZsb3dzRnJv
bVNoYXBlSW5zaWRlID0gdHJ1ZTsKICAgICAgICAgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0
ID0gc2hhcGVDb250YWluaW5nQmxvY2tIZWlnaHQ7CiAKQEAgLTE2ODMsOSArMTY4Miw5IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShFeGNs
dXNpb25TaGFwZUluc2lkZUluZm8qCiAgICAgICAgICAgICBuZXdMb2dpY2FsSGVpZ2h0ID0gbG9n
aWNhbEhlaWdodCArIHNoYXBlQ29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gbGluZVRvcCAtIGN1cnJl
bnRSZWdpb24tPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKIAogICAgICAgICAgICAgUmVuZGVy
UmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChuZXdMb2dpY2FsSGVpZ2h0
KTsKLSAgICAgICAgICAgIEV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyogbmV4dFNoYXBlSW5mbyA9
IDA7CisgICAgICAgICAgICBTaGFwZUluc2lkZUluZm8qIG5leHRTaGFwZUluZm8gPSAwOwogICAg
ICAgICAgICAgaWYgKG5leHRSZWdpb24pCi0gICAgICAgICAgICAgICAgbmV4dFNoYXBlSW5mbyA9
IG5leHRSZWdpb24tPmV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICAgICAgICAg
IG5leHRTaGFwZUluZm8gPSBuZXh0UmVnaW9uLT5zaGFwZUluc2lkZUluZm8oKTsKIAogICAgICAg
ICAgICAgLy8gVGhlIG92ZXJmbG93IGZsb3dzIGludG8gYW5vdGhlciByZWdpb24gd2l0aCBzaGFw
ZS1pbnNpZGUKICAgICAgICAgICAgIGlmIChjdXJyZW50UmVnaW9uICE9IG5leHRSZWdpb24gJiYg
bmV4dFNoYXBlSW5mbykgewpAQCAtMTY5NCw3ICsxNjkzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
dXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJlbnRMaW5lKEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyoKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldCA9IG5leHRTaGFwZUluZm8t
PnNoYXBlTG9naWNhbFRvcCgpIC0gbmV4dFJlZ2lvbi0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgp
OwogICAgICAgICAgICAgICAgIG5leHRTaGFwZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckxpbmUo
b2Zmc2V0LCBsaW5lSGVpZ2h0KTsKIAotICAgICAgICAgICAgICAgIGV4Y2x1c2lvblNoYXBlSW5z
aWRlSW5mbyA9IG5leHRTaGFwZUluZm87CisgICAgICAgICAgICAgICAgc2hhcGVJbnNpZGVJbmZv
ID0gbmV4dFNoYXBlSW5mbzsKICAgICAgICAgICAgICAgICBsaW5lT3ZlcmZsb3dzRnJvbVNoYXBl
SW5zaWRlID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDIsOSArMTcw
MSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50
TGluZShFeGNsdXNpb25TaGFwZUluc2lkZUluZm8qCiAgICAgfQogfQogCi1ib29sIFJlbmRlckJs
b2NrOjphZGp1c3RMb2dpY2FsTGluZVRvcEFuZExvZ2ljYWxIZWlnaHRJZk5lZWRlZChFeGNsdXNp
b25TaGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgTGF5b3V0VW5pdCBh
YnNvbHV0ZUxvZ2ljYWxUb3AsIExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lLCBJbmxpbmVJdGVyYXRvciYgZW5kLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3Vy
ZW1lbnRzKQorYm9vbCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2Fs
SGVpZ2h0SWZOZWVkZWQoU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8sIExheW91dFVu
aXQgYWJzb2x1dGVMb2dpY2FsVG9wLCBMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSwgSW5saW5lSXRlcmF0b3ImIGVuZCwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1l
YXN1cmVtZW50cykKIHsKLSAgICBMYXlvdXRVbml0IGFkanVzdGVkTG9naWNhbExpbmVUb3AgPSBh
ZGp1c3RMb2dpY2FsTGluZVRvcChleGNsdXNpb25TaGFwZUluc2lkZUluZm8sIHJlc29sdmVyLnBv
c2l0aW9uKCksIGVuZCwgd29yZE1lYXN1cmVtZW50cyk7CisgICAgTGF5b3V0VW5pdCBhZGp1c3Rl
ZExvZ2ljYWxMaW5lVG9wID0gYWRqdXN0TG9naWNhbExpbmVUb3Aoc2hhcGVJbnNpZGVJbmZvLCBy
ZXNvbHZlci5wb3NpdGlvbigpLCBlbmQsIHdvcmRNZWFzdXJlbWVudHMpOwogICAgIGlmICghYWRq
dXN0ZWRMb2dpY2FsTGluZVRvcCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNzMxLDE5
ICsxNzMwLDE5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdl
KExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluCiAKICNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKICAgICBMYXlvdXRVbml0IGFic29sdXRlTG9naWNhbFRvcDsKLSAgICBFeGNsdXNpb25T
aGFwZUluc2lkZUluZm8qIGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbyA9IGxheW91dEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbygpOwotICAgIGlmIChleGNsdXNpb25TaGFwZUluc2lkZUluZm8pIHsK
LSAgICAgICAgQVNTRVJUKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+b3duZXIoKSA9PSB0aGlz
IHx8IGFsbG93c0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSk7Ci0gICAgICAgIGlm
IChleGNsdXNpb25TaGFwZUluc2lkZUluZm8gIT0gdGhpcy0+ZXhjbHVzaW9uU2hhcGVJbnNpZGVJ
bmZvKCkpIHsKKyAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGxheW91dFNo
YXBlSW5zaWRlSW5mbygpOworICAgIGlmIChzaGFwZUluc2lkZUluZm8pIHsKKyAgICAgICAgQVNT
RVJUKHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKSA9PSB0aGlzIHx8IGFsbG93c1NoYXBlSW5zaWRl
SW5mb1NoYXJpbmcoKSk7CisgICAgICAgIGlmIChzaGFwZUluc2lkZUluZm8gIT0gdGhpcy0+c2hh
cGVJbnNpZGVJbmZvKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDAyODQ6IElmIHN1
YnNlcXVlbnQgTGF5b3V0U3RhdGVzIGFyZSBwdXNoZWQsIHdlIHdpbGwgaGF2ZSB0byBhZGQKICAg
ICAgICAgICAgIC8vIHRoZWlyIG9mZnNldHMgZnJvbSB0aGUgb3JpZ2luYWwgc2hhcGUtaW5zaWRl
IGNvbnRhaW5lci4KICAgICAgICAgICAgIGFic29sdXRlTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3Ao
KTsKICAgICAgICAgfQogICAgICAgICAvLyBCZWdpbiBsYXlvdXQgYXQgdGhlIGxvZ2ljYWwgdG9w
IG9mIG91ciBzaGFwZSBpbnNpZGUuCi0gICAgICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgKyBhYnNv
bHV0ZUxvZ2ljYWxUb3AgPCBleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRv
cCgpKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBleGNsdXNpb25T
aGFwZUluc2lkZUluZm8tPnNoYXBlTG9naWNhbFRvcCgpIC0gYWJzb2x1dGVMb2dpY2FsVG9wOwor
ICAgICAgICBpZiAobG9naWNhbEhlaWdodCgpICsgYWJzb2x1dGVMb2dpY2FsVG9wIDwgc2hhcGVJ
bnNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSkgeworICAgICAgICAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0ID0gc2hhcGVJbnNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSAtIGFic29s
dXRlTG9naWNhbFRvcDsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkp
Ci0gICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBleGNsdXNpb25TaGFwZUluc2lkZUlu
Zm8tPm93bmVyKCktPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAgICAgICAgICAgICAgICBs
b2dpY2FsSGVpZ2h0IC09IHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSgpOwogICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTE3NzEsNyArMTc3MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IElubGluCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5l
ID0gKGNvbnRhaW5zRmxvYXRzKCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6
IDA7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgdXBkYXRlU2hhcGVBbmRTZWdt
ZW50c0ZvckN1cnJlbnRMaW5lKGV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVMb2dp
Y2FsVG9wLCBsYXlvdXRTdGF0ZSwgbGluZU92ZXJmbG93c0Zyb21TaGFwZUluc2lkZSk7CisgICAg
ICAgIHVwZGF0ZVNoYXBlQW5kU2VnbWVudHNGb3JDdXJyZW50TGluZShzaGFwZUluc2lkZUluZm8s
IGFic29sdXRlTG9naWNhbFRvcCwgbGF5b3V0U3RhdGUsIGxpbmVPdmVyZmxvd3NGcm9tU2hhcGVJ
bnNpZGUpOwogI2VuZGlmCiAgICAgICAgIFdvcmRNZWFzdXJlbWVudHMgd29yZE1lYXN1cmVtZW50
czsKICAgICAgICAgZW5kID0gbGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhyZXNvbHZlciwgbGF5
b3V0U3RhdGUubGluZUluZm8oKSwgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3b3JkTWVhc3VyZW1lbnRzKTsKQEAg
LTE3ODcsNyArMTc4Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJ
blJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluCiAgICAgICAgIH0KIAog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBpZiAoYWRqdXN0TG9naWNhbExpbmVUb3BB
bmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvLCBhYnNvbHV0
ZUxvZ2ljYWxUb3AsIGxheW91dFN0YXRlLCByZXNvbHZlciwgbGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZSwgZW5kLCB3b3JkTWVhc3VyZW1lbnRzKSkKKyAgICAgICAgaWYgKGFkanVzdExvZ2ljYWxM
aW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKHNoYXBlSW5zaWRlSW5mbywgYWJzb2x1dGVM
b2dpY2FsVG9wLCBsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUsIGVuZCwgd29yZE1lYXN1cmVtZW50cykpCiAgICAgICAgICAgICBjb250aW51ZTsKICNlbmRp
ZgogICAgICAgICBBU1NFUlQoZW5kICE9IHJlc29sdmVyLnBvc2l0aW9uKCkpOwpAQCAtMjc0MSwy
OSArMjc0MCwyOSBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5l
eHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbAogI2lmICFFTkFCTEUoQ1NTX1NI
QVBFUykKICAgICByZXR1cm4gbmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJl
bmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CiAjZWxzZQotICAgIEV4Y2x1c2lvblNoYXBl
SW5zaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lk
ZUluZm8gPSBtX2Jsb2NrLT5sYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKIAotICAgIGlmICghZXhj
bHVzaW9uU2hhcGVJbnNpZGVJbmZvIHx8ICFleGNsdXNpb25TaGFwZUluc2lkZUluZm8tPmxpbmVP
dmVybGFwc1NoYXBlQm91bmRzKCkpCisgICAgaWYgKCFzaGFwZUluc2lkZUluZm8gfHwgIXNoYXBl
SW5zaWRlSW5mby0+bGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkKICAgICAgICAgcmV0dXJuIG5l
eHRTZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywgbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdvcmRNZWFz
dXJlbWVudHMpOwogCiAgICAgLy8gSW4gbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2Ugd2UgaGF2
ZSB0byB1c2UgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSB0byBkZXRlcm1pbmUgdGhlIGxpbmUg
c2VnbWVudHMgc2luY2Ugc2hhcGUtb3V0c2lkZSdzIGNvZGVwYXRocyB1c2VzIHRoZSBzYW1lIGNv
ZGUgdG8gZGV0ZXJtaW5lIGl0cyBzZWdtZW50cy4gVGhlIGxpbmUgY29udGFpbmluZyBpcyBub3Qg
YSByZXF1aXJlbWVudCBmb3Igc2hhcGUtb3V0c2lkZSwKICAgICAvLyBzbyBpbiB0aGlzIGNhc2Ug
d2UgY2FuIGVuZCB1cCB3aXRoIHNvbWUgZXh0cmEgc2VnbWVudHMgZm9yIHRoZSBvdmVyZmxvd2lu
ZyBjb250ZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBhcHBseSB0aGUgc2VnbWVudHMgZm9yIHRo
ZSBvdmVyZmxvd2luZyBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIHJlc2V0IGl0LgotICAgIGlmICgh
bV9ibG9jay0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpICYmICFleGNsdXNpb25TaGFwZUlu
c2lkZUluZm8tPmxpbmVXaXRoaW5TaGFwZUJvdW5kcygpKSB7Ci0gICAgICAgIGV4Y2x1c2lvblNo
YXBlSW5zaWRlSW5mby0+Y2xlYXJTZWdtZW50cygpOworICAgIGlmICghbV9ibG9jay0+Zmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpICYmICFzaGFwZUluc2lkZUluZm8tPmxpbmVXaXRoaW5TaGFw
ZUJvdW5kcygpKSB7CisgICAgICAgIHNoYXBlSW5zaWRlSW5mby0+Y2xlYXJTZWdtZW50cygpOwog
ICAgICAgICByZXR1cm4gbmV4dFNlZ21lbnRCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIHJlbmRl
clRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0
ZWRMaW5lcywgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgfQogCiAgICAgSW5saW5lSXRlcmF0b3Ig
ZW5kID0gcmVzb2x2ZXIucG9zaXRpb24oKTsKICAgICBJbmxpbmVJdGVyYXRvciBvbGRFbmQgPSBl
bmQ7CiAKLSAgICBpZiAoIWV4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby0+aGFzU2VnbWVudHMoKSkg
eworICAgIGlmICghc2hhcGVJbnNpZGVJbmZvLT5oYXNTZWdtZW50cygpKSB7CiAgICAgICAgIGVu
ZCA9IG5leHRTZWdtZW50QnJlYWsocmVzb2x2ZXIsIGxpbmVJbmZvLCByZW5kZXJUZXh0SW5mbywg
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIHdv
cmRNZWFzdXJlbWVudHMpOwogICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbklnbm9yaW5nTmVz
dGVkSXNvbGF0ZXMob2xkRW5kKTsKICAgICAgICAgcmV0dXJuIG9sZEVuZDsKICAgICB9CiAKLSAg
ICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMgPSBleGNsdXNpb25TaGFwZUluc2lkZUluZm8t
PnNlZ21lbnRzKCk7Ci0gICAgU2VnbWVudFJhbmdlTGlzdCYgc2VnbWVudFJhbmdlcyA9IGV4Y2x1
c2lvblNoYXBlSW5zaWRlSW5mby0+c2VnbWVudFJhbmdlcygpOworICAgIGNvbnN0IFNlZ21lbnRM
aXN0JiBzZWdtZW50cyA9IHNoYXBlSW5zaWRlSW5mby0+c2VnbWVudHMoKTsKKyAgICBTZWdtZW50
UmFuZ2VMaXN0JiBzZWdtZW50UmFuZ2VzID0gc2hhcGVJbnNpZGVJbmZvLT5zZWdtZW50UmFuZ2Vz
KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudHMuc2l6ZSgpICYmICFl
bmQuYXRFbmQoKTsgaSsrKSB7CiAgICAgICAgIElubGluZUl0ZXJhdG9yIHNlZ21lbnRTdGFydCA9
IHJlc29sdmVyLnBvc2l0aW9uKCk7CkBAIC0zNDEwLDcgKzM0MDksNyBAQCBJbmxpbmVJdGVyYXRv
ciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRTZWdtZW50QnJlYWsoSW5saW5lQmlkaVJl
c29sdmVyJiByZQogCiAgZW5kOgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIEV4Y2x1c2lv
blNoYXBlSW5zaWRlSW5mbyogc2hhcGVJbmZvID0gbV9ibG9jay0+bGF5b3V0RXhjbHVzaW9uU2hh
cGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluZm8gPSBtX2Jsb2Nr
LT5sYXlvdXRTaGFwZUluc2lkZUluZm8oKTsKICAgICBib29sIHNlZ21lbnRBbGxvd3NPdmVyZmxv
dyA9ICFzaGFwZUluZm8gfHwgIXNoYXBlSW5mby0+aGFzU2VnbWVudHMoKTsKICNlbHNlCiAgICAg
Ym9vbCBzZWdtZW50QWxsb3dzT3ZlcmZsb3cgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAppbmRleCAzMDhiYjg5MTNjZTYxYTA0MWUyNzA2YThhNmFiMzgxNmIyOTMz
N2NlLi40ZjRhNTJlMzZmNDJlOTc5NWI0ZGJlMjM1OWNmZWFhMmNkNjlmMmFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgUmVu
ZGVyQm94Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50
SGVpZ2h0RGVzY2VuZGFudElmTmVlZGVkKHRoaXMpOwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMp
Ci0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbyh0aGlzKTsKKyAgICBT
aGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOwogI2VuZGlmCiAKICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCk7CkBAIC0zMTIsMjIgKzMxMiwyMiBAQCB2
b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQot
ICAgIHVwZGF0ZUV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKHN0eWxl
KCktPnNoYXBlT3V0c2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5zaGFwZU91dHNpZGUoKSA6
IDApOworICAgIHVwZGF0ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKHN0eWxlKCkt
PnNoYXBlT3V0c2lkZSgpLCBvbGRTdHlsZSA/IG9sZFN0eWxlLT5zaGFwZU91dHNpZGUoKSA6IDAp
OwogI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLXZvaWQgUmVuZGVyQm94Ojp1
cGRhdGVFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBFeGNs
dXNpb25TaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFsdWUq
IG9sZFNoYXBlT3V0c2lkZSkKK3ZvaWQgUmVuZGVyQm94Ojp1cGRhdGVTaGFwZU91dHNpZGVJbmZv
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBTaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUsIGNvbnN0IFNo
YXBlVmFsdWUqIG9sZFNoYXBlT3V0c2lkZSkKIHsKICAgICAvLyBGSVhNRTogQSBmdXR1cmUgb3B0
aW1pemF0aW9uIHdvdWxkIGRvIGEgZGVlcCBjb21wYXJpc29uIGZvciBlcXVhbGl0eS4gKGJ1ZyAx
MDA4MTEpCiAgICAgaWYgKHNoYXBlT3V0c2lkZSA9PSBvbGRTaGFwZU91dHNpZGUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChzaGFwZU91dHNpZGUpIHsKLSAgICAgICAgRXhjbHVzaW9uU2hh
cGVPdXRzaWRlSW5mbyogZXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyA9IEV4Y2x1c2lvblNoYXBl
T3V0c2lkZUluZm86OmVuc3VyZUluZm8odGhpcyk7Ci0gICAgICAgIGV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8tPmRpcnR5U2hhcGVTaXplKCk7CisgICAgICAgIFNoYXBlT3V0c2lkZUluZm8qIHNo
YXBlT3V0c2lkZUluZm8gPSBTaGFwZU91dHNpZGVJbmZvOjplbnN1cmVJbmZvKHRoaXMpOworICAg
ICAgICBzaGFwZU91dHNpZGVJbmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOwogICAgIH0gZWxzZQotICAg
ICAgICBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOworICAgICAg
ICBTaGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKHRoaXMpOwogfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCA0NTBlN2MwZDVkYjBiMzhhYjM4MTU5MGY5
OTcwOWJjZTZmNWY3ODUyLi5kMjI4MmU4MzkzMDhjZjY0ZDBiODZhNzcwMGI3ZDE1YmYzYjVmYmIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyT3ZlcmZsb3cuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlT3V0c2lkZUluZm8u
aCIKKyNpbmNsdWRlICJTaGFwZU91dHNpZGVJbmZvLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNTc2LDkgKzU3Niw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1NhbWVEaXJl
Y3Rpb25Bcyhjb25zdCBSZW5kZXJCb3gqIG9iamVjdCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gb2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKTsgfQogCiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCi0gICAgRXhjbHVzaW9uU2hhcGVPdXRzaWRlSW5mbyogZXhjbHVzaW9u
U2hhcGVPdXRzaWRlSW5mbygpIGNvbnN0CisgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRz
aWRlSW5mbygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaXNGbG9hdGluZ1dpdGhTaGFw
ZU91dHNpZGUoKSAmJiBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IodGhp
cykgPyBFeGNsdXNpb25TaGFwZU91dHNpZGVJbmZvOjppbmZvKHRoaXMpIDogMDsKKyAgICAgICAg
cmV0dXJuIGlzRmxvYXRpbmdXaXRoU2hhcGVPdXRzaWRlKCkgJiYgU2hhcGVPdXRzaWRlSW5mbzo6
aXNFbmFibGVkRm9yKHRoaXMpID8gU2hhcGVPdXRzaWRlSW5mbzo6aW5mbyh0aGlzKSA6IDA7CiAg
ICAgfQogI2VuZGlmCiAKQEAgLTYyMyw3ICs2MjMsNyBAQCBwcm90ZWN0ZWQ6CiAgCiBwcml2YXRl
OgogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIHZvaWQgdXBkYXRlRXhjbHVzaW9uU2hhcGVP
dXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgRXhjbHVzaW9uU2hhcGVWYWx1ZSogc2hh
cGVPdXRzaWRlLCBjb25zdCBFeGNsdXNpb25TaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUpOwor
ICAgIHZvaWQgdXBkYXRlU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgU2hh
cGVWYWx1ZSogc2hhcGVPdXRzaWRlLCBjb25zdCBTaGFwZVZhbHVlKiBvbGRTaGFwZU91dHNpZGUp
OwogI2VuZGlmCiAKICAgICBib29sIGZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUo
RnJhbWUqLCBGcmFtZVZpZXcqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDUxYTE3YmNiOTZhN2I2ZDEzNmZmZjg3
YzYzNWJhOWE1NDAwZGQ2OTAuLmM2YmJkYTIwMWY3ZmUwMTIwM2QyZmQ0MmRlM2VkODRiYjUzNWU1
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcApAQCAtNjI2LDcgKzYyNiw3IEBAIExheW91dFNpemUgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50T2Zmc2V0KCkgY29uc3QKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlm
IChpc0JveCgpICYmIGlzRmxvYXRpbmcoKSkKLSAgICAgICAgaWYgKEV4Y2x1c2lvblNoYXBlT3V0
c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IHRvUmVuZGVyQm94KHRoaXMpLT5leGNsdXNpb25TaGFw
ZU91dHNpZGVJbmZvKCkpCisgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNp
ZGUgPSB0b1JlbmRlckJveCh0aGlzKS0+c2hhcGVPdXRzaWRlSW5mbygpKQogICAgICAgICAgICAg
b2Zmc2V0IC09IHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsT2Zmc2V0KCk7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggOThkOTdjMjU4OWNjMDAwYTc2
N2QyN2Y1ZDkwYjdjYjhkMjc0YTE0YS4uODRjMmFiMTA4MTFlMGMyNDFiOWMwOWUwYjBmMmEyYWQ1
MTFkNjBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yNDksOCAr
MjQ5LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgbV9s
YXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IHJl
bmRlcmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAgICAgIHx8IG1fbGF5
b3V0U3RhdGUtPmxpbmVHcmlkKCkgfHwgKHJlbmRlcmVyLT5zdHlsZSgpLT5saW5lR3JpZCgpICE9
IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUdyaWQoKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3co
KSkKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgICAgIHx8IChyZW5kZXJlci0+aXNS
ZW5kZXJCbG9jaygpICYmIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5leGNsdXNpb25TaGFwZUlu
c2lkZUluZm8oKSkKLSAgICAgICAgICAgIHx8IChtX2xheW91dFN0YXRlLT5leGNsdXNpb25TaGFw
ZUluc2lkZUluZm8oKSAmJiByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICF0b1JlbmRlckJs
b2NrKHJlbmRlcmVyKS0+YWxsb3dzRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZvU2hhcmluZygpKQor
ICAgICAgICAgICAgfHwgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgdG9SZW5kZXJCbG9j
ayhyZW5kZXJlciktPnNoYXBlSW5zaWRlSW5mbygpKQorICAgICAgICAgICAgfHwgKG1fbGF5b3V0
U3RhdGUtPnNoYXBlSW5zaWRlSW5mbygpICYmIHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYg
IXRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5hbGxvd3NTaGFwZUluc2lkZUluZm9TaGFyaW5nKCkp
CiAjZW5kaWYKICAgICAgICAgICAgICkgewogICAgICAgICAgICAgcHVzaExheW91dFN0YXRlRm9y
Q3VycmVudEZsb3dUaHJlYWQocmVuZGVyZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyMTI0ZmQ1NjA3MzM1NjNi
NGEwYzg3OGEzODZmZDQ0MGNhNTI4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAKQEAgLTAsMCArMSw1MTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCisKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0g
RWRnZUludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCwKKyAgICBWZXJ0ZXhNaW5ZLAorICAg
IFZlcnRleE1heFksCisgICAgVmVydGV4WUJvdGgKK307CisKK3N0cnVjdCBFZGdlSW50ZXJzZWN0
aW9uIHsKKyAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlOworICAgIEZsb2F0UG9pbnQg
cG9pbnQ7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKK307CisKK3N0YXRpYyBpbmxp
bmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuICgo
cG9pbnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAt
ICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkp
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzUmVmbGV4VmVydGV4KGNvbnN0IEZsb2F0UG9p
bnQmIHByZXZWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCwgY29uc3QgRmxvYXRQb2lu
dCYgbmV4dFZlcnRleCkKK3sKKyAgICByZXR1cm4gbGVmdFNpZGUocHJldlZlcnRleCwgbmV4dFZl
cnRleCwgdmVydGV4KSA8IDA7Cit9CisKK3N0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9u
KGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJz
ZWN0aW9uJiByZXN1bHQpCit7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICpl
ZGdlUG9pbnRlcjsKKworICAgIGlmIChlZGdlLm1pblkoKSA+IHkgfHwgZWRnZS5tYXhZKCkgPCB5
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgx
ID0gZWRnZS52ZXJ0ZXgxKCk7CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2Uu
dmVydGV4MigpOworICAgIGZsb2F0IGR5ID0gdmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKTsKKwor
ICAgIGZsb2F0IGludGVyc2VjdGlvblg7CisgICAgRWRnZUludGVyc2VjdGlvblR5cGUgaW50ZXJz
ZWN0aW9uVHlwZTsKKworICAgIGlmICghZHkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9
IFZlcnRleFlCb3RoOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gZWRnZS5taW5YKCk7CisgICAg
fSBlbHNlIGlmICh5ID09IGVkZ2UubWluWSgpKSB7CisgICAgICAgIGludGVyc2VjdGlvblR5cGUg
PSBWZXJ0ZXhNaW5ZOworICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZlcnRleDEueSgpIDwgdmVy
dGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKKyAgICB9IGVsc2UgaWYgKHkg
PT0gZWRnZS5tYXhZKCkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uVHlwZSA9IFZlcnRleE1heFk7
CisgICAgICAgIGludGVyc2VjdGlvblggPSAodmVydGV4MS55KCkgPiB2ZXJ0ZXgyLnkoKSkgPyB2
ZXJ0ZXgxLngoKSA6IHZlcnRleDIueCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludGVyc2Vj
dGlvblR5cGUgPSBOb3JtYWw7CisgICAgICAgIGludGVyc2VjdGlvblggPSAoKHkgLSB2ZXJ0ZXgx
LnkoKSkgKiAodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgLyBkeSkgKyB2ZXJ0ZXgxLngoKTsK
KyAgICB9CisKKyAgICByZXN1bHQuZWRnZSA9IGVkZ2VQb2ludGVyOworICAgIHJlc3VsdC50eXBl
ID0gaW50ZXJzZWN0aW9uVHlwZTsKKyAgICByZXN1bHQucG9pbnQuc2V0KGludGVyc2VjdGlvblgs
IHkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRTaXplIGlu
d2FyZEVkZ2VOb3JtYWwoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSkKK3sKKyAgICBGbG9h
dFNpemUgZWRnZURlbHRhID0gZWRnZS52ZXJ0ZXgyKCkgLSBlZGdlLnZlcnRleDEoKTsKKyAgICBp
ZiAoIWVkZ2VEZWx0YS53aWR0aCgpKQorICAgICAgICByZXR1cm4gRmxvYXRTaXplKChlZGdlRGVs
dGEuaGVpZ2h0KCkgPiAwID8gLTEgOiAxKSwgMCk7CisgICAgaWYgKCFlZGdlRGVsdGEuaGVpZ2h0
KCkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoMCwgKGVkZ2VEZWx0YS53aWR0aCgpID4gMCA/
IDEgOiAtMSkpOworICAgIGZsb2F0IGVkZ2VMZW5ndGggPSBlZGdlRGVsdGEuZGlhZ29uYWxMZW5n
dGgoKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKC1lZGdlRGVsdGEuaGVpZ2h0KCkgLyBlZGdlTGVu
Z3RoLCBlZGdlRGVsdGEud2lkdGgoKSAvIGVkZ2VMZW5ndGgpOworfQorCitzdGF0aWMgaW5saW5l
IEZsb2F0U2l6ZSBvdXR3YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdl
KQoreworICAgIHJldHVybiAtaW53YXJkRWRnZU5vcm1hbChlZGdlKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFwcGVuZEFyYyhWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzLCBjb25zdCBG
bG9hdFBvaW50JiBhcmNDZW50ZXIsIGZsb2F0IGFyY1JhZGl1cywgY29uc3QgRmxvYXRQb2ludCYg
c3RhcnRBcmNWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZEFyY1ZlcnRleCwgYm9vbCBwYWRk
aW5nKQoreworICAgIGZsb2F0IHN0YXJ0QW5nbGUgPSBhdGFuMihzdGFydEFyY1ZlcnRleC55KCkg
LSBhcmNDZW50ZXIueSgpLCBzdGFydEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKKyAg
ICBmbG9hdCBlbmRBbmdsZSA9IGF0YW4yKGVuZEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgp
LCBlbmRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7CisgICAgY29uc3QgZmxvYXQgdHdv
UEkgPSBwaUZsb2F0ICogMjsKKyAgICBpZiAoc3RhcnRBbmdsZSA8IDApCisgICAgICAgIHN0YXJ0
QW5nbGUgKz0gdHdvUEk7CisgICAgaWYgKGVuZEFuZ2xlIDwgMCkKKyAgICAgICAgZW5kQW5nbGUg
Kz0gdHdvUEk7CisgICAgZmxvYXQgYW5nbGUgPSAoc3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSA/IChz
dGFydEFuZ2xlIC0gZW5kQW5nbGUpIDogKHN0YXJ0QW5nbGUgKyB0d29QSSAtIGVuZEFuZ2xlKTsK
KyAgICBjb25zdCBmbG9hdCBhcmNTZWdtZW50Q291bnQgPSA2OyAvLyBBbiBldmVuIG51bWJlciBz
byB0aGF0IG9uZSBhcmMgdmVydGV4IHdpbGwgYmUgZWFjdGx5IGFyY1JhZGl1cyBmcm9tIGFyY0Nl
bnRlci4KKyAgICBmbG9hdCBhcmNTZWdtZW50QW5nbGUgPSAgKChwYWRkaW5nKSA/IC1hbmdsZSA6
IHR3b1BJIC0gYW5nbGUpIC8gYXJjU2VnbWVudENvdW50OworCisgICAgdmVydGljZXMuYXBwZW5k
KHN0YXJ0QXJjVmVydGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJjU2VnbWVu
dENvdW50OyArK2kpIHsKKyAgICAgICAgZmxvYXQgYW5nbGUgPSBzdGFydEFuZ2xlICsgYXJjU2Vn
bWVudEFuZ2xlICogaTsKKyAgICAgICAgdmVydGljZXMuYXBwZW5kKGFyY0NlbnRlciArIEZsb2F0
UG9pbnQoY29zKGFuZ2xlKSAqIGFyY1JhZGl1cywgc2luKGFuZ2xlKSAqIGFyY1JhZGl1cykpOwor
ICAgIH0KKyAgICB2ZXJ0aWNlcy5hcHBlbmQoZW5kQXJjVmVydGV4KTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoVmVjdG9yPEZsb2F0UG9pbnQ+
JiB2ZXJ0aWNlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVydGljZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIHZlcnRpY2VzW2ldLnNldChMYXlvdXRVbml0KHZlcnRpY2VzW2ld
LngoKSkudG9GbG9hdCgpLCBMYXlvdXRVbml0KHZlcnRpY2VzW2ldLnkoKSkudG9GbG9hdCgpKTsK
K30KKworc3RhdGljIGlubGluZSBQYXNzT3duUHRyPEZsb2F0UG9seWdvbj4gY29tcHV0ZVNoYXBl
UGFkZGluZ0JvdW5kcyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHBhZGRpbmcs
IFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBw
YWRkZWRWZXJ0aWNlcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKSk7CisgICAg
RmxvYXRQb2ludCBpbnRlcnNlY3Rpb247CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cG9seWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsraSkgeworICAgICAgICBjb25zdCBGbG9hdFBvbHln
b25FZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24uZWRnZUF0KGkpOworICAgICAgICBjb25zdCBGbG9h
dFBvbHlnb25FZGdlJiBwcmV2RWRnZSA9IHRoaXNFZGdlLnByZXZpb3VzRWRnZSgpOworICAgICAg
ICBPZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zmc2V0RWRnZSh0aGlzRWRnZSwgaW53YXJkRWRnZU5v
cm1hbCh0aGlzRWRnZSkgKiBwYWRkaW5nKTsKKyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJl
dk9mZnNldEVkZ2UocHJldkVkZ2UsIGlud2FyZEVkZ2VOb3JtYWwocHJldkVkZ2UpICogcGFkZGlu
Zyk7CisKKyAgICAgICAgaWYgKHByZXZPZmZzZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0
RWRnZSwgaW50ZXJzZWN0aW9uKSkKKyAgICAgICAgICAgIHBhZGRlZFZlcnRpY2VzLT5hcHBlbmQo
aW50ZXJzZWN0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAoaXNSZWZsZXhWZXJ0ZXgocHJldkVkZ2Uu
dmVydGV4MSgpLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHRoaXNFZGdlLnZlcnRleDIoKSkpCisgICAg
ICAgICAgICBhcHBlbmRBcmMoKnBhZGRlZFZlcnRpY2VzLCB0aGlzRWRnZS52ZXJ0ZXgxKCksIHBh
ZGRpbmcsIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVydGV4MSgp
LCB0cnVlKTsKKyAgICB9CisKKyAgICBzbmFwVmVydGljZXNUb0xheW91dFVuaXRHcmlkKCpwYWRk
ZWRWZXJ0aWNlcyk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGbG9hdFBvbHlnb24ocGFkZGVk
VmVydGljZXMucmVsZWFzZSgpLCBmaWxsUnVsZSkpOworfQorCitzdGF0aWMgaW5saW5lIFBhc3NP
d25QdHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hhcGVNYXJnaW5Cb3VuZHMoY29uc3QgRmxvYXRQ
b2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtYXJnaW4sIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAg
IE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtYXJnaW5WZXJ0aWNlcyA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8RmxvYXRQb2ludD4oKSk7CisgICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb247CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seWdvbi5udW1iZXJPZkVkZ2VzKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9IHBvbHlnb24u
ZWRnZUF0KGkpOworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2RWRnZSA9IHRo
aXNFZGdlLnByZXZpb3VzRWRnZSgpOworICAgICAgICBPZmZzZXRQb2x5Z29uRWRnZSB0aGlzT2Zm
c2V0RWRnZSh0aGlzRWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwodGhpc0VkZ2UpICogbWFyZ2luKTsK
KyAgICAgICAgT2Zmc2V0UG9seWdvbkVkZ2UgcHJldk9mZnNldEVkZ2UocHJldkVkZ2UsIG91dHdh
cmRFZGdlTm9ybWFsKHByZXZFZGdlKSAqIG1hcmdpbik7CisKKyAgICAgICAgaWYgKHByZXZPZmZz
ZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9uKSkKKyAgICAg
ICAgICAgIG1hcmdpblZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYXBwZW5kQXJjKCptYXJnaW5WZXJ0aWNlcywgdGhpc0VkZ2UudmVydGV4
MSgpLCBtYXJnaW4sIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2UudmVy
dGV4MSgpLCBmYWxzZSk7CisgICAgfQorCisgICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0R3Jp
ZCgqbWFyZ2luVmVydGljZXMpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRQb2x5Z29u
KG1hcmdpblZlcnRpY2VzLnJlbGVhc2UoKSwgZmlsbFJ1bGUpKTsKK30KKworY29uc3QgRmxvYXRQ
b2x5Z29uJiBQb2x5Z29uU2hhcGU6OnNoYXBlUGFkZGluZ0JvdW5kcygpIGNvbnN0Cit7CisgICAg
QVNTRVJUKHNoYXBlUGFkZGluZygpID49IDApOworICAgIGlmICghc2hhcGVQYWRkaW5nKCkpCisg
ICAgICAgIHJldHVybiBtX3BvbHlnb247CisKKyAgICBpZiAoIW1fcGFkZGluZ0JvdW5kcykKKyAg
ICAgICAgbV9wYWRkaW5nQm91bmRzID0gY29tcHV0ZVNoYXBlUGFkZGluZ0JvdW5kcyhtX3BvbHln
b24sIHNoYXBlUGFkZGluZygpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7CisKKyAgICByZXR1cm4g
Km1fcGFkZGluZ0JvdW5kczsKK30KKworY29uc3QgRmxvYXRQb2x5Z29uJiBQb2x5Z29uU2hhcGU6
OnNoYXBlTWFyZ2luQm91bmRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2hhcGVNYXJnaW4oKSA+
PSAwKTsKKyAgICBpZiAoIXNoYXBlTWFyZ2luKCkpCisgICAgICAgIHJldHVybiBtX3BvbHlnb247
CisKKyAgICBpZiAoIW1fbWFyZ2luQm91bmRzKQorICAgICAgICBtX21hcmdpbkJvdW5kcyA9IGNv
bXB1dGVTaGFwZU1hcmdpbkJvdW5kcyhtX3BvbHlnb24sIHNoYXBlTWFyZ2luKCksIG1fcG9seWdv
bi5maWxsUnVsZSgpKTsKKworICAgIHJldHVybiAqbV9tYXJnaW5Cb3VuZHM7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyhjb25zdCBFZGdlSW50
ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24sIEZsb2F0UG9pbnQmIHByZXZWZXJ0ZXgsIEZsb2F0UG9p
bnQmIHRoaXNWZXJ0ZXgsIEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCit7CisgICAgaWYgKGludGVy
c2VjdGlvbi50eXBlICE9IFZlcnRleE1pblkgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4
TWF4WSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGludGVyc2VjdGlvbi5l
ZGdlICYmIGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0IEZsb2F0UG9s
eWdvbiYgcG9seWdvbiA9ICooaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKKwor
ICAgIGlmICgoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVy
dGV4MSgpLnkoKSA8IHRoaXNFZGdlLnZlcnRleDIoKS55KCkpKQorICAgICAgICB8fCAoaW50ZXJz
ZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRo
aXNFZGdlLnZlcnRleDIoKS55KCkpKSkgeworICAgICAgICBwcmV2VmVydGV4ID0gcG9seWdvbi52
ZXJ0ZXhBdCh0aGlzRWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXhJbmRleDEoKSk7CisgICAgICAg
IHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsK
KyAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5k
ZXgyKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRl
eEF0KHRoaXNFZGdlLnZlcnRleEluZGV4MSgpKTsKKyAgICAgICAgdGhpc1ZlcnRleCA9IHBvbHln
b24udmVydGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgyKCkpOworICAgICAgICBuZXh0VmVydGV4
ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS5uZXh0RWRnZSgpLnZlcnRleEluZGV4MigpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFwcGVu
ZEludGVydmFsWChmbG9hdCB4LCBib29sIGluc2lkZSwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBy
ZXN1bHQpCit7CisgICAgaWYgKCFpbnNpZGUpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoU2hhcGVJ
bnRlcnZhbCh4KSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUoKSAtIDFd
LngyID0geDsKKworICAgIHJldHVybiAhaW5zaWRlOworfQorCitzdGF0aWMgYm9vbCBjb21wYXJl
RWRnZUludGVyc2VjdGlvblgoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMSwg
Y29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0aW9uMikKK3sKKyAgICBmbG9hdCB4MSA9
IGludGVyc2VjdGlvbjEucG9pbnQueCgpOworICAgIGZsb2F0IHgyID0gaW50ZXJzZWN0aW9uMi5w
b2ludC54KCk7CisgICAgcmV0dXJuICh4MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5cGUgPCBp
bnRlcnNlY3Rpb24yLnR5cGUgOiB4MSA8IHgyOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlWElu
dGVyc2VjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlz
TWluWSwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgVmVjdG9yPGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdF
ZGdlcyh5LCB5LCBlZGdlcykpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxFZGdlSW50
ZXJzZWN0aW9uPiBpbnRlcnNlY3Rpb25zOworICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0
aW9uOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZXNbaV0sIHksIGludGVyc2VjdGlv
bikgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4WUJvdGgpCisgICAgICAgICAgICBpbnRl
cnNlY3Rpb25zLmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAgIH0KKworICAgIGlmIChpbnRlcnNl
Y3Rpb25zLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6c29ydChpbnRl
cnNlY3Rpb25zLmJlZ2luKCksIGludGVyc2VjdGlvbnMuZW5kKCksIFdlYkNvcmU6OmNvbXBhcmVF
ZGdlSW50ZXJzZWN0aW9uWCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgaW50IHdp
bmRDb3VudCA9IDA7CisgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKKworICAgIHdoaWxlIChpbmRl
eCA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rp
b24mIHRoaXNJbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zW2luZGV4XTsKKyAgICAgICAgaWYg
KGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBF
ZGdlSW50ZXJzZWN0aW9uJiBuZXh0SW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uc1tpbmRleCAr
IDFdOworICAgICAgICAgICAgaWYgKCh0aGlzSW50ZXJzZWN0aW9uLnBvaW50LngoKSA9PSBuZXh0
SW50ZXJzZWN0aW9uLnBvaW50LngoKSkgJiYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0
ZXhNaW5ZIHx8IHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZKSkgeworICAgICAg
ICAgICAgICAgIGlmICh0aGlzSW50ZXJzZWN0aW9uLnR5cGUgPT0gbmV4dEludGVyc2VjdGlvbi50
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgcGFpcnMgb2YgaW50ZXJzZWN0aW9u
cyB3aG9zZSB0eXBlcyBhcmUgVmVydGV4TWF4WSxWZXJ0ZXhNYXhZIGFuZCBWZXJ0ZXhNaW5ZLFZl
cnRleE1pblkuCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwYWlycyBvZiBpbnRl
cnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNaW5ZLFZlcnRleE1heFkgb3IgVmVydGV4
TWF4WSxWZXJ0ZXhNaW5ZIHdpdGggb25lIGludGVyc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25F
ZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVkZ2U7CisgICAgICAgIGJvb2wgZXZl
bk9kZENyb3NzaW5nID0gIXdpbmRDb3VudDsKKworICAgICAgICBpZiAocG9seWdvbi5maWxsUnVs
ZSgpID09IFJVTEVfRVZFTk9ERCkgeworICAgICAgICAgICAgd2luZENvdW50ICs9ICh0aGlzRWRn
ZS52ZXJ0ZXgyKCkueSgpID4gdGhpc0VkZ2UudmVydGV4MSgpLnkoKSkgPyAxIDogLTE7CisgICAg
ICAgICAgICBldmVuT2RkQ3Jvc3NpbmcgPSBldmVuT2RkQ3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChldmVuT2RkQ3Jvc3NpbmcpIHsKKyAgICAgICAgICAg
IGJvb2wgZWRnZUNyb3NzaW5nID0gdGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbDsKKyAg
ICAgICAgICAgIGlmICghZWRnZUNyb3NzaW5nKSB7CisgICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCBwcmV2VmVydGV4OworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgdGhpc1ZlcnRleDsKKyAg
ICAgICAgICAgICAgICBGbG9hdFBvaW50IG5leHRWZXJ0ZXg7CisKKyAgICAgICAgICAgICAgICBp
ZiAoZ2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXModGhpc0ludGVyc2VjdGlvbiwgcHJldlZl
cnRleCwgdGhpc1ZlcnRleCwgbmV4dFZlcnRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5leHRWZXJ0ZXgueSgpID09IHkpCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3Np
bmcgPSAoaXNNaW5ZKSA/IHByZXZWZXJ0ZXgueSgpID4geSA6IHByZXZWZXJ0ZXgueSgpIDwgeTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJldlZlcnRleC55KCkgPT0geSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gbmV4dFZlcnRleC55
KCkgPiB5IDogbmV4dFZlcnRleC55KCkgPCB5OworICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBlZGdlQ3Jvc3NpbmcgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlZGdlQ3Jvc3NpbmcpCisgICAg
ICAgICAgICAgICAgaW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ucG9p
bnQueCgpLCBpbnNpZGUsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICArK2luZGV4Owor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9u
cyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9y
PFNoYXBlSW50ZXJ2YWw+JiByZXN1bHQpCit7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5MSwgeTIs
IGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNl
Y3Rpb247CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tpXTsKKyAgICAg
ICAgZmxvYXQgeDE7CisgICAgICAgIGZsb2F0IHgyOworCisgICAgICAgIGlmIChlZGdlLT5taW5Z
KCkgPCB5MSkgeworICAgICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwgeTEsIGlu
dGVyc2VjdGlvbik7CisgICAgICAgICAgICB4MSA9IGludGVyc2VjdGlvbi5wb2ludC54KCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeDEgPSAoZWRnZS0+dmVydGV4MSgpLnkoKSA8IGVk
Z2UtPnZlcnRleDIoKS55KCkpID8gZWRnZS0+dmVydGV4MSgpLngoKSA6IGVkZ2UtPnZlcnRleDIo
KS54KCk7CisKKyAgICAgICAgaWYgKGVkZ2UtPm1heFkoKSA+IHkyKSB7CisgICAgICAgICAgICBj
b21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MiwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAg
IHgyID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICB4MiA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpID4gZWRnZS0+dmVydGV4MigpLnkoKSkgPyBlZGdl
LT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsKKworICAgICAgICBpZiAoeDEg
PiB4MikKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIpOworCisgICAgICAgIGlmICh4MiA+
IHgxKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChTaGFwZUludGVydmFsKHgxLCB4MikpOwor
ICAgIH0KKworICAgIHNvcnRTaGFwZUludGVydmFscyhyZXN1bHQpOworfQorCit2b2lkIFBvbHln
b25TaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit7CisgICAg
Y29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKKyAgICBp
ZiAocG9seWdvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0g
bG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0Owor
CisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzOwor
ICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxz
KTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMocG9seWdvbiwgeTIsIGZhbHNlLCB5MlhJbnRl
cnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IG1lcmdlZEludGVydmFsczsKKyAg
ICBtZXJnZVNoYXBlSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxzLCBtZXJnZWRJ
bnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Cisg
ICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5MSwgeTIsIGVk
Z2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGV4Y2x1ZGVkSW50ZXJ2
YWxzOworICAgIG1lcmdlU2hhcGVJbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2
YWxzLCBleGNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXhjbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU2hhcGVJbnRlcnZhbCBp
bnRlcnZhbCA9IGV4Y2x1ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1bHQuYXBwZW5kKExp
bmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOworICAgIH0KK30KKwordm9pZCBQ
b2x5Z29uU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAorewor
ICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOwor
ICAgIGlmIChwb2x5Z29uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQg
eTEgPSBsb2dpY2FsVG9wOworICAgIGZsb2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWln
aHQ7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZh
bHM7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRl
cnZhbHMpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhwb2x5Z29uLCB5MiwgZmFsc2UsIHky
WEludGVydmFscyk7CisKKyAgICBWZWN0b3I8U2hhcGVJbnRlcnZhbD4gY29tbW9uSW50ZXJ2YWxz
OworICAgIGludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxz
LCBjb21tb25JbnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGVkZ2VJbnRl
cnZhbHM7CisgICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhwb2x5Z29uLCB5
MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IGluY2x1
ZGVkSW50ZXJ2YWxzOworICAgIHN1YnRyYWN0U2hhcGVJbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxz
LCBlZGdlSW50ZXJ2YWxzLCBpbmNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaW5jbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU2hh
cGVJbnRlcnZhbCBpbnRlcnZhbCA9IGluY2x1ZGVkSW50ZXJ2YWxzW2ldOworICAgICAgICByZXN1
bHQuYXBwZW5kKExpbmVTZWdtZW50KGludGVydmFsLngxLCBpbnRlcnZhbC54MikpOworICAgIH0K
K30KKworc3RhdGljIGlubGluZSBib29sIGZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9h
dFBvbHlnb24mIHBvbHlnb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5zaWduZWQgb2Zmc2V0
RWRnZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MikKK3sKKyAgICBWZWN0b3I8Y29u
c3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGlu
Z0VkZ2VzKHJlY3QueSgpLCByZWN0Lm1heFkoKSwgZWRnZXMpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAg
IGlmIChlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJ
bmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgYWJvdmVPclRvVGhlTGVmdChjb25zdCBGbG9hdFJlY3QmIHIx
LCBjb25zdCBGbG9hdFJlY3QmIHIyKQoreworICAgIGlmIChyMS55KCkgPCByMi55KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChyMS55KCkgPT0gcjIueSgpKQorICAgICAgICByZXR1
cm4gcjEueCgpIDwgcjIueCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQb2x5Z29u
U2hhcGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dp
Y2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUs
IExheW91dFVuaXQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9
IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcDsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1p
bkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0
aCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsKKworICAgIGNvbnN0IEZsb2F0UG9s
eWdvbiYgcG9seWdvbiA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOworICAgIGNvbnN0IEZsb2F0UmVj
dCBib3VuZGluZ0JveCA9IHBvbHlnb24uYm91bmRpbmdCb3goKTsKKyAgICBpZiAobWluSW50ZXJ2
YWxXaWR0aCA+IGJvdW5kaW5nQm94LndpZHRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChib3VuZGluZ0JveC55KCksIG1pbkludGVydmFsVG9w
KTsKKyAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0OworCisgICAgaWYg
KG1heFkgPiBib3VuZGluZ0JveC5tYXhZKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgcG9seWdvbi5vdmVy
bGFwcGluZ0VkZ2VzKG1pbkludGVydmFsVG9wLCBib3VuZGluZ0JveC5tYXhZKCksIGVkZ2VzKTsK
KworICAgIGZsb2F0IGR4ID0gbWluSW50ZXJ2YWxXaWR0aCAvIDI7CisgICAgZmxvYXQgZHkgPSBt
aW5JbnRlcnZhbEhlaWdodCAvIDI7CisgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZz
ZXRFZGdlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKihlZGdlc1tpXSk7
CisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDAgPSBlZGdlLnByZXZpb3VzRWRnZSgp
LnZlcnRleDEoKTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVy
dGV4MSgpOworICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgy
KCk7CisgICAgICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZUJ1ZmZlcjsK
KworICAgICAgICBpZiAodmVydGV4Mi55KCkgPiB2ZXJ0ZXgxLnkoKSA/IHZlcnRleDIueCgpID49
IHZlcnRleDEueCgpIDogdmVydGV4MS54KCkgPj0gdmVydGV4Mi54KCkpIHsKKyAgICAgICAgICAg
IG9mZnNldEVkZ2VCdWZmZXIuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZsb2F0U2l6
ZShkeCwgLWR5KSkpOworICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0
UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgZHkpKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBvZmZzZXRFZGdlQnVmZmVyLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZShl
ZGdlLCBGbG9hdFNpemUoZHgsIGR5KSkpOworICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5h
cHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoZWRnZSwgRmxvYXRTaXplKC1keCwgLWR5KSkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzUmVmbGV4VmVydGV4KHZlcnRleDAsIHZlcnRleDEsIHZl
cnRleDIpKSB7CisgICAgICAgICAgICBpZiAodmVydGV4Mi54KCkgPD0gdmVydGV4MS54KCkgJiYg
dmVydGV4MC54KCkgPD0gdmVydGV4MS54KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1
ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKGR4LCAtZHkp
LCBGbG9hdFNpemUoZHgsIGR5KSkpOworICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi54KCkg
Pj0gdmVydGV4MS54KCkgJiYgdmVydGV4MC54KCkgPj0gdmVydGV4MS54KCkpCisgICAgICAgICAg
ICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwg
RmxvYXRTaXplKC1keCwgLWR5KSwgRmxvYXRTaXplKC1keCwgZHkpKSk7CisgICAgICAgICAgICBp
ZiAodmVydGV4Mi55KCkgPD0gdmVydGV4MS55KCkgJiYgdmVydGV4MC55KCkgPD0gdmVydGV4MS55
KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5hcHBlbmQoT2Zmc2V0UG9seWdv
bkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgZHkpLCBGbG9hdFNpemUoZHgsIGR5KSkpOwor
ICAgICAgICAgICAgZWxzZSBpZiAodmVydGV4Mi55KCkgPj0gdmVydGV4MS55KCkgJiYgdmVydGV4
MC55KCkgPj0gdmVydGV4MS55KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0RWRnZUJ1ZmZlci5h
cHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UodmVydGV4MSwgRmxvYXRTaXplKC1keCwgLWR5KSwgRmxv
YXRTaXplKGR4LCAtZHkpKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgb2Zmc2V0RWRnZUJ1ZmZlci5zaXplKCk7ICsraikKKyAgICAgICAgICAgIGlmIChv
ZmZzZXRFZGdlQnVmZmVyW2pdLm1heFkoKSA+PSBtaW5ZKQorICAgICAgICAgICAgICAgIG9mZnNl
dEVkZ2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pdKTsKKyAgICB9CisKKyAgICBvZmZzZXRF
ZGdlcy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UocG9seWdvbiwgbWluSW50ZXJ2YWxUb3AsIEZs
b2F0U2l6ZSgwLCBkeSkpKTsKKworICAgIEZsb2F0UG9pbnQgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rp
b247CisgICAgRmxvYXRSZWN0IGZpcnN0Rml0UmVjdDsKKyAgICBib29sIGZpcnN0Rml0Rm91bmQg
PSBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvZmZzZXRFZGdlcy5zaXpl
KCkgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBvZmZz
ZXRFZGdlcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgaWYgKG9mZnNldEVkZ2VzW2ldLmlu
dGVyc2VjdGlvbihvZmZzZXRFZGdlc1tqXSwgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pKSB7Cisg
ICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uKG9mZnNl
dEVkZ2VzSW50ZXJzZWN0aW9uLngoKSAtIGR4LCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbi55KCkg
LSBkeSk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZpcnN0Rml0UmVjdChw
b3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplKTsKKyAgICAg
ICAgICAgICAgICBpZiAoKG9mZnNldEVkZ2VzW2ldLmJhc2lzKCkgPT0gT2Zmc2V0UG9seWdvbkVk
Z2U6OkxpbmVUb3AKKyAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0RWRnZXNbal0uYmFzaXMo
KSA9PSBPZmZzZXRQb2x5Z29uRWRnZTo6TGluZVRvcAorICAgICAgICAgICAgICAgICAgICB8fCBw
b3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLnkoKSA+PSBtaW5JbnRlcnZhbFRvcCkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgKCFmaXJzdEZpdEZvdW5kIHx8IGFib3ZlT3JUb1RoZUxlZnQocG90ZW50
aWFsRmlyc3RGaXRSZWN0LCBmaXJzdEZpdFJlY3QpKQorICAgICAgICAgICAgICAgICAgICAmJiBw
b2x5Z29uLmNvbnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKQorICAgICAgICAgICAgICAg
ICAgICAmJiBmaXJzdEZpdFJlY3RJblBvbHlnb24ocG9seWdvbiwgcG90ZW50aWFsRmlyc3RGaXRS
ZWN0LCBvZmZzZXRFZGdlc1tpXS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0uZWRnZUluZGV4
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0Rm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBmaXJzdEZpdFJlY3QgPSBwb3RlbnRpYWxGaXJzdEZpdFJlY3Q7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGZpcnN0Rml0Rm91bmQpCisgICAgICAgIHJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQoZmlyc3RG
aXRSZWN0LnkoKSk7CisgICAgcmV0dXJuIGZpcnN0Rml0Rm91bmQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
UG9seWdvblNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25T
aGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYyOGFjM2FkZDA2NTZkNjczYjEyN2Q2ODg4YmYwZTg2MDJiNjE4
MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Bv
bHlnb25TaGFwZS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQb2x5Z29uU2hh
cGVfaAorI2RlZmluZSBQb2x5Z29uU2hhcGVfaAorCisjaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgi
CisjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgT2Zmc2V0UG9seWdvbkVkZ2UgOiBwdWJsaWMgVmVydGV4
UGFpciB7CitwdWJsaWM6CisgICAgZW51bSBCYXNpcyB7CisgICAgICAgIEVkZ2UsCisgICAgICAg
IFZlcnRleCwKKyAgICAgICAgTGluZVRvcAorICAgIH07CisKKyAgICBPZmZzZXRQb2x5Z29uRWRn
ZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkK
KyAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgxKCkgKyBvZmZzZXQpCisgICAgICAgICwg
bV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0KQorICAgICAgICAsIG1fZWRnZUluZGV4
KGVkZ2UuZWRnZUluZGV4KCkpCisgICAgICAgICwgbV9iYXNpcyhFZGdlKQorICAgIHsKKyAgICB9
CisKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvaW50JiByZWZsZXhWZXJ0ZXgs
IGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0MSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQyKQorICAg
ICAgICA6IG1fdmVydGV4MShyZWZsZXhWZXJ0ZXggKyBvZmZzZXQxKQorICAgICAgICAsIG1fdmVy
dGV4MihyZWZsZXhWZXJ0ZXggKyBvZmZzZXQyKQorICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQor
ICAgICAgICAsIG1fYmFzaXMoVmVydGV4KQorICAgIHsKKyAgICB9CisKKyAgICBPZmZzZXRQb2x5
Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRl
cnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAgICAgIDogbV92ZXJ0ZXgxKEZs
b2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLngoKSwgbWluTG9naWNhbEludGVydmFsVG9w
KSArIG9mZnNldCkKKyAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5k
aW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQorICAgICAg
ICAsIG1fZWRnZUluZGV4KC0xKQorICAgICAgICAsIG1fYmFzaXMoTGluZVRvcCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgxOyB9CisgICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50
JiB2ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXgyOyB9CisgICAgaW50
IGVkZ2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9CisgICAgQmFzaXMgYmFz
aXMoKSBjb25zdCB7IHJldHVybiBtX2Jhc2lzOyB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRQb2lu
dCBtX3ZlcnRleDE7CisgICAgRmxvYXRQb2ludCBtX3ZlcnRleDI7CisgICAgaW50IG1fZWRnZUlu
ZGV4OworICAgIEJhc2lzIG1fYmFzaXM7Cit9OworCitjbGFzcyBQb2x5Z29uU2hhcGUgOiBwdWJs
aWMgU2hhcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHlnb25TaGFwZSk7CitwdWJs
aWM6CisgICAgUG9seWdvblNoYXBlKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVy
dGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQorICAgICAgICA6IFNoYXBlKCkKKyAgICAgICAgLCBt
X3BvbHlnb24odmVydGljZXMsIGZpbGxSdWxlKQorICAgICAgICAsIG1fbWFyZ2luQm91bmRzKG51
bGxwdHIpCisgICAgICAgICwgbV9wYWRkaW5nQm91bmRzKG51bGxwdHIpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFy
Z2luQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hh
cGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8TGF5b3V0UmVjdD4oc2hhcGVQYWRkaW5nQm91bmRzKCkuYm91bmRpbmdCb3goKSk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
cG9seWdvbi5pc0VtcHR5KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZh
bHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21l
bnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50
ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBT
ZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaXJzdEluY2x1
ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBj
b25zdCBMYXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29u
c3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgY29uc3QgRmxvYXRQb2x5Z29uJiBzaGFwZU1h
cmdpbkJvdW5kcygpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgc2hhcGVQYWRkaW5n
Qm91bmRzKCkgY29uc3Q7CisKKyAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOworICAgIG11dGFi
bGUgT3duUHRyPEZsb2F0UG9seWdvbj4gbV9tYXJnaW5Cb3VuZHM7CisgICAgbXV0YWJsZSBPd25Q
dHI8RmxvYXRQb2x5Z29uPiBtX3BhZGRpbmdCb3VuZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBQb2x5Z29uU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTI3ZmNm
YTcyYWYzYzkzMDA1NWU1OTNiOWY1NGM3NDdhNDE3MGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5jcHAKQEAgLTAsMCAr
MSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAq
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVjdGFuZ2xl
U2hhcGUuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5LCBm
bG9hdCByeCwgZmxvYXQgcnkpCit7CisgICAgQVNTRVJUKHJ5ID4gMCk7CisgICAgcmV0dXJuIHJ4
ICogc3FydCgxIC0gKHkgKiB5KSAvIChyeSAqIHJ5KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgZWxsaXBzZVlJbnRlcmNlcHQoZmxvYXQgeCwgZmxvYXQgcngsIGZsb2F0IHJ5KQoreworICAg
IEFTU0VSVChyeCA+IDApOworICAgIHJldHVybiByeSAqIHNxcnQoMSAtICh4ICogeCkgLyAocngg
KiByeCkpOworfQorCitGbG9hdFJvdW5kZWRSZWN0IEZsb2F0Um91bmRlZFJlY3Q6OnBhZGRpbmdC
b3VuZHMoZmxvYXQgcGFkZGluZykgY29uc3QKK3sKKyAgICBBU1NFUlQocGFkZGluZyA+PSAwKTsK
KyAgICBpZiAoIXBhZGRpbmcgfHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisK
KyAgICBmbG9hdCBib3VuZHNYID0geCgpICsgc3RkOjptaW4od2lkdGgoKSAvIDIsIHBhZGRpbmcp
OworICAgIGZsb2F0IGJvdW5kc1kgPSB5KCkgKyBzdGQ6Om1pbihoZWlnaHQoKSAvIDIsIHBhZGRp
bmcpOworICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gc3RkOjptYXgoMC4wZiwgd2lkdGgoKSAtIHBh
ZGRpbmcgKiAyKTsKKyAgICBmbG9hdCBib3VuZHNIZWlnaHQgPSBzdGQ6Om1heCgwLjBmLCBoZWln
aHQoKSAtIHBhZGRpbmcgKiAyKTsKKyAgICBmbG9hdCBib3VuZHNSYWRpdXNYID0gc3RkOjptYXgo
MC4wZiwgcngoKSAtIHBhZGRpbmcpOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1kgPSBzdGQ6Om1h
eCgwLjBmLCByeSgpIC0gcGFkZGluZyk7CisgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QoRmxv
YXRSZWN0KGJvdW5kc1gsIGJvdW5kc1ksIGJvdW5kc1dpZHRoLCBib3VuZHNIZWlnaHQpLCBGbG9h
dFNpemUoYm91bmRzUmFkaXVzWCwgYm91bmRzUmFkaXVzWSkpOworfQorCitGbG9hdFJvdW5kZWRS
ZWN0IEZsb2F0Um91bmRlZFJlY3Q6Om1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1hcmdpbiA+PSAwKTsKKyAgICBpZiAoIW1hcmdpbikKKyAgICAgICAgcmV0
dXJuICp0aGlzOworCisgICAgZmxvYXQgYm91bmRzWCA9IHgoKSAtIG1hcmdpbjsKKyAgICBmbG9h
dCBib3VuZHNZID0geSgpIC0gbWFyZ2luOworICAgIGZsb2F0IGJvdW5kc1dpZHRoID0gd2lkdGgo
KSArIG1hcmdpbiAqIDI7CisgICAgZmxvYXQgYm91bmRzSGVpZ2h0ID0gaGVpZ2h0KCkgKyBtYXJn
aW4gKiAyOworICAgIGZsb2F0IGJvdW5kc1JhZGl1c1ggPSByeCgpICsgbWFyZ2luOworICAgIGZs
b2F0IGJvdW5kc1JhZGl1c1kgPSByeSgpICsgbWFyZ2luOworICAgIHJldHVybiBGbG9hdFJvdW5k
ZWRSZWN0KEZsb2F0UmVjdChib3VuZHNYLCBib3VuZHNZLCBib3VuZHNXaWR0aCwgYm91bmRzSGVp
Z2h0KSwgRmxvYXRTaXplKGJvdW5kc1JhZGl1c1gsIGJvdW5kc1JhZGl1c1kpKTsKK30KKworRmxv
YXRQb2ludCBGbG9hdFJvdW5kZWRSZWN0Ojpjb3JuZXJJbnRlcmNlcHRGb3JXaWR0aChmbG9hdCB3
aWR0aEF0SW50ZXJjZXB0KSBjb25zdAoreworICAgIGZsb2F0IHhpID0gKHdpZHRoKCkgLSB3aWR0
aEF0SW50ZXJjZXB0KSAvIDI7CisgICAgZmxvYXQgeWkgPSByeSgpIC0gZWxsaXBzZVlJbnRlcmNl
cHQocngoKSAtIHhpLCByeCgpLCByeSgpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludCh4aSwgeWkp
OworfQorCitGbG9hdFJvdW5kZWRSZWN0IFJlY3RhbmdsZVNoYXBlOjpzaGFwZVBhZGRpbmdCb3Vu
ZHMoKSBjb25zdAoreworICAgIGlmICghbV9oYXZlSW5pdGlhbGl6ZWRQYWRkaW5nQm91bmRzKSB7
CisgICAgICAgIG1faGF2ZUluaXRpYWxpemVkUGFkZGluZ0JvdW5kcyA9IHRydWU7CisgICAgICAg
IG1fcGFkZGluZ0JvdW5kcyA9IG1fYm91bmRzLnBhZGRpbmdCb3VuZHMoc2hhcGVQYWRkaW5nKCkp
OworICAgIH0KKyAgICByZXR1cm4gbV9wYWRkaW5nQm91bmRzOworfQorCitGbG9hdFJvdW5kZWRS
ZWN0IFJlY3RhbmdsZVNoYXBlOjpzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2hhdmVJbml0aWFsaXplZE1hcmdpbkJvdW5kcykgeworICAgICAgICBtX2hhdmVJbml0aWFs
aXplZE1hcmdpbkJvdW5kcyA9IHRydWU7CisgICAgICAgIG1fbWFyZ2luQm91bmRzID0gbV9ib3Vu
ZHMubWFyZ2luQm91bmRzKHNoYXBlTWFyZ2luKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9tYXJn
aW5Cb3VuZHM7Cit9CisKK3ZvaWQgUmVjdGFuZ2xlU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxz
KExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50
TGlzdCYgcmVzdWx0KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvdW5k
cyA9IHNoYXBlTWFyZ2luQm91bmRzKCk7CisgICAgaWYgKGJvdW5kcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKKyAgICBmbG9hdCB5MiA9
IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OworCisgICAgaWYgKHkyIDwgYm91bmRzLnkoKSB8
fCB5MSA+PSBib3VuZHMubWF4WSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB4MSA9
IGJvdW5kcy54KCk7CisgICAgZmxvYXQgeDIgPSBib3VuZHMubWF4WCgpOworCisgICAgaWYgKGJv
dW5kcy5yeSgpID4gMCkgeworICAgICAgICBpZiAoeTIgPCBib3VuZHMueSgpICsgYm91bmRzLnJ5
KCkpIHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0geTIgLSBib3VuZHMueSgpIC0gYm91bmRzLnJ5
KCk7CisgICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3VuZHMu
cngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsgYm91bmRz
LnJ4KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5kcy5yeCgp
ICsgeGk7CisgICAgICAgIH0gZWxzZSBpZiAoeTEgPiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5
KCkpIHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0gIHkxIC0gKGJvdW5kcy5tYXhZKCkgLSBib3Vu
ZHMucnkoKSk7CisgICAgICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBi
b3VuZHMucngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgeDEgPSBib3VuZHMueCgpICsg
Ym91bmRzLnJ4KCkgLSB4aTsKKyAgICAgICAgICAgIHgyID0gYm91bmRzLm1heFgoKSAtIGJvdW5k
cy5yeCgpICsgeGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKExpbmVT
ZWdtZW50KHgxLCB4MikpOworfQorCit2b2lkIFJlY3RhbmdsZVNoYXBlOjpnZXRJbmNsdWRlZElu
dGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBib3VuZHMgPSBzaGFwZVBhZGRpbmdCb3VuZHMoKTsKKyAgICBpZiAoYm91bmRzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOworICAgIGZs
b2F0IHkyID0gbG9naWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7CisKKyAgICBpZiAoeTEgPCBib3Vu
ZHMueSgpIHx8IHkyID4gYm91bmRzLm1heFkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxv
YXQgeDEgPSBib3VuZHMueCgpOworICAgIGZsb2F0IHgyID0gYm91bmRzLm1heFgoKTsKKworICAg
IGlmIChib3VuZHMucnkoKSA+IDApIHsKKyAgICAgICAgYm9vbCB5MUludGVyY2VwdHNDb3JuZXIg
PSB5MSA8IGJvdW5kcy55KCkgKyBib3VuZHMucnkoKTsKKyAgICAgICAgYm9vbCB5MkludGVyY2Vw
dHNDb3JuZXIgPSB5MiA+IGJvdW5kcy5tYXhZKCkgLSBib3VuZHMucnkoKTsKKyAgICAgICAgZmxv
YXQgeGkgPSAwOworCisgICAgICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgJiYgeTJJbnRlcmNl
cHRzQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAgKHkxIDwgYm91bmRzLmhlaWdodCgpICsgMiAq
IGJvdW5kcy55KCkgLSB5MikgeworICAgICAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBib3Vu
ZHMueSgpIC0gYm91bmRzLnJ5KCk7CisgICAgICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVy
Y2VwdCh5aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAoYm91bmRzLm1heFkoKSAtIGJvdW5k
cy5yeSgpKTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBib3Vu
ZHMucngoKSwgYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHkxSW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgZmxvYXQgeWkgPSB5MSAtIGJvdW5k
cy55KCkgLSBib3VuZHMucnkoKTsKKyAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQo
eWksIGJvdW5kcy5yeCgpLCBib3VuZHMucnkoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoeTJJbnRl
cmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChib3VuZHMubWF4
WSgpIC0gYm91bmRzLnJ5KCkpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5
aSwgYm91bmRzLnJ4KCksIGJvdW5kcy5yeSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh5
MUludGVyY2VwdHNDb3JuZXIgfHwgeTJJbnRlcmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICB4
MSA9IGJvdW5kcy54KCkgKyBib3VuZHMucngoKSAtIHhpOworICAgICAgICAgICAgeDIgPSBib3Vu
ZHMubWF4WCgpIC0gYm91bmRzLnJ4KCkgKyB4aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
c3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoeDEsIHgyKSk7Cit9CisKK2Jvb2wgUmVjdGFuZ2xlU2hh
cGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2Fs
SW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExh
eW91dFVuaXQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1p
bkxvZ2ljYWxJbnRlcnZhbFRvcDsKKyAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxv
Z2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCk7CisgICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9
IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKTsKKworICAgIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIGJvdW5kcyA9IHNoYXBlUGFkZGluZ0JvdW5kcygpOworICAgIGlmIChib3VuZHMuaXNF
bXB0eSgpIHx8IG1pbkludGVydmFsV2lkdGggPiBib3VuZHMud2lkdGgoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kcy55KCksIG1pbklu
dGVydmFsVG9wKTsKKyAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkludGVydmFsSGVpZ2h0Owor
CisgICAgaWYgKG1heFkgPiBib3VuZHMubWF4WSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBib29sIGludGVydmFsT3ZlcmxhcHNNaW5Db3JuZXIgPSBtaW5ZIDwgYm91bmRzLnkoKSAr
IGJvdW5kcy5yeSgpOworICAgIGJvb2wgaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciA9IG1heFkg
PiBib3VuZHMubWF4WSgpIC0gYm91bmRzLnJ5KCk7CisKKyAgICBpZiAoIWludGVydmFsT3Zlcmxh
cHNNaW5Db3JuZXIgJiYgIWludGVydmFsT3ZlcmxhcHNNYXhDb3JuZXIpIHsKKyAgICAgICAgcmVz
dWx0ID0gbWluWTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZmxvYXQgY2Vu
dGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0KCkgLyAyOworICAgIGJvb2wgbWluQ29y
bmVyRGVmaW5lc1ggPSBmYWJzKGNlbnRlclkgLSBtaW5ZKSA+IGZhYnMoY2VudGVyWSAtIG1heFkp
OworICAgIGJvb2wgaW50ZXJ2YWxGaXRzV2l0aGluQ29ybmVycyA9IG1pbkludGVydmFsV2lkdGgg
KyAyICogYm91bmRzLnJ4KCkgPD0gYm91bmRzLndpZHRoKCk7CisgICAgRmxvYXRQb2ludCBjb3Ju
ZXJJbnRlcmNlcHQgPSBib3VuZHMuY29ybmVySW50ZXJjZXB0Rm9yV2lkdGgobWluSW50ZXJ2YWxX
aWR0aCk7CisKKyAgICBpZiAoaW50ZXJ2YWxPdmVybGFwc01pbkNvcm5lciAmJiAoIWludGVydmFs
T3ZlcmxhcHNNYXhDb3JuZXIgfHwgbWluQ29ybmVyRGVmaW5lc1gpKSB7CisgICAgICAgIGlmIChp
bnRlcnZhbEZpdHNXaXRoaW5Db3JuZXJzIHx8IGJvdW5kcy55KCkgKyBjb3JuZXJJbnRlcmNlcHQu
eSgpIDwgbWluWSkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWluWTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChtaW5JbnRlcnZhbEhlaWdodCA8IGJv
dW5kcy5oZWlnaHQoKSAtICgyICogY29ybmVySW50ZXJjZXB0LnkoKSkpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQoYm91bmRzLnkoKSArIGNvcm5lckludGVyY2VwdC55
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoaW50ZXJ2YWxPdmVybGFwc01heENvcm5lciAmJiAoIWludGVydmFsT3ZlcmxhcHNNaW5Db3Ju
ZXIgfHwgIW1pbkNvcm5lckRlZmluZXNYKSkgeworICAgICAgICBpZiAoaW50ZXJ2YWxGaXRzV2l0
aGluQ29ybmVycyB8fCBtaW5ZIDw9ICBib3VuZHMubWF4WSgpIC0gY29ybmVySW50ZXJjZXB0Lnko
KSAtIG1pbkludGVydmFsSGVpZ2h0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtaW5ZOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvUmVjdGFuZ2xlU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWVjZjA1MDRiYjk5
M2M5MTEwMzkwNjM0OTM0NWVlNDI5NDQ2ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5nbGVTaGFwZS5oCkBAIC0wLDAgKzEsOTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFJlY3RhbmdsZVNoYXBlX2gKKyNkZWZpbmUgUmVjdGFuZ2xlU2hhcGVf
aAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmxvYXRSb3VuZGVkUmVjdCA6IHB1YmxpYyBGbG9hdFJlY3QgeworcHVibGlj
OgorICAgIEZsb2F0Um91bmRlZFJlY3QoKSB7IH0KKyAgICBGbG9hdFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRzLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQorICAgICAgICA6IEZs
b2F0UmVjdChib3VuZHMpCisgICAgICAgICwgbV9yYWRpaShyYWRpaSkKKyAgICB7CisgICAgfQor
CisgICAgZmxvYXQgcngoKSBjb25zdCB7IHJldHVybiBtX3JhZGlpLndpZHRoKCk7IH0KKyAgICBm
bG9hdCByeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWkuaGVpZ2h0KCk7IH0KKyAgICBGbG9hdFJv
dW5kZWRSZWN0IG1hcmdpbkJvdW5kcyhmbG9hdCBtYXJnaW4pIGNvbnN0OworICAgIEZsb2F0Um91
bmRlZFJlY3QgcGFkZGluZ0JvdW5kcyhmbG9hdCBwYWRkaW5nKSBjb25zdDsKKyAgICBGbG9hdFBv
aW50IGNvcm5lckludGVyY2VwdEZvcldpZHRoKGZsb2F0IHdpZHRoKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBGbG9hdFNpemUgbV9yYWRpaTsKK307CisKK2NsYXNzIFJlY3RhbmdsZVNoYXBlIDog
cHVibGljIFNoYXBlIHsKK3B1YmxpYzoKKyAgICBSZWN0YW5nbGVTaGFwZShjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kcywgY29uc3QgRmxvYXRTaXplJiByYWRpaSkKKyAgICAgICAgOiBTaGFwZSgpCisg
ICAgICAgICwgbV9ib3VuZHMoYm91bmRzLCByYWRpaSkKKyAgICAgICAgLCBtX2hhdmVJbml0aWFs
aXplZE1hcmdpbkJvdW5kcyhmYWxzZSkKKyAgICAgICAgLCBtX2hhdmVJbml0aWFsaXplZFBhZGRp
bmdCb3VuZHMoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBz
aGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHN0
YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlTWFyZ2luQm91bmRzKCkpOyB9CisgICAgdmlydHVh
bCBMYXlvdXRSZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBlUGFkZGluZ0JvdW5kcygp
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9ib3VuZHMuaXNFbXB0eSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2
YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdt
ZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmNsdWRlZElu
dGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNs
dWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNv
bnN0IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIEZsb2F0Um91bmRlZFJlY3Qgc2hhcGVNYXJn
aW5Cb3VuZHMoKSBjb25zdDsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IHNoYXBlUGFkZGluZ0JvdW5k
cygpIGNvbnN0OworCisgICAgRmxvYXRSb3VuZGVkUmVjdCBtX2JvdW5kczsKKyAgICBtdXRhYmxl
IEZsb2F0Um91bmRlZFJlY3QgbV9tYXJnaW5Cb3VuZHM7CisgICAgbXV0YWJsZSBGbG9hdFJvdW5k
ZWRSZWN0IG1fcGFkZGluZ0JvdW5kczsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXZlSW5pdGlhbGl6
ZWRNYXJnaW5Cb3VuZHMgOiAxOworICAgIG11dGFibGUgYm9vbCBtX2hhdmVJbml0aWFsaXplZFBh
ZGRpbmdCb3VuZHMgOiAxOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gUmVjdGFuZ2xlU2hhcGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNzkyMGNjOWU0ODgxMzY4OTE3NDg1Y2IwMzM3OGU5ZjQwMDAyZjNi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUg
U3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2hhcGUuaCIKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKKyNpbmNs
dWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRl
ICJQb2x5Z29uU2hhcGUuaCIKKyNpbmNsdWRlICJSZWN0YW5nbGVTaGFwZS5oIgorI2luY2x1ZGUg
IldpbmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUGFzc093blB0cjxTaGFwZT4gY3JlYXRlUmVjdGFuZ2xlU2hhcGUoY29u
c3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0U2l6ZSYgcmFkaWkpCit7CisgICAgQVNT
RVJUKGJvdW5kcy53aWR0aCgpID49IDAgJiYgYm91bmRzLmhlaWdodCgpID49IDAgJiYgcmFkaWku
d2lkdGgoKSA+PSAwICYmIHJhZGlpLmhlaWdodCgpID49IDApOworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgUmVjdGFuZ2xlU2hhcGUoYm91bmRzLCByYWRpaSkpOworfQorCitzdGF0aWMgUGFzc093
blB0cjxTaGFwZT4gY3JlYXRlU2hhcGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBm
bG9hdCByYWRpdXMpCit7CisgICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFJlY3RhbmdsZVNoYXBlKEZsb2F0UmVjdChjZW50ZXIueCgpIC0gcmFkaXVzLCBj
ZW50ZXIueSgpIC0gcmFkaXVzLCByYWRpdXMqMiwgcmFkaXVzKjIpLCBGbG9hdFNpemUocmFkaXVz
LCByYWRpdXMpKSk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFNoYXBlPiBjcmVhdGVTaGFwZUVs
bGlwc2UoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyLCBjb25zdCBGbG9hdFNpemUmIHJhZGlpKQor
eworICAgIEFTU0VSVChyYWRpaS53aWR0aCgpID49IDAgJiYgcmFkaWkuaGVpZ2h0KCkgPj0gMCk7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWN0YW5nbGVTaGFwZShGbG9hdFJlY3QoY2VudGVy
LngoKSAtIHJhZGlpLndpZHRoKCksIGNlbnRlci55KCkgLSByYWRpaS5oZWlnaHQoKSwgcmFkaWku
d2lkdGgoKSoyLCByYWRpaS5oZWlnaHQoKSoyKSwgcmFkaWkpKTsKK30KKworc3RhdGljIFBhc3NP
d25QdHI8U2hhcGU+IGNyZWF0ZVBvbHlnb25TaGFwZShQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBv
aW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFBvbHlnb25TaGFwZSh2ZXJ0aWNlcywgZmlsbFJ1bGUpKTsKK30KKworc3RhdGljIGlu
bGluZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7Cisg
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0
dXJuIHJlY3Q7CisgICAgaWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2Rl
KSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LnkoKSwgbG9naWNhbEJveEhlaWdodCAt
IHJlY3QubWF4WCgpLCByZWN0LmhlaWdodCgpLCByZWN0LndpZHRoKCkpOworICAgIHJldHVybiBy
ZWN0LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBwaHlz
aWNhbFBvaW50VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBsb2dpY2Fs
Qm94SGVpZ2h0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3sKKyAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQorICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAg
aWYgKGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UG9pbnQocG9pbnQueSgpLCBsb2dpY2FsQm94SGVpZ2h0IC0gcG9pbnQueCgpKTsK
KyAgICByZXR1cm4gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
RmxvYXRTaXplIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb25zdCBGbG9hdFNpemUmIHNpemUsIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBzaXplOworICAgIHJldHVybiBzaXplLnRy
YW5zcG9zZWRTaXplKCk7Cit9CisKK1Bhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFw
ZShjb25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2Fs
Qm94U2l6ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBw
YWRkaW5nKQoreworICAgIEFTU0VSVChiYXNpY1NoYXBlKTsKKworICAgIGJvb2wgaG9yaXpvbnRh
bFdyaXRpbmdNb2RlID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOworICAg
IGZsb2F0IGJveFdpZHRoID0gaG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbG9naWNhbEJveFNpemUu
d2lkdGgoKSA6IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpOworICAgIGZsb2F0IGJveEhlaWdodCA9
IGhvcml6b250YWxXcml0aW5nTW9kZSA/IGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpIDogbG9naWNh
bEJveFNpemUud2lkdGgoKTsKKyAgICBPd25QdHI8U2hhcGU+IHNoYXBlOworCisgICAgc3dpdGNo
IChiYXNpY1NoYXBlLT50eXBlKCkpIHsKKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QmFzaWNTaGFw
ZVJlY3RhbmdsZVR5cGU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVj
dGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVJlY3RhbmdsZSo+KGJhc2ljU2hh
cGUpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRzKAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZv
ckxlbmd0aChyZWN0YW5nbGUtPngoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1
ZUZvckxlbmd0aChyZWN0YW5nbGUtPnkoKSwgYm94SGVpZ2h0KSwKKyAgICAgICAgICAgIGZsb2F0
VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT53aWR0aCgpLCBib3hXaWR0aCksCisgICAgICAgICAg
ICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+aGVpZ2h0KCksIGJveEhlaWdodCkpOwor
ICAgICAgICBMZW5ndGggcmFkaXVzWExlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWCgp
OworICAgICAgICBMZW5ndGggcmFkaXVzWUxlbmd0aCA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVz
WSgpOworICAgICAgICBGbG9hdFNpemUgY29ybmVyUmFkaWkoCisgICAgICAgICAgICByYWRpdXNY
TGVuZ3RoLmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNYTGVu
Z3RoLCBib3hXaWR0aCksCisgICAgICAgICAgICByYWRpdXNZTGVuZ3RoLmlzVW5kZWZpbmVkKCkg
PyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyYWRpdXNZTGVuZ3RoLCBib3hIZWlnaHQpKTsKKyAg
ICAgICAgRmxvYXRSZWN0IGxvZ2ljYWxCb3VuZHMgPSBwaHlzaWNhbFJlY3RUb0xvZ2ljYWwoYm91
bmRzLCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQoKSwgd3JpdGluZ01vZGUpOworCisgICAgICAgIHNo
YXBlID0gY3JlYXRlUmVjdGFuZ2xlU2hhcGUobG9naWNhbEJvdW5kcywgcGh5c2ljYWxTaXplVG9M
b2dpY2FsKGNvcm5lclJhZGlpLCB3cml0aW5nTW9kZSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVDaXJjbGVUeXBlOiB7CisgICAgICAg
IGNvbnN0IEJhc2ljU2hhcGVDaXJjbGUqIGNpcmNsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
U2hhcGVDaXJjbGUqPihiYXNpY1NoYXBlKTsKKyAgICAgICAgZmxvYXQgY2VudGVyWCA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKTsKKyAgICAgICAgZmxv
YXQgY2VudGVyWSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhl
aWdodCk7CisgICAgICAgIGZsb2F0IHJhZGl1cyA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xl
LT5yYWRpdXMoKSwgc3RkOjptaW4oYm94SGVpZ2h0LCBib3hXaWR0aCkpOworICAgICAgICBGbG9h
dFBvaW50IGxvZ2ljYWxDZW50ZXIgPSBwaHlzaWNhbFBvaW50VG9Mb2dpY2FsKEZsb2F0UG9pbnQo
Y2VudGVyWCwgY2VudGVyWSksIGxvZ2ljYWxCb3hTaXplLmhlaWdodCgpLCB3cml0aW5nTW9kZSk7
CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVTaGFwZUNpcmNsZShsb2dpY2FsQ2VudGVyLCByYWRp
dXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2lj
U2hhcGVFbGxpcHNlVHlwZTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSogZWxs
aXBzZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4oYmFzaWNTaGFwZSk7
CisgICAgICAgIGZsb2F0IGNlbnRlclggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNl
bnRlclgoKSwgYm94V2lkdGgpOworICAgICAgICBmbG9hdCBjZW50ZXJZID0gZmxvYXRWYWx1ZUZv
ckxlbmd0aChlbGxpcHNlLT5jZW50ZXJZKCksIGJveEhlaWdodCk7CisgICAgICAgIGZsb2F0IHJh
ZGl1c1ggPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1goKSwgYm94V2lkdGgp
OworICAgICAgICBmbG9hdCByYWRpdXNZID0gZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5y
YWRpdXNZKCksIGJveEhlaWdodCk7CisgICAgICAgIEZsb2F0UG9pbnQgbG9naWNhbENlbnRlciA9
IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoRmxvYXRQb2ludChjZW50ZXJYLCBjZW50ZXJZKSwgbG9n
aWNhbEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKyAgICAgICAgRmxvYXRTaXplIGxv
Z2ljYWxSYWRpaSA9IHBoeXNpY2FsU2l6ZVRvTG9naWNhbChGbG9hdFNpemUocmFkaXVzWCwgcmFk
aXVzWSksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0ZVNoYXBlRWxsaXBz
ZShsb2dpY2FsQ2VudGVyLCBsb2dpY2FsUmFkaWkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVQb2x5Z29uVHlwZTogeworICAgICAgICBj
b25zdCBCYXNpY1NoYXBlUG9seWdvbiogcG9seWdvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
U2hhcGVQb2x5Z29uKj4oYmFzaWNTaGFwZSk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxMZW5ndGg+
JiB2YWx1ZXMgPSBwb2x5Z29uLT52YWx1ZXMoKTsKKyAgICAgICAgc2l6ZV90IHZhbHVlc1NpemUg
PSB2YWx1ZXMuc2l6ZSgpOworICAgICAgICBBU1NFUlQoISh2YWx1ZXNTaXplICUgMikpOworICAg
ICAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMgPSBhZG9wdFB0cihuZXcg
VmVjdG9yPEZsb2F0UG9pbnQ+KHZhbHVlc1NpemUgLyAyKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2YWx1ZXNTaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIEZsb2F0UG9p
bnQgdmVydGV4KAorICAgICAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0
KGkpLCBib3hXaWR0aCksCisgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1
ZXMuYXQoaSArIDEpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgICAgICgqdmVydGljZXMpW2kgLyAy
XSA9IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwodmVydGV4LCBsb2dpY2FsQm94U2l6ZS5oZWlnaHQo
KSwgd3JpdGluZ01vZGUpOworICAgICAgICB9CisKKyAgICAgICAgc2hhcGUgPSBjcmVhdGVQb2x5
Z29uU2hhcGUodmVydGljZXMucmVsZWFzZSgpLCBwb2x5Z29uLT53aW5kUnVsZSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlSW5zZXRS
ZWN0YW5nbGVUeXBlOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZSog
cmVjdGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlKj4o
YmFzaWNTaGFwZSk7CisgICAgICAgIGZsb2F0IGxlZnQgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJl
Y3RhbmdsZS0+bGVmdCgpLCBib3hXaWR0aCk7CisgICAgICAgIGZsb2F0IHRvcCA9IGZsb2F0VmFs
dWVGb3JMZW5ndGgocmVjdGFuZ2xlLT50b3AoKSwgYm94SGVpZ2h0KTsKKyAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kcygKKyAgICAgICAgICAgIGxlZnQsCisgICAgICAgICAgICB0b3AsCisgICAgICAg
ICAgICBib3hXaWR0aCAtIGxlZnQgLSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+cmln
aHQoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgYm94SGVpZ2h0IC0gdG9wIC0gZmxvYXRWYWx1
ZUZvckxlbmd0aChyZWN0YW5nbGUtPmJvdHRvbSgpLCBib3hIZWlnaHQpKTsKKyAgICAgICAgTGVu
Z3RoIHJhZGl1c1hMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKKyAgICAgICAg
TGVuZ3RoIHJhZGl1c1lMZW5ndGggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1koKTsKKyAgICAg
ICAgRmxvYXRTaXplIGNvcm5lclJhZGlpKAorICAgICAgICAgICAgcmFkaXVzWExlbmd0aC5pc1Vu
ZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgocmFkaXVzWExlbmd0aCwgYm94V2lk
dGgpLAorICAgICAgICAgICAgcmFkaXVzWUxlbmd0aC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0
VmFsdWVGb3JMZW5ndGgocmFkaXVzWUxlbmd0aCwgYm94SGVpZ2h0KSk7CisgICAgICAgIEZsb2F0
UmVjdCBsb2dpY2FsQm91bmRzID0gcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGJvdW5kcywgbG9naWNh
bEJveFNpemUuaGVpZ2h0KCksIHdyaXRpbmdNb2RlKTsKKworICAgICAgICBzaGFwZSA9IGNyZWF0
ZVJlY3RhbmdsZVNoYXBlKGxvZ2ljYWxCb3VuZHMsIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb3Ju
ZXJSYWRpaSwgd3JpdGluZ01vZGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc2hhcGUt
Pm1fd3JpdGluZ01vZGUgPSB3cml0aW5nTW9kZTsKKyAgICBzaGFwZS0+bV9tYXJnaW4gPSBmbG9h
dFZhbHVlRm9yTGVuZ3RoKG1hcmdpbiwgMCk7CisgICAgc2hhcGUtPm1fcGFkZGluZyA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgocGFkZGluZywgMCk7CisKKyAgICByZXR1cm4gc2hhcGUucmVsZWFzZSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ5ZWNmZDcyMGJkMGRkNTM4MDQxMzE4Yzk4MjViZjMz
NzExZTU4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZV9oCisjZGVm
aW5lIFNoYXBlX2gKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgiCisjaW5jbHVkZSAiTGF5b3V0
UmVjdC5oIgorI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RydWN0IExpbmVTZWdtZW50IHsKKyAgICBMaW5lU2VnbWVudChmbG9hdCBsb2dpY2FsTGVmdCwg
ZmxvYXQgbG9naWNhbFJpZ2h0KQorICAgICAgICA6IGxvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQor
ICAgICAgICAsIGxvZ2ljYWxSaWdodChsb2dpY2FsUmlnaHQpCisgICAgeworICAgIH0KKworICAg
IExheW91dFVuaXQgbG9naWNhbExlZnQ7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQ7Cit9
OworCit0eXBlZGVmIFZlY3RvcjxMaW5lU2VnbWVudD4gU2VnbWVudExpc3Q7CisKKworLy8gQSBy
ZXByZXNlbnRhdGlvbiBvZiBhIEJhc2ljU2hhcGUgdGhhdCBlbmFibGVzIGxheW91dCBjb2RlIHRv
IGRldGVybWluZSBob3cgdG8gYnJlYWsgYSBsaW5lIHVwIGludG8gc2VnbWVudHMKKy8vIHRoYXQg
d2lsbCBmaXQgd2l0aGluIG9yIGFyb3VuZCBhIHNoYXBlLiBUaGUgbGluZSBpcyBkZWZpbmVkIGJ5
IGEgcGFpciBvZiBsb2dpY2FsIFkgY29vcmRpbmF0ZXMgYW5kIHRoZQorLy8gY29tcHV0ZWQgc2Vn
bWVudHMgYXJlIHJldHVybmVkIGFzIHBhaXJzIG9mIGxvZ2ljYWwgWCBjb29yZGluYXRlcy4gVGhl
IEJhc2ljU2hhcGUgaXRzZWxmIGlzIGRlZmluZWQgaW4KKy8vIHBoeXNpY2FsIGNvb3JkaW5hdGVz
LgorCitjbGFzcyBTaGFwZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGU+
IGNyZWF0ZVNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2Fs
Qm94U2l6ZSwgV3JpdGluZ01vZGUsIExlbmd0aCBtYXJnaW4sIExlbmd0aCBwYWRkaW5nKTsKKwor
ICAgIHZpcnR1YWwgflNoYXBlKCkgeyB9CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2hhcGVN
YXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IHNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVk
ZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHQsIFNlZ21lbnRMaXN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRFeGNsdWRl
ZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNv
bnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3Vs
dCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgZmxvYXQgc2hhcGVNYXJnaW4oKSBjb25z
dCB7IHJldHVybiBtX21hcmdpbjsgfQorICAgIGZsb2F0IHNoYXBlUGFkZGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fcGFkZGluZzsgfQorCitwcml2YXRlOgorICAgIFdyaXRpbmdNb2RlIG1fd3JpdGlu
Z01vZGU7CisgICAgZmxvYXQgbV9tYXJnaW47CisgICAgZmxvYXQgbV9wYWRkaW5nOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2hhcGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMTU1ODMy
MWNjZjhmZTBjMjgwMjdhNDVmYzdiMjM2YTU3NTdmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICog
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2hhcGVJbmZvLmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
UmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7Cit0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZh
bHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoU2hhcGU6Oipp
bnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25z
dD4KK2NvbnN0IFNoYXBlKiBTaGFwZUluZm88UmVuZGVyVHlwZSwgc2hhcGVHZXR0ZXIsIGludGVy
dmFsR2V0dGVyPjo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0Cit7CisgICAgaWYgKFNoYXBlKiBzaGFw
ZSA9IG1fc2hhcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBzaGFwZTsKKworICAgIFNoYXBlVmFs
dWUqIHNoYXBlVmFsdWUgPSAobV9yZW5kZXJlci0+c3R5bGUoKS0+KnNoYXBlR2V0dGVyKSgpOwor
ICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gKHNoYXBlVmFsdWUgJiYgc2hhcGVWYWx1ZS0+dHlwZSgp
ID09IFNoYXBlVmFsdWU6OlNoYXBlKSA/IHNoYXBlVmFsdWUtPnNoYXBlKCkgOiAwOworCisgICAg
QVNTRVJUKHNoYXBlKTsKKworICAgIG1fc2hhcGUgPSBTaGFwZTo6Y3JlYXRlU2hhcGUoc2hhcGUs
IExheW91dFNpemUobV9zaGFwZUxvZ2ljYWxXaWR0aCwgbV9zaGFwZUxvZ2ljYWxIZWlnaHQpLCBt
X3JlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5z
aGFwZU1hcmdpbigpLCBtX3JlbmRlcmVyLT5zdHlsZSgpLT5zaGFwZVBhZGRpbmcoKSk7CisgICAg
QVNTRVJUKG1fc2hhcGUpOworICAgIHJldHVybiBtX3NoYXBlLmdldCgpOworfQorCit0ZW1wbGF0
ZTxjbGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRl
cikoKSBjb25zdCwgdm9pZCAoU2hhcGU6OippbnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5
b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdD4KK2Jvb2wgU2hhcGVJbmZvPFJlbmRlclR5cGUs
IHNoYXBlR2V0dGVyLCBpbnRlcnZhbEdldHRlcj46OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5
b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCit7CisgICAgQVNTRVJUKGxp
bmVIZWlnaHQgPj0gMCk7CisgICAgbV9zaGFwZUxpbmVUb3AgPSBsaW5lVG9wIC0gbG9naWNhbFRv
cE9mZnNldCgpOworICAgIG1fbGluZUhlaWdodCA9IGxpbmVIZWlnaHQ7CisgICAgbV9zZWdtZW50
cy5jbGVhcigpOworCisgICAgaWYgKGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkpCisgICAgICAg
IChjb21wdXRlZFNoYXBlKCktPippbnRlcnZhbEdldHRlcikobV9zaGFwZUxpbmVUb3AsIHN0ZDo6
bWluKG1fbGluZUhlaWdodCwgc2hhcGVMb2dpY2FsQm90dG9tKCkgLSBsaW5lVG9wKSwgbV9zZWdt
ZW50cyk7CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gdGhpcy0+bG9naWNh
bExlZnRPZmZzZXQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2VnbWVudHMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsTGVmdCArPSBsb2dpY2Fs
TGVmdE9mZnNldDsKKyAgICAgICAgbV9zZWdtZW50c1tpXS5sb2dpY2FsUmlnaHQgKz0gbG9naWNh
bExlZnRPZmZzZXQ7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOworfQor
Cit0ZW1wbGF0ZSBjbGFzcyBTaGFwZUluZm88UmVuZGVyQmxvY2ssICZSZW5kZXJTdHlsZTo6cmVz
b2x2ZWRTaGFwZUluc2lkZSwgJlNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscz47Cit0ZW1wbGF0
ZSBjbGFzcyBTaGFwZUluZm88UmVuZGVyQm94LCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwg
JlNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscz47Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlMTNkMzJhNWQ2MDk1
ZjVkMmYwOThlOGZiMDkwYTYxMmM1NGUzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgor
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoK
KyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworKiAgICBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisqICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisqIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IKKyogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GCisqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKiBTVUNIIERBTUFHRS4KKyovCisKKyNp
Zm5kZWYgU2hhcGVJbmZvX2gKKyNkZWZpbmUgU2hhcGVJbmZvX2gKKworI2lmIEVOQUJMRShDU1Nf
U0hBUEVTKQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5o
IgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRl
ICJTaGFwZVZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBl
LCBjbGFzcyBJbmZvVHlwZT4KK2NsYXNzIE1hcHBlZEluZm8geworcHVibGljOgorICAgIHN0YXRp
YyBJbmZvVHlwZSogZW5zdXJlSW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpCisgICAgeworICAgICAg
ICBJbmZvTWFwJiBpbmZvTWFwID0gTWFwcGVkSW5mbzxLZXlUeXBlLCBJbmZvVHlwZT46OmluZm9N
YXAoKTsKKyAgICAgICAgaWYgKEluZm9UeXBlKiBpbmZvID0gaW5mb01hcC5nZXQoa2V5KSkKKyAg
ICAgICAgICAgIHJldHVybiBpbmZvOworICAgICAgICB0eXBlbmFtZSBJbmZvTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gaW5mb01hcC5hZGQoa2V5LCBJbmZvVHlwZTo6Y3JlYXRlSW5mbyhrZXkpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgfQorICAg
IHN0YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3QgS2V5VHlwZSoga2V5KSB7IGluZm9NYXAoKS5y
ZW1vdmUoa2V5KTsgfQorICAgIHN0YXRpYyBJbmZvVHlwZSogaW5mbyhjb25zdCBLZXlUeXBlKiBr
ZXkpIHsgcmV0dXJuIGluZm9NYXAoKS5nZXQoa2V5KTsgfQorcHJpdmF0ZToKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgS2V5VHlwZSosIE93blB0cjxJbmZvVHlwZT4gPiBJbmZvTWFwOworICAg
IHN0YXRpYyBJbmZvTWFwJiBpbmZvTWFwKCkKKyAgICB7CisgICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSW5mb01hcCwgc3RhdGljSW5mb01hcCwgKCkpOworICAgICAgICByZXR1cm4gc3RhdGlj
SW5mb01hcDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlLCBTaGFwZVZh
bHVlKiAoUmVuZGVyU3R5bGU6OipzaGFwZUdldHRlcikoKSBjb25zdCwgdm9pZCAoU2hhcGU6Oipp
bnRlcnZhbEdldHRlcikoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25z
dD4KK2NsYXNzIFNoYXBlSW5mbyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+U2hhcGVJbmZvKCkgeyB9CisKKyAgICB2b2lkIHNldFNoYXBlU2l6
ZShMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQorICAg
IHsKKyAgICAgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRF
TlRfQk9YKSB7CisgICAgICAgICAgICBsb2dpY2FsV2lkdGggLT0gbV9yZW5kZXJlci0+Ym9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOworICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBt
X3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1fc2hhcGVMb2dpY2FsV2lkdGggPT0gbG9naWNhbFdpZHRoICYmIG1fc2hh
cGVMb2dpY2FsSGVpZ2h0ID09IGxvZ2ljYWxIZWlnaHQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGRpcnR5U2hhcGVTaXplKCk7CisgICAgICAgIG1fc2hhcGVMb2dpY2FsV2lkdGggPSBs
b2dpY2FsV2lkdGg7CisgICAgICAgIG1fc2hhcGVMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdo
dDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCk7CisgICAgdm9pZCBjbGVhclNl
Z21lbnRzKCkgeyBtX3NlZ21lbnRzLmNsZWFyKCk7IH0KKworICAgIExheW91dFVuaXQgc2hhcGVM
b2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0Jv
eCgpLnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dp
Y2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0Jv
eCgpLm1heFkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVM
b2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdC
b3goKS54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxv
Z2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdC
b3goKS5tYXhYKCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFw
ZUxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRp
bmdCb3goKS53aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkuaGVpZ2h0KCk7
IH0KKworICAgIExheW91dFVuaXQgbG9naWNhbExpbmVUb3AoKSBjb25zdCB7IHJldHVybiBtX3No
YXBlTGluZVRvcCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNh
bExpbmVCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX3NoYXBlTGluZVRvcCArIG1fbGluZUhlaWdo
dCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorCisgICAgTGF5b3V0VW5pdCBzaGFwZUNvbnRhaW5p
bmdCbG9ja0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgpLT5ib3hT
aXppbmcoKSA9PSBDT05URU5UX0JPWCkgPyAobV9zaGFwZUxvZ2ljYWxIZWlnaHQgKyBtX3JlbmRl
cmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKSA6IG1fc2hhcGVMb2dpY2FsSGVp
Z2h0OyB9CisKKyAgICBib29sIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gbG9naWNhbExpbmVUb3AoKSA8IHNoYXBlTG9naWNhbEJvdHRvbSgpICYmIHNoYXBlTG9naWNh
bFRvcCgpIDw9IGxvZ2ljYWxMaW5lQm90dG9tKCk7IH0KKyAgICBib29sIGxpbmVXaXRoaW5TaGFw
ZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgJiYgKGxv
Z2ljYWxMaW5lQm90dG9tKCkgPD0gc2hhcGVMb2dpY2FsQm90dG9tKCkpOyB9CisKKyAgICB2b2lk
IGRpcnR5U2hhcGVTaXplKCkgeyBtX3NoYXBlLmNsZWFyKCk7IH0KKyAgICBib29sIHNoYXBlU2l6
ZURpcnR5KCkgeyByZXR1cm4gIW1fc2hhcGUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZW5kZXJUeXBl
KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KKworcHJvdGVjdGVkOgorICAg
IFNoYXBlSW5mbyhjb25zdCBSZW5kZXJUeXBlKiByZW5kZXJlcik6IG1fcmVuZGVyZXIocmVuZGVy
ZXIpIHsgfQorCisgICAgY29uc3QgU2hhcGUqIGNvbXB1dGVkU2hhcGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0
ID0gMDsKKworICAgIExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gbV9yZW5k
ZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpIDogTGF5b3V0VW5pdCgpOyB9OworICAgIExh
eW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiAobV9yZW5kZXJlci0+
c3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggJiYgIW1fcmVuZGVyZXItPmlzUmVu
ZGVyUmVnaW9uKCkpID8gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1N0YXJ0KCkgOiBMYXlv
dXRVbml0KCk7IH0KKworICAgIExheW91dFVuaXQgbV9zaGFwZUxpbmVUb3A7CisgICAgTGF5b3V0
VW5pdCBtX2xpbmVIZWlnaHQ7CisgICAgU2VnbWVudExpc3QgbV9zZWdtZW50czsKKworcHJpdmF0
ZToKKyAgICBtdXRhYmxlIE93blB0cjxTaGFwZT4gbV9zaGFwZTsKKworICAgIExheW91dFVuaXQg
bV9zaGFwZUxvZ2ljYWxXaWR0aDsKKyAgICBMYXlvdXRVbml0IG1fc2hhcGVMb2dpY2FsSGVpZ2h0
OworICAgIGNvbnN0IFJlbmRlclR5cGUqIG1fcmVuZGVyZXI7Cit9OworfQorI2VuZGlmCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNp
ZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJ
bmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMTI5NWQwM2VkYjI3M2ZhZTdiYWJlY2QxYzRiYWUwOWVhYWNl
MGRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUluc2lkZUluZm8uY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFwZUluc2lkZUlu
Zm8uaCIKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0xpbmVTZWdtZW50UmFuZ2U6OkxpbmVTZWdtZW50UmFuZ2UoY29uc3QgSW5saW5lSXRlcmF0b3Im
IHN0YXJ0LCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kKQorICAgIDogc3RhcnQoc3RhcnQucm9v
dCgpLCBzdGFydC5vYmplY3QoKSwgc3RhcnQub2Zmc2V0KCkpCisgICAgLCBlbmQoZW5kLnJvb3Qo
KSwgZW5kLm9iamVjdCgpLCBlbmQub2Zmc2V0KCkpCisgICAgeworICAgIH0KKworYm9vbCBTaGFw
ZUluc2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCit7
CisgICAgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5yZXNvbHZl
ZFNoYXBlSW5zaWRlKCk7CisgICAgaWYgKCFzaGFwZVZhbHVlIHx8IHNoYXBlVmFsdWUtPnR5cGUo
KSAhPSBTaGFwZVZhbHVlOjpTaGFwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQmFz
aWNTaGFwZSogc2hhcGUgPSBzaGFwZVZhbHVlLT5zaGFwZSgpOworICAgIHJldHVybiBzaGFwZSAm
JiBzaGFwZS0+dHlwZSgpICE9IEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFJlY3RhbmdsZVR5
cGU7Cit9CisKK2Jvb2wgU2hhcGVJbnNpZGVJbmZvOjphZGp1c3RMb2dpY2FsTGluZVRvcChmbG9h
dCBtaW5TZWdtZW50V2lkdGgpCit7CisgICAgY29uc3QgU2hhcGUqIHNoYXBlID0gY29tcHV0ZWRT
aGFwZSgpOworICAgIGlmICghc2hhcGUgfHwgbV9saW5lSGVpZ2h0IDw9IDAgfHwgbG9naWNhbExp
bmVUb3AoKSA+IHNoYXBlTG9naWNhbEJvdHRvbSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBMYXlvdXRVbml0IG5ld0xpbmVUb3A7CisgICAgaWYgKHNoYXBlLT5maXJzdEluY2x1ZGVk
SW50ZXJ2YWxMb2dpY2FsVG9wKG1fc2hhcGVMaW5lVG9wLCBMYXlvdXRTaXplKG1pblNlZ21lbnRX
aWR0aCwgbV9saW5lSGVpZ2h0KSwgbmV3TGluZVRvcCkpIHsKKyAgICAgICAgaWYgKG5ld0xpbmVU
b3AgPiBtX3NoYXBlTGluZVRvcCkgeworICAgICAgICAgICAgbV9zaGFwZUxpbmVUb3AgPSBuZXdM
aW5lVG9wOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzAwNmIzNjQ1NGI5
ZGFiMWMyMDI2NTc3MDVlZDQ5NzE4OWJjN2U3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmgKQEAgLTAsMCArMSwxMTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAq
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFwZUluc2lkZUluZm9f
aAorI2RlZmluZSBTaGFwZUluc2lkZUluZm9faAorCisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisK
KyNpbmNsdWRlICJTaGFwZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmxp
bmVJdGVyYXRvcjsKK2NsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyT2JqZWN0OworCitz
dHJ1Y3QgTGluZVNlZ21lbnRJdGVyYXRvciB7CisgICAgUmVuZGVyT2JqZWN0KiByb290OworICAg
IFJlbmRlck9iamVjdCogb2JqZWN0OworICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBMaW5lU2Vn
bWVudEl0ZXJhdG9yKFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVu
c2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiByb290KHJvb3QpCisgICAgICAgICwgb2JqZWN0KG9i
amVjdCkKKyAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9Cit9OworCitzdHJ1
Y3QgTGluZVNlZ21lbnRSYW5nZSB7CisgICAgTGluZVNlZ21lbnRJdGVyYXRvciBzdGFydDsKKyAg
ICBMaW5lU2VnbWVudEl0ZXJhdG9yIGVuZDsKKyAgICBMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElu
bGluZUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCk7Cit9OworCit0
eXBlZGVmIFZlY3RvcjxMaW5lU2VnbWVudFJhbmdlPiBTZWdtZW50UmFuZ2VMaXN0OworCitjbGFz
cyBTaGFwZUluc2lkZUluZm8gOiBwdWJsaWMgU2hhcGVJbmZvPFJlbmRlckJsb2NrLCAmUmVuZGVy
U3R5bGU6OnJlc29sdmVkU2hhcGVJbnNpZGUsICZTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHM+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTaGFwZUluc2lkZUluZm8+IGNyZWF0
ZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcg
U2hhcGVJbnNpZGVJbmZvKHJlbmRlcmVyKSk7IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5hYmxl
ZEZvcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpOworCisgICAgdmlydHVhbCBib29sIGNv
bXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVI
ZWlnaHQpIE9WRVJSSURFCisgICAgeworICAgICAgICBtX3NlZ21lbnRSYW5nZXMuY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuIFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNv
bHZlZFNoYXBlSW5zaWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPjo6Y29tcHV0ZVNl
Z21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KTsKKyAgICB9CisKKyAgICBib29sIGhh
c1NlZ21lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsaW5lT3ZlcmxhcHNTaGFw
ZUJvdW5kcygpICYmIG1fc2VnbWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBjb25zdCBTZWdtZW50
TGlzdCYgc2VnbWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1NlZ21lbnRz
KCkpOworICAgICAgICByZXR1cm4gbV9zZWdtZW50czsKKyAgICB9CisgICAgU2VnbWVudFJhbmdl
TGlzdCYgc2VnbWVudFJhbmdlcygpIHsgcmV0dXJuIG1fc2VnbWVudFJhbmdlczsgfQorICAgIGNv
bnN0IFNlZ21lbnRSYW5nZUxpc3QmIHNlZ21lbnRSYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX3Nl
Z21lbnRSYW5nZXM7IH0KKyAgICBjb25zdCBMaW5lU2VnbWVudCogY3VycmVudFNlZ21lbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNTZWdtZW50cygpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIEFTU0VSVChtX3NlZ21lbnRSYW5nZXMuc2l6ZSgpIDwgbV9zZWdtZW50
cy5zaXplKCkpOworICAgICAgICByZXR1cm4gJm1fc2VnbWVudHNbbV9zZWdtZW50UmFuZ2VzLnNp
emUoKV07CisgICAgfQorICAgIGJvb2wgYWRqdXN0TG9naWNhbExpbmVUb3AoZmxvYXQgbWluU2Vn
bWVudFdpZHRoKTsKKworICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCB2YWx1ZSkgeyBtX25l
ZWRzTGF5b3V0ID0gdmFsdWU7IH0KKyAgICBib29sIG5lZWRzTGF5b3V0KCkgeyByZXR1cm4gbV9u
ZWVkc0xheW91dDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBjb21w
dXRlZFNoYXBlKCktPnNoYXBlUGFkZGluZ0xvZ2ljYWxCb3VuZGluZ0JveCgpOyB9CisKK3ByaXZh
dGU6CisgICAgU2hhcGVJbnNpZGVJbmZvKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKKyAg
ICA6IFNoYXBlSW5mbzxSZW5kZXJCbG9jaywgJlJlbmRlclN0eWxlOjpyZXNvbHZlZFNoYXBlSW5z
aWRlLCAmU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzPiAocmVuZGVyZXIpCisgICAgLCBtX25l
ZWRzTGF5b3V0KGZhbHNlKQorICAgIHsgfQorCisgICAgU2VnbWVudFJhbmdlTGlzdCBtX3NlZ21l
bnRSYW5nZXM7CisgICAgYm9vbCBtX25lZWRzTGF5b3V0OjE7Cit9OworCit9CisjZW5kaWYKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
dGVydmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZh
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjU1ODAzOGIyNDdjM2M4NzU3MmU1ODYwZjA4YzgxOTJiMjFiYTQ1
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnRlcnZhbC5jcHAKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSW50ZXJ2YWxYMUNvbXBhcmF0
b3IgeworICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgU2hhcGVJbnRlcnZhbCYgaTEsIGNvbnN0
IFNoYXBlSW50ZXJ2YWwmIGkyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkxLngxIDwg
aTIueDE7CisgICAgfQorfTsKKworYm9vbCBTaGFwZUludGVydmFsOjppbnRlcnNlY3QoY29uc3Qg
U2hhcGVJbnRlcnZhbCYgaSwgU2hhcGVJbnRlcnZhbCYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHgy
IDwgaS54MSB8fCB4MSA+IGkueDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBydi54MSA9
IHN0ZDo6bWF4KHgxLCBpLngxKTsKKyAgICBydi54MiA9IHN0ZDo6bWluKHgyLCBpLngyKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBzb3J0U2hhcGVJbnRlcnZhbHMoVmVjdG9yPFNoYXBl
SW50ZXJ2YWw+JiB2KQoreworICAgIHN0ZDo6c29ydCh2LmJlZ2luKCksIHYuZW5kKCksIEludGVy
dmFsWDFDb21wYXJhdG9yKCkpOworfQorCit2b2lkIG1lcmdlU2hhcGVJbnRlcnZhbHMoY29uc3Qg
VmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiB2
MiwgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+JiBydikKK3sKKyAgICBpZiAoIXYxLnNpemUoKSkKKyAg
ICAgICAgcnYuYXBwZW5kUmFuZ2UodjIuYmVnaW4oKSwgdjIuZW5kKCkpOworICAgIGVsc2UgaWYg
KCF2Mi5zaXplKCkpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgp
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFNoYXBlSW50ZXJ2YWw+IHYodjEuc2l6ZSgp
ICsgdjIuc2l6ZSgpKTsKKyAgICAgICAgU2hhcGVJbnRlcnZhbCogaW50ZXJ2YWwgPSAwOworCisg
ICAgICAgIHN0ZDo6bWVyZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCksIHYyLmJlZ2luKCksIHYyLmVu
ZCgpLCB2LmJlZ2luKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFpbnRl
cnZhbCkKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2W2ldOworICAgICAgICAgICAgZWxz
ZSBpZiAodltpXS54MSA+PSBpbnRlcnZhbC0+eDEgJiYgdltpXS54MSA8PSBpbnRlcnZhbC0+eDIp
IC8vIEZJWE1FOiAxc3QgPD0gdGVzdCBub3QgbmVlZGVkPworICAgICAgICAgICAgICAgIGludGVy
dmFsLT54MiA9IHN0ZDo6bWF4KGludGVydmFsLT54MiwgdltpXS54Mik7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKKyAgICAgICAgICAg
ICAgICBpbnRlcnZhbCA9ICZ2W2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGludGVydmFsKQorICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7CisgICAg
fQorfQorCit2b2lkIGludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUlu
dGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYgdjIsIFZlY3RvcjxTaGFw
ZUludGVydmFsPiYgcnYpCit7CisgICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKKyAgICBz
aXplX3QgdjJTaXplID0gdjIuc2l6ZSgpOworCisgICAgaWYgKCF2MVNpemUgfHwgIXYyU2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2hhcGVJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBib29s
IG92ZXJsYXAgPSBmYWxzZTsKKyAgICBzaXplX3QgaTEgPSAwOworICAgIHNpemVfdCBpMiA9IDA7
CisKKyAgICB3aGlsZSAoaTEgPCB2MVNpemUgJiYgaTIgPCB2MlNpemUpIHsKKyAgICAgICAgU2hh
cGVJbnRlcnZhbCB2MTI7CisgICAgICAgIGlmICh2MVtpMV0uaW50ZXJzZWN0KHYyW2kyXSwgdjEy
KSkgeworICAgICAgICAgICAgaWYgKCFvdmVybGFwIHx8ICF2MTIuaW50ZXJzZWN0KGludGVydmFs
LCBpbnRlcnZhbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgICAg
ICAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9
IHYxMjsKKyAgICAgICAgICAgICAgICBvdmVybGFwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2MVtpMV0ueDIgPCB2MltpMl0ueDIpCisgICAgICAgICAgICAgICAgaTEr
KzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpMisrOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICAgICAgcnYuYXBwZW5k
KGludGVydmFsKTsKKyAgICAgICAgICAgIG92ZXJsYXAgPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
ICh2MVtpMV0ueDEgPCB2MltpMl0ueDEpCisgICAgICAgICAgICAgICAgaTErKzsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpMisrOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKG92ZXJsYXApCisgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Cit9CisKK3ZvaWQgc3Vi
dHJhY3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYxLCBjb25z
dCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHYyLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mIHJ2KQor
eworICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6ZV90IHYyU2l6ZSA9IHYy
LnNpemUoKTsKKworICAgIGlmICghdjFTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXYyU2l6ZSkKKyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwor
ICAgIGVsc2UgeworICAgICAgICBzaXplX3QgaTEgPSAwLCBpMiA9IDA7CisgICAgICAgIHJ2LmFw
cGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKworICAgICAgICB3aGlsZSAoaTEgPCBy
di5zaXplKCkgJiYgaTIgPCB2MlNpemUpIHsKKyAgICAgICAgICAgIFNoYXBlSW50ZXJ2YWwmIGlu
dGVydmFsMSA9IHJ2W2kxXTsKKyAgICAgICAgICAgIGNvbnN0IFNoYXBlSW50ZXJ2YWwmIGludGVy
dmFsMiA9IHYyW2kyXTsKKworICAgICAgICAgICAgaWYgKGludGVydmFsMi54MSA8PSBpbnRlcnZh
bDEueDEgJiYgaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAgICBy
di5yZW1vdmUoaTEpOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngyIDwgaW50ZXJ2
YWwxLngxKQorICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChp
bnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgaTEgKz0gMTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGludGVydmFsMS54MSAmJiBpbnRlcnZh
bDIueDIgPCBpbnRlcnZhbDEueDIpIHsKKyAgICAgICAgICAgICAgICBydi5pbnNlcnQoaTEsIFNo
YXBlSW50ZXJ2YWwoaW50ZXJ2YWwxLngxLCBpbnRlcnZhbDIueDEpKTsKKyAgICAgICAgICAgICAg
ICBpbnRlcnZhbDEueDEgPSBpbnRlcnZhbDIueDI7CisgICAgICAgICAgICAgICAgaTIgKz0gMTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSkgewor
ICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54MjsKKyAgICAgICAgICAg
ICAgICBpMiArPSAxOworICAgICAgICAgICAgfSBlbHNlICB7IC8vIChpbnRlcnZhbDIueDIgPj0g
aW50ZXJ2YWwxLngyKQorICAgICAgICAgICAgICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54
MTsKKyAgICAgICAgICAgICAgICBpMSArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZjE0ZDhhNWE3MjMy
ZDkyZWRhM2RmZDkzNzc4YTkyY2Q2OTU0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTaGFwZUludGVydmFsX2gKKyNkZWZpbmUgU2hhcGVJbnRlcnZhbF9oCisK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IFNoYXBlSW50ZXJ2YWwgeworcHVibGljOgorICAgIGZsb2F0IHgxOworICAgIGZsb2F0IHgyOwor
CisgICAgU2hhcGVJbnRlcnZhbChmbG9hdCB4MSA9IDAsIGZsb2F0IHgyID0gMCkKKyAgICAgICAg
OiB4MSh4MSkKKyAgICAgICAgLCB4Mih4MikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpbnRl
cnNlY3QoY29uc3QgU2hhcGVJbnRlcnZhbCYsIFNoYXBlSW50ZXJ2YWwmKSBjb25zdDsKK307CisK
K3ZvaWQgc29ydFNoYXBlSW50ZXJ2YWxzKFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBt
ZXJnZVNoYXBlSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxTaGFwZUludGVydmFsPiYsIGNvbnN0IFZl
Y3RvcjxTaGFwZUludGVydmFsPiYsIFZlY3RvcjxTaGFwZUludGVydmFsPiYpOwordm9pZCBpbnRl
cnNlY3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBW
ZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKK3ZvaWQgc3Vi
dHJhY3RTaGFwZUludGVydmFscyhjb25zdCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBjb25zdCBW
ZWN0b3I8U2hhcGVJbnRlcnZhbD4mLCBWZWN0b3I8U2hhcGVJbnRlcnZhbD4mKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2hhcGVJbnRlcnZhbF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lMTkyZjY1MDVkODIxMjgzOTI4MmZhZDkzZTZlMjYzYjBkYWQyMWY0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJ
bmZvLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKworI2luY2x1
ZGUgIlNoYXBlT3V0c2lkZUluZm8uaCIKKworI2luY2x1ZGUgIlJlbmRlckJveC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7Citib29sIFNoYXBlT3V0c2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25z
dCBSZW5kZXJCb3gqIGJveCkKK3sKKyAgICBTaGFwZVZhbHVlKiB2YWx1ZSA9IGJveC0+c3R5bGUo
KS0+c2hhcGVPdXRzaWRlKCk7CisgICAgcmV0dXJuIGJveC0+aXNGbG9hdGluZ1dpdGhTaGFwZU91
dHNpZGUoKSAmJiB2YWx1ZS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlNoYXBlICYmIHZhbHVlLT5z
aGFwZSgpOworfQorCitib29sIFNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVTZWdtZW50c0Zvckxp
bmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCit7CisgICAgaWYg
KHNoYXBlU2l6ZURpcnR5KCkgfHwgbV9saW5lVG9wICE9IGxpbmVUb3AgfHwgbV9saW5lSGVpZ2h0
ICE9IGxpbmVIZWlnaHQpIHsKKyAgICAgICAgaWYgKFNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5k
ZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPjo6Y29t
cHV0ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lSGVpZ2h0KSkgeworICAgICAgICAgICAg
bV9sZWZ0U2VnbWVudFNoYXBlQm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbMF0ubG9naWNh
bExlZnQgLSBzaGFwZUxvZ2ljYWxMZWZ0KCk7CisgICAgICAgICAgICBtX3JpZ2h0U2VnbWVudFNo
YXBlQm91bmRpbmdCb3hEZWx0YSA9IG1fc2VnbWVudHNbbV9zZWdtZW50cy5zaXplKCktMV0ubG9n
aWNhbFJpZ2h0IC0gc2hhcGVMb2dpY2FsUmlnaHQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1fbGVmdFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOworICAgICAgICAg
ICAgbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5kaW5nQm94RGVsdGEgPSAwOworICAgICAgICB9Cisg
ICAgICAgIG1fbGluZVRvcCA9IGxpbmVUb3A7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2VnbWVu
dHMuc2l6ZSgpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JlNTkwNTZjYzFlZDdk
MDI0NjJlZjRhNDcxNmNkMzk3YmJlYTNkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oCkBAIC0wLDAgKzEsNjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisg
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcGVPdXRzaWRlSW5m
b19oCisjZGVmaW5lIFNoYXBlT3V0c2lkZUluZm9faAorCisjaWYgRU5BQkxFKENTU19TSEFQRVMp
CisKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAiU2hhcGVJbmZvLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQm94OworCitjbGFzcyBTaGFwZU91dHNp
ZGVJbmZvIDogcHVibGljIFNoYXBlSW5mbzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVP
dXRzaWRlLCAmU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzPiwgcHVibGljIE1hcHBlZEluZm88
UmVuZGVyQm94LCBTaGFwZU91dHNpZGVJbmZvPiB7CitwdWJsaWM6CisgICAgTGF5b3V0U2l6ZSBz
aGFwZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKHNoYXBlTG9naWNh
bExlZnQoKSwgc2hhcGVMb2dpY2FsVG9wKCkpOyB9CisKKyAgICBMYXlvdXRVbml0IGxlZnRTZWdt
ZW50U2hhcGVCb3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0U2VnbWVudFNo
YXBlQm91bmRpbmdCb3hEZWx0YTsgfQorICAgIExheW91dFVuaXQgcmlnaHRTZWdtZW50U2hhcGVC
b3VuZGluZ0JveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodFNlZ21lbnRTaGFwZUJvdW5k
aW5nQm94RGVsdGE7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5l
KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBPVkVSUklERTsKKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlT3V0c2lkZUluZm8+IGNyZWF0ZUluZm8oY29uc3Qg
UmVuZGVyQm94KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IFNoYXBlT3V0c2lkZUlu
Zm8ocmVuZGVyZXIpKTsgfQorICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZEZvcihjb25zdCBSZW5k
ZXJCb3gqKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNo
YXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRT
aGFwZSgpLT5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgU2hhcGVPdXRzaWRlSW5mbyhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSA6IFNoYXBlSW5m
bzxSZW5kZXJCb3gsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmU2hhcGU6OmdldEV4Y2x1
ZGVkSW50ZXJ2YWxzPihyZW5kZXJlcikgeyB9CisKKyAgICBMYXlvdXRVbml0IG1fbGVmdFNlZ21l
bnRTaGFwZUJvdW5kaW5nQm94RGVsdGE7CisgICAgTGF5b3V0VW5pdCBtX3JpZ2h0U2VnbWVudFNo
YXBlQm91bmRpbmdCb3hEZWx0YTsKKyAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKK307CisKK30K
KyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0V4Y2x1c2lvblNoYXBlVmFsdWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5
ZDM5NTczMjM4MmYzYjI3NmFjNTY3NmE2MmRiMTZmMDdmZWNiOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwK
LSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4Y2x1c2lvblNoYXBlVmFsdWVf
aAotI2RlZmluZSBFeGNsdXNpb25TaGFwZVZhbHVlX2gKLQotI2luY2x1ZGUgIkJhc2ljU2hhcGVz
LmgiCi0jaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRXhjbHVzaW9uU2hhcGVWYWx1ZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHsKLXB1YmxpYzoKLSAgICBlbnVt
IEV4Y2x1c2lvblNoYXBlVmFsdWVUeXBlIHsKLSAgICAgICAgLy8gVGhlIEF1dG8gdmFsdWUgaXMg
ZGVmaW5lZCBieSBhIG51bGwgRXhjbHVzaW9uU2hhcGVWYWx1ZSoKLSAgICAgICAgU2hhcGUsCi0g
ICAgICAgIE91dHNpZGUsCi0gICAgICAgIEltYWdlCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGNyZWF0ZVNoYXBlVmFsdWUoUGFzc1JlZlB0cjxC
YXNpY1NoYXBlPiBzaGFwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhj
bHVzaW9uU2hhcGVWYWx1ZShzaGFwZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEV4Y2x1c2lvblNoYXBlVmFsdWU+IGNyZWF0ZU91dHNpZGVWYWx1ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEV4Y2x1c2lvblNoYXBlVmFsdWUoT3V0c2lkZSkpOwotICAg
IH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IGNyZWF0ZUlt
YWdlVmFsdWUoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRXhjbHVzaW9uU2hhcGVWYWx1ZShpbWFnZSkpOwotICAgIH0KLQot
ICAgIEV4Y2x1c2lvblNoYXBlVmFsdWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICBCYXNpY1NoYXBlKiBzaGFwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7
IH0KLSAgICBTdHlsZUltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7
IH0KLSAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCi0gICAg
ewotICAgICAgICBpZiAobV9pbWFnZSAhPSBpbWFnZSkKLSAgICAgICAgICAgIG1faW1hZ2UgPSBp
bWFnZTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4Y2x1c2lvblNoYXBlVmFs
dWUmIG90aGVyKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNo
YXBlKQotICAgICAgICA6IG1fdHlwZShTaGFwZSkKLSAgICAgICAgLCBtX3NoYXBlKHNoYXBlKQot
ICAgIHsKLSAgICB9Ci0gICAgRXhjbHVzaW9uU2hhcGVWYWx1ZShFeGNsdXNpb25TaGFwZVZhbHVl
VHlwZSB0eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0gICAgRXhj
bHVzaW9uU2hhcGVWYWx1ZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQotICAgICAgICA6
IG1fdHlwZShJbWFnZSkKLSAgICAgICAgLCBtX2ltYWdlKGltYWdlKQotICAgIHsKLSAgICB9Ci0g
ICAgRXhjbHVzaW9uU2hhcGVWYWx1ZVR5cGUgbV90eXBlOwotICAgIFJlZlB0cjxCYXNpY1NoYXBl
PiBtX3NoYXBlOwotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBtX2ltYWdlOwotfTsKLQotfQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
CmluZGV4IGZiYmQ2ZjA5YTRkOGM2OGQ3YWExNTBlNzRiNDM0MjBiN2ViYzRjNTIuLjNiZjdkMmQ4
ZmY0ZTkyNGY4MzZiOTQ3MDk4NzkwYmQyY2ZmMWMwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtMTczMyw5ICsxNzMzLDkgQEAgdm9p
ZCBSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQoTGVuZ3RoQm94IG91dHNldCkKICAg
ICBzdXJyb3VuZC5hY2Nlc3MoKS0+Ym9yZGVyLm1faW1hZ2Uuc2V0T3V0c2V0KG91dHNldCk7CiB9
CiAKLUV4Y2x1c2lvblNoYXBlVmFsdWUqIFJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVJbnNpZGUo
KQorU2hhcGVWYWx1ZSogUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZSgpCiB7Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4sIHNPdXRzaWRl
VmFsdWUsIChFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFNoYXBlVmFsdWU+LCBzT3V0c2lkZVZhbHVlLCAo
U2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpKTsKICAgICByZXR1cm4gc091dHNpZGVW
YWx1ZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAppbmRleCA5ZGY1NzI1ZGRkNzljZjhmN2IwZDE0MzRjYjNhNTNkZWE1Y2YwYWViLi5m
OWNkMjUxMzUzYmNlZTE3ZWMwZTdlNGE0Zjc2Yzc3YjRiYzlhZjYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMzQsNyArMzQsNiBAQAogI2lu
Y2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb3VudGVyRGlyZWN0aXZlcy5oIgogI2lu
Y2x1ZGUgIkRhdGFSZWYuaCIKLSNpbmNsdWRlICJFeGNsdXNpb25TaGFwZVZhbHVlLmgiCiAjaW5j
bHVkZSAiRm9udEJhc2VsaW5lLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUgIlJlbmRl
clN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJT
aGFkb3dEYXRhLmgiCisjaW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgIlN0eWxlQmFj
a2dyb3VuZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZUJveERhdGEuaCIKICNpbmNsdWRlICJTdHls
ZURlcHJlY2F0ZWRGbGV4aWJsZUJveERhdGEuaCIKQEAgLTE0NzAsMzEgKzE0NzAsMzEgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0S2VybmluZyhTVkdMZW5ndGggaykgeyBhY2Nlc3NTVkdTdHlsZSgp
LT5zZXRLZXJuaW5nKGspOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0U2hhcGVJbnNpZGUoUGFz
c1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFNoYXBlSW5z
aWRlKFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBpZiAocmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVJbnNpZGUgPT0gdmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3NoYXBlSW5z
aWRlID0gdmFsdWU7CiAgICAgfQotICAgIEV4Y2x1c2lvblNoYXBlVmFsdWUqIHNoYXBlSW5zaWRl
KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fc2hhcGVJbnNpZGUuZ2V0
KCk7IH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVlKiByZXNvbHZlZFNoYXBlSW5zaWRlKCkgY29u
c3QKKyAgICBTaGFwZVZhbHVlKiBzaGFwZUluc2lkZSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX3NoYXBlSW5zaWRlLmdldCgpOyB9CisgICAgU2hhcGVWYWx1ZSogcmVz
b2x2ZWRTaGFwZUluc2lkZSgpIGNvbnN0CiAgICAgewotICAgICAgICBFeGNsdXNpb25TaGFwZVZh
bHVlKiBzaGFwZUluc2lkZSA9IHRoaXMtPnNoYXBlSW5zaWRlKCk7Ci0gICAgICAgIGlmIChzaGFw
ZUluc2lkZSAmJiBzaGFwZUluc2lkZS0+dHlwZSgpID09IEV4Y2x1c2lvblNoYXBlVmFsdWU6Ok91
dHNpZGUpCisgICAgICAgIFNoYXBlVmFsdWUqIHNoYXBlSW5zaWRlID0gdGhpcy0+c2hhcGVJbnNp
ZGUoKTsKKyAgICAgICAgaWYgKHNoYXBlSW5zaWRlICYmIHNoYXBlSW5zaWRlLT50eXBlKCkgPT0g
U2hhcGVWYWx1ZTo6T3V0c2lkZSkKICAgICAgICAgICAgIHJldHVybiBzaGFwZU91dHNpZGUoKTsK
ICAgICAgICAgcmV0dXJuIHNoYXBlSW5zaWRlOwogICAgIH0KIAotICAgIHZvaWQgc2V0U2hhcGVP
dXRzaWRlKFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBz
ZXRTaGFwZU91dHNpZGUoUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZU91dHNpZGUgPT0gdmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2Vzcygp
LT5tX3NoYXBlT3V0c2lkZSA9IHZhbHVlOwogICAgIH0KLSAgICBFeGNsdXNpb25TaGFwZVZhbHVl
KiBzaGFwZU91dHNpZGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9z
aGFwZU91dHNpZGUuZ2V0KCk7IH0KKyAgICBTaGFwZVZhbHVlKiBzaGFwZU91dHNpZGUoKSBjb25z
dCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9zaGFwZU91dHNpZGUuZ2V0KCk7IH0K
IAotICAgIHN0YXRpYyBFeGNsdXNpb25TaGFwZVZhbHVlKiBpbml0aWFsU2hhcGVJbnNpZGUoKTsK
LSAgICBzdGF0aWMgRXhjbHVzaW9uU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlT3V0c2lkZSgpIHsg
cmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgU2hhcGVWYWx1ZSogaW5pdGlhbFNoYXBlSW5zaWRlKCk7
CisgICAgc3RhdGljIFNoYXBlVmFsdWUqIGluaXRpYWxTaGFwZU91dHNpZGUoKSB7IHJldHVybiAw
OyB9CiAKICAgICB2b2lkIHNldENsaXBQYXRoKFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+
IG9wZXJhdGlvbikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU2hhcGVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYXBl
VmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NzRhZWViMjlmODI1Y2JhNTkzODU3YjEwOWE5ZDFhYjQ0NDlj
YjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1No
YXBlVmFsdWUuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgU2hhcGVWYWx1ZV9oCisjZGVmaW5lIFNoYXBlVmFsdWVfaAorCisjaW5jbHVkZSAi
QmFzaWNTaGFwZXMuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFwZVZhbHVlIDog
cHVibGljIFJlZkNvdW50ZWQ8U2hhcGVWYWx1ZT4geworcHVibGljOgorICAgIGVudW0gU2hhcGVW
YWx1ZVR5cGUgeworICAgICAgICAvLyBUaGUgQXV0byB2YWx1ZSBpcyBkZWZpbmVkIGJ5IGEgbnVs
bCBTaGFwZVZhbHVlKgorICAgICAgICBTaGFwZSwKKyAgICAgICAgT3V0c2lkZSwKKyAgICAgICAg
SW1hZ2UKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRl
U2hhcGVWYWx1ZShQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFwZVZhbHVlKHNoYXBlKSk7CisgICAgfQorCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRlT3V0c2lkZVZhbHVlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcGVWYWx1ZShPdXRzaWRlKSk7CisgICAgfQor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gY3JlYXRlSW1hZ2VWYWx1ZShQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFwZVZhbHVlKGltYWdlKSk7CisgICAgfQorCisgICAgU2hhcGVWYWx1ZVR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEJhc2ljU2hhcGUqIHNoYXBlKCkgY29u
c3QgeyByZXR1cm4gbV9zaGFwZS5nZXQoKTsgfQorICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBpbWFnZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ltYWdlICE9IGltYWdl
KQorICAgICAgICAgICAgbV9pbWFnZSA9IGltYWdlOworICAgIH0KKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgU2hhcGVWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhl
ci50eXBlKCk7IH0KKworcHJpdmF0ZToKKyAgICBTaGFwZVZhbHVlKFBhc3NSZWZQdHI8QmFzaWNT
aGFwZT4gc2hhcGUpCisgICAgICAgIDogbV90eXBlKFNoYXBlKQorICAgICAgICAsIG1fc2hhcGUo
c2hhcGUpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlKFNoYXBlVmFsdWVUeXBlIHR5cGUp
CisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlKFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCisgICAgICAgIDogbV90eXBlKEltYWdlKQorICAg
ICAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKyAgICBTaGFwZVZhbHVlVHlwZSBt
X3R5cGU7CisgICAgUmVmUHRyPEJhc2ljU2hhcGU+IG1fc2hhcGU7CisgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IG1faW1hZ2U7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKaW5k
ZXggZjIzMWRhNjAxOGQxNWRiZTE4ODVjZjBkMmUxYWVjMjlmZWVlMzhiMS4uMTE2MjViM2RlYjdl
YzlmYTI1YjM1NWY1YjBmMDgzZDE3ZTdmYzkzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCkBAIC0z
MCwxMCArMzAsMTAgQEAKICNpbmNsdWRlICJDb3VudGVyRGlyZWN0aXZlcy5oIgogI2luY2x1ZGUg
IkN1cnNvckRhdGEuaCIKICNpbmNsdWRlICJEYXRhUmVmLmgiCi0jaW5jbHVkZSAiRXhjbHVzaW9u
U2hhcGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZpbGxMYXllci5oIgogI2luY2x1ZGUgIkxpbmVDbGFt
cFZhbHVlLmgiCiAjaW5jbHVkZSAiTmluZVBpZWNlSW1hZ2UuaCIKKyNpbmNsdWRlICJTaGFwZVZh
bHVlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTM2LDggKzEzNiw4IEBAIHB1YmxpYzoK
IAogICAgIExlbmd0aFNpemUgbV9wYWdlU2l6ZTsKIAotICAgIFJlZlB0cjxFeGNsdXNpb25TaGFw
ZVZhbHVlPiBtX3NoYXBlSW5zaWRlOwotICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBt
X3NoYXBlT3V0c2lkZTsKKyAgICBSZWZQdHI8U2hhcGVWYWx1ZT4gbV9zaGFwZUluc2lkZTsKKyAg
ICBSZWZQdHI8U2hhcGVWYWx1ZT4gbV9zaGFwZU91dHNpZGU7CiAgICAgTGVuZ3RoIG1fc2hhcGVN
YXJnaW47CiAgICAgTGVuZ3RoIG1fc2hhcGVQYWRkaW5nOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRl
eCAxOWJiNGVjYTZhZDNjNzRhNGY1ODRjYzczYTc2MjY4ZmY5ZDhlMjRhLi4yZmI4ODlkZmUyMTdk
ODEwMmJkYjFkNWNlNDIwZTFmMzFlZDdiZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTQxLDYg
KzQxLDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL3RleHQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3JlbmRlcmluZyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3No
YXBlcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3N0eWxlIgogICAgICIke1dFQkNP
UkVfRElSfS9zdG9yYWdlIgogICAgICIke1dFQkNPUkVfRElSfS9zdmciCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDNmODhhODM2YWVlMTI3MGI5YmEwOTg4ZTBiOGI1MjUyZmE5ZTdhNjkuLjAwNmZj
NTk1NTExZDE5ZTBmMDA3OGE1Y2Y1MDg2YTE0MzA3NTQwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0
CkBAIC05Myw2ICs5Myw3IEBAIHNldChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lu
cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nIgorICAgICIke1dFQkNPUkVfRElSfS9y
ZW5kZXJpbmcvc2hhcGVzIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3R5bGUiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3N0b3JhZ2UiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2ZyIKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxZTU3OTgw
ZTEyZTEzNGNmNjZmYTJkYzljNGRhZDFkM2ZlNjYzOTI0Li5mZjhmY2M4NmM2YWQ5ZDVlMGU1MTBi
M2U5MDcyZGM0MmJjOGVmMTg2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDYtMTAgIEJlYXIgVHJhdmlzICA8
YmV0cmF2aXNAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgU2hhcGVzXVtDU1MgRXhjbHVzaW9u
c10gU3BsaXQgQ1NTIEV4Y2x1c2lvbnMgYW5kIENTUyBTaGFwZXMgY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MTYyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleGFuZHJ1IENoaWN1bGl0YS4KKworICAgICAgICBBZGRpbmcgdGhlIFdlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcyBkaXJlY3RvcnkgdG8gdGhlIGluY2x1ZGUgbGlzdC4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dDoKKwogMjAxMy0wNi0wOSAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10g
VW5yZXZpZXdlZCB0ZXN0IGNvcnJlY3Rpb246ICBQcmV2ZW50IER1bXBSZW5kZXJUcmVlIGNyYXNo
ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAppbmRleCBjZGQ2YTk5OGI3
MDVlMTBiMTc2YjI2ODdhYzA3MGEwOGRjZDIxYTM4Li45OTgwMTkxMjExZDMzZjg0YzZkMjIyMDNk
NGNlMTEyNDM5Y2MzN2FiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01h
a2VMaXN0cy50eHQKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0
CkBAIC03Nyw2ICs3Nyw3IEBAIHNldChEdW1wUmVuZGVyVHJlZV9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwCiAgICAgJHtXRUJDT1JF
X0RJUn0vcGx1Z2lucwogICAgICR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZworICAgICR7V0VCQ09S
RV9ESVJ9L3JlbmRlcmluZy9zaGFwZXMKICAgICAke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3R5
bGUKICAgICAke1dFQkNPUkVfRElSfS9oaXN0b3J5CiAgICAgJHtXRUJDT1JFX0RJUn0vbG9hZGVy
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>