<?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>215443</bug_id>
          
          <creation_ts>2020-08-13 01:04:25 -0700</creation_ts>
          <short_desc>Move scroll / overflow handling out of RenderLayer</short_desc>
          <delta_ts>2020-08-13 16:05:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>60305</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=60305</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mkwst</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1679940</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 01:04:25 -0700</bug_when>
    <thetext>Per recent discussions between Igalia / Apple, it would be nice to split up RenderLayer into a lean, base class and a derived class which contains all scroll / overflow handling (&quot;RenderLayerScrollable&quot;).

I propose to first move all scroll / overflow handling from RenderLayer to RenderLayerScrollable, and as next step only create RenderLayerScrollable objects if needed -- this should be a performance progression for many scenarios.

I&apos;ll upload an initial draft patch to discuss the design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679942</commentid>
    <comment_count>1</comment_count>
      <attachid>406501</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 01:11:40 -0700</bug_when>
    <thetext>Created attachment 406501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679944</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 01:14:12 -0700</bug_when>
    <thetext>Eww 320k :-( The majority of the patch size is moving methods 1:1, unmodified, from RenderLayer to RenderLayerScrollable.

@smfr, would be nice if you could have a look at the general design.
I&apos;m open for improvements, as always!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679975</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 07:35:55 -0700</bug_when>
    <thetext>Needs some iterations, I likely missed win/ios/mac specific build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679976</commentid>
    <comment_count>4</comment_count>
      <attachid>406515</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 07:36:58 -0700</bug_when>
    <thetext>Created attachment 406515
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680086</commentid>
    <comment_count>5</comment_count>
      <attachid>406545</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 14:54:15 -0700</bug_when>
    <thetext>Created attachment 406545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680088</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-13 15:01:10 -0700</bug_when>
    <thetext>Please dup this bug to 60305 and continue work there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680138</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 16:05:09 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 60305 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406501</attachid>
            <date>2020-08-13 01:11:40 -0700</date>
            <delta_ts>2020-08-13 07:36:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215443-20200813101138.patch</filename>
            <type>text/plain</type>
            <size>327896</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg5YTZiNjkyYjFlNzUy
MDQ2YjBhZDI5YjY0NTM1NDM3ODAxYzVhOC4uNzM0MTJhYjIzYWE3YWU5YjkyNGZlZGU1ZjY4M2I5
MTE5MzdkNjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4NCBAQAorMjAyMC0wOC0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBNb3Zl
IHNjcm9sbCAvIG92ZXJmbG93IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDQzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5
ZXIgaW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBN
b3ZlIGFsbCBzY3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGlu
dG8KKyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSBy
ZWR1Y2VzIHRoZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNs
ZWFucyB1cCB0aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNy
ZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNo
ZXMgd2lsbCBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1h
bmQsIGlmCisgICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2Fy
eS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVh
ZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6
CisgICAgICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlIGNvbnN0KToKKyAgICAgICAgKiBo
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJ
bnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xv
c2luZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVW
aWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFp
bnRDb250ZW50cyk6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL0hp
Z2hsaWdodERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6Y2xlYXJT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxlY3Rp
b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Ny
b2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxIZWln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsVG9wIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldHVwV2hlZWxFdmVudE1vbml0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlVmVydGljYWxTY3Jv
bGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZUhv
cml6b250YWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnBhblNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFBv
c2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUJhY2tn
cm91bmRJc0tub3duVG9CZU9ic2N1cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
b3ZlcmZsb3dDbGlwUmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
b21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZp
bGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6YXV0b3Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6b3ZlcmZsb3dUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92
ZXJmbG93Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVy
Zmxvd0xlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93
UmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRp
emF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Om91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRT
Y3JvbGxpbmdTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZs
b3dTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpl
bmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1VzZXJT
Y3JvbGxJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNoRXZlbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNBc3lu
Y1Njcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNj
cm9sbERlbHRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYW5T
Y3JvbGxGcm9tUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9z
aXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRv
WVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRT
Y3JvbGxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG8pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
blJlc2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cmVzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3Jv
bGxPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9s
bGluZ05vZGVJRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc0FjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNp
YmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlz
aWJsZVNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmNvbnRlbnRzU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9s
bEFuaW1hdGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmRpZFN0YXJ0U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpkaWRFbmRTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmRpZFVwZGF0ZVNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNS
ZWN0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsYmFyT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZlcnRpY2Fs
U2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpyZW5kZXJlckZvclNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNlRGFya0FwcGVhcmFu
Y2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZVNuYXBPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpp
c1Njcm9sbFNuYXBJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNPdmVyZmxvd0NvbnRy
b2xzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwb3Np
dGlvbk92ZXJmbG93Q29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGxIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc0hvcml6b250YWxPdmVy
ZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFz
VmVydGljYWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzdHls
ZVJlcXVpcmVzU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRGVm
aW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRl
cnNlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250
cm9sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludE92ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
T3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250
cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0
aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJl
bGF0aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGlu
Z1JvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVT
eW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFNj
cm9sbGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxX
aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFuU2Nyb2xsRnJv
bVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
QnlSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0UG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRV
cGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNP
dmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6aXNQb2ludEluUmVzaXplQ29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5l
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50
T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlv
bkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjps
YXllckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2
ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZURlZmluZXNBdXRvbWF0
aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpyZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0
aWNhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbENv
cm5lclZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21D
b250YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyaGFu
Z0Ftb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3VsZFN1c3BlbmRTY3JvbGxB
bmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dy
ZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9y
Y2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxTbmFw
SW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9s
bENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0
ZVJlc2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNsZWFyUmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
TWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0
ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxi
YXJTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVy
TWFycXVlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlT
aW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIw
LTA4LTEwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4IGJhZCBtZXJnZSBpbiByMjY1NDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhNmNhNTQx
MGM0MWFmZmViMWJiNWVkMTA2YTZhZDE5M2IzYmFmMzc4Li5jMmY3M2JiMmM5ZGQ3ZTJjNzE5OWM0
NTUwNDEwNTQzZThmYjUzMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzOTEsNiArMTM5MSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisgICAgcmVuZGVyaW5n
L1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0
LmgKICAgICByZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAyN2UyZDYzNmE4MWJlMjI0OTI2ODg5MmE3Y2JhY2I3ZDRj
YjgwZWNjLi43ZjllNDJkMTRlYmIxMDc2YWI0M2IzYzljMTQ2Mjc2YjFmOTc5MjY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMjEyNyw2ICsyMTI3LDcgQEAgcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAorcmVuZGVyaW5n
L1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDY4NzM4MmQ5YjhiMTdhNjQ2MzBkNjM3NGRhZTQzNGFkOWJl
ODM5NjAuLmEzZDQ2ZThmY2ViMWIwNTU5MDJmYjA1NDU4ZWMxY2QwZDA4ZDA5Y2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMw
OSw2ICszMDksNyBAQAogCQkwRjU4MEIwRTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXll
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MENGRDBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGOTBGMTJERTlCMDA1MUQ2ODkgLyog
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVy
QmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNTgwQ0ZGMEYxM0FC
OUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxM0FCOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNr
aW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovOyB9
OwogCQkwRjU4MEZBRjE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBRTE0OTgw
MEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8q
IFJlbmRlckVtYmVkZGVkT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRP
YmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNTkyNCw2ICs1OTI1LDggQEAKIAkJMEY1ODBDRkEwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyQmFja2luZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MENGQzBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckxheWVyQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTgw
Q0ZCMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTgwQ0ZDMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJM
YXllclNjcm9sbGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlRpbGVkQmFja2luZ0xheWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkEyMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJU
aWxlZEJhY2tpbmdMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlRpbGVkQmFja2luZ0xheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjU4MEZBRTE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg3NjMsNiArMjg3NjYsOCBAQAogCQkJCTBGNTNGQjg5
MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLywKIAkJCQkzQzI0NEZF
NUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgKi8sCiAJCQkJ
M0MyNDRGRTRBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCAqLywK
KwkJCQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNw
cCAqLywKKwkJCQkwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlLmggKi8sCiAJCQkJMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0
YXRlLmNwcCAqLywKIAkJCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0
U3RhdGUuaCAqLywKIAkJCQlCQzMzRkIxQTBGMzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJv
eExpc3QuY3BwICovLApAQCAtMzMxMTYsNiArMzMxMjEsNyBAQAogCQkJCTBGNTgwQ0ZGMEYxMkRF
OUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTNDMjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVs
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjU4MENGRjBGMTNBQjlCMDA1MUQ2ODkgLyog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDkwNjYwNzBCRTE0
MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBC
RTAzMEEyMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxpbmVCcmVhay5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzYzQ0ZWM4OTg0YjY3ZjZjYTk4
YjcwOTdmNDdjNjAyNmQ4NTY1NDE3Li5hMmVkYmE0YTk2NDgzMjFjOGRkZjFhNzcyMTA2NzQ1Zjcx
M2JjMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJl
bmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM5
MTYsNyArMzkxNiw4IEBAIFNjcm9sbGFibGVBcmVhKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpnZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSgpIGNvbnN0CiAgICAgaWYgKCFib3guY2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAgIEFTU0VSVChib3guc2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgIHJldHVybiBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiB9CiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdApAQCAtMzkyOSw3ICszOTMwLDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3JvbGxQb3NpdGlv
bj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0
KHBvaW50KTsKKyAgICBBU1NFUlQoYm94LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBib3guc2Ny
b2xsYWJsZUxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKIH0KIAogI2lmIEVOQUJMRShN
QVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggODgwMmVkMDRlYTMzMzBlOTU3ZGJhMDFj
MTcxNjI0NDUxZWM0NDRjZC4uODgwNGExNmJlYzE0Y2QwMmYwN2FlZmE2OWJmOWIxMjA2ZDI2ZDMx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtODksOSArODksOSBAQAogI2luY2x1ZGUgIlBz
ZXVkb0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29t
cG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJl
bmRlclRyZWVVcGRhdGVyLmgiCkBAIC0xMzA4LDggKzEzMDgsOCBAQCB2b2lkIEVsZW1lbnQ6OnNl
dFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCiAgICAgICAgIGludCBjbGFtcGVkTGVmdCA9IGNsYW1w
VG9JbnRlZ2VyKG5ld0xlZnQgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwog
ICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3Jv
bGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRT
Y3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsTGVmdChjbGFtcGVkTGVmdCwg
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0
ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIo
KSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNo
ZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRl
cmVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0
U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC0xMzMy
LDggKzEzMzIsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAg
ICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2VyKG5ld1RvcCAqIHJlbmRlcmVyLT5z
dHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
ID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1h
dGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5z
ZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5z
ZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJx
dWVlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHAKaW5kZXggMGFkZjdkMTY0ZTJlNGUyYjBmYjExM2YwM2ExYmQzYTczYzI3MTI3NS4uMDQ4ZjA1
MGY4MWE4NjFjMTQ0NzEwNDljZDYyNTUzZGEwMGU5ODEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTc1LDcgKzE3NSw4IEBAIFJlbmRlck1h
cnF1ZWUqIEhUTUxNYXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5oYXNMYXllcigpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+
bWFycXVlZSgpOworICAgIEFTU0VSVChyZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5zY3JvbGxhYmxl
TGF5ZXIoKSk7CisgICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPnNjcm9sbGFibGVM
YXllcigpLT5tYXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWZiNmQ4
YzU5MWQ3ZmZmZDQ0ZTFjNDQyNjc4NmEzLi43MjIyNGY5NTEwYTk2OWY3ZDRhZGFhNDFjNjhiOTU3
ODFlY2I5MGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0
VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3Bw
CkBAIC00OCw3ICs0OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNDksNyArMjQ5
LDcgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAo
IWlubmVyVGV4dFJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBpbm5lckxh
eWVyID0gaW5uZXJUZXh0UmVuZGVyZXItPmxheWVyKCk7CisgICAgYXV0byogaW5uZXJMYXllciA9
IGlubmVyVGV4dFJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICBpZiAoIWlubmVyTGF5
ZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmlu
ZGV4IGE2YTYyYWM5ZjZlZWNhNDUwMWNkNDdhNWYwMGUwZTUxZmY3NjEzOTIuLmI1MDJlZGFhYTlk
YTQ3OGM5ZDA3NzE4ZjY4MTM2YTY2NTMwODhhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgog
I2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0zNDMsMTIgKzM0MywxNCBAQCBz
dGF0aWMgYm9vbCBoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChOb2Rl
KiBzdGFydE5vZGUsIGNvbnN0IFdoZQogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7
CiAgICAgICAgIGlmIChSZW5kZXJMYXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94
LT5sYXllcigpKSB7CiAgICAgICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50
LnVuZGVybHlpbmdQbGF0Zm9ybUV2ZW50KCk7Ci0gICAgICAgICAgICBib29sIHNjcm9sbGluZ1dh
c0hhbmRsZWQ7Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgewotICAgICAgICAgICAg
ICAgIGF1dG8gY29waWVkRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5jb3B5V2l0aERlbHRhc0FuZFZl
bG9jaXR5KGZpbHRlcmVkUGxhdGZvcm1EZWx0YS53aWR0aCgpLCBmaWx0ZXJlZFBsYXRmb3JtRGVs
dGEuaGVpZ2h0KCksIGZpbHRlcmVkVmVsb2NpdHkpOwotICAgICAgICAgICAgICAgIHNjcm9sbGlu
Z1dhc0hhbmRsZWQgPSBib3hMYXllci0+aGFuZGxlV2hlZWxFdmVudChjb3BpZWRFdmVudCk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0g
ZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXIsIHdoZWVsRXZlbnQpOworICAgICAg
ICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
YXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gYm94TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBjb3BpZWRFdmVudCA9IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVs
b2NpdHkoZmlsdGVyZWRQbGF0Zm9ybURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0
YS5oZWlnaHQoKSwgZmlsdGVyZWRWZWxvY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9s
bGluZ1dhc0hhbmRsZWQgPSBib3hMYXllclNjcm9sbGFibGUtPmhhbmRsZVdoZWVsRXZlbnQoY29w
aWVkRXZlbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxpbmdXYXNIYW5kbGVkID0gZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXJT
Y3JvbGxhYmxlLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KHNjcm9sbGluZ1dhc0hhbmRsZWQpIHsKICAgICAgICAgICAgICAgICBzdG9wRWxlbWVudCA9IGN1
cnJlbnRFbmNsb3NpbmdCb3gtPmVsZW1lbnQoKTsKQEAgLTE1NjgsNyArMTU3MCw3IEBAIE9wdGlv
bmFsPEN1cnNvcj4gRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBib29sIHNoCiAgICAgICAgIGJvb2wgaW5SZXNpemVyID0gZmFsc2U7CiAgICAg
ICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAg
Ly8gRklYTUU6IFdpdGggcmlnaHQtYWxpZ25lZCB0ZXh0IGluIGEgYm94LCB0aGUgcmVuZGVyZXIg
aGVyZSBpcyB1c3VhbGx5IGEgUmVuZGVyVGV4dCwgd2hpY2ggcHJldmVudHMgc2hvd2luZyB0aGUg
cmVzaXplIGN1cnNvcjogd2Via2l0Lm9yZy9iLzIxMDkzNS4KLSAgICAgICAgICAgIGlmIChhdXRv
KiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5
ZXIoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5
ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIoKSkgewogICAgICAgICAg
ICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJ
bnRQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluUmVz
aXplcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNv
dXRoRWFzdFJlc2l6ZUN1cnNvcigpOwpAQCAtMTgxMiwxMiArMTgxNCwxNCBAQCBib29sIEV2ZW50
SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
cGxhdGZvcm1Nb3VzZQogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJl
bmRlcmVyKCkgPyBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IG51
bGxwdHI7CiAgICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG1vdXNlRXZlbnQu
aGl0VGVzdFJlc3VsdCgpLmxvY2FsUG9pbnQoKSk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5p
c1BvaW50SW5SZXNpemVDb250cm9sKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJ
blJlc2l6ZU1vZGUodHJ1ZSk7Ci0gICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKLSAgICAg
ICAgbV9vZmZzZXRGcm9tUmVzaXplQ29ybmVyID0gbGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3Ju
ZXIobG9jYWxQb2ludCk7Ci0gICAgICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOworICAgICAgICAgICAgbV9yZXNp
emVMYXllciA9IHNjcm9sbGFibGVMYXllcjsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6
ZUNvcm5lciA9IHNjcm9sbGFibGVMYXllci0+b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBv
aW50KTsKKyAgICAgICAgICAgIGludmFsaWRhdGVDbGljaygpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENh
cmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7CkBAIC0xOTE4LDEwICsxOTIyLDEwIEBAIFNjcm9s
bGFibGVBcmVhKiBFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5v
ZGUpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3Np
bmdMYXllcigpOwotICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFs
YXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKICAgICAgICAg
ICAgIGlmICghc2Nyb2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCmluZGV4IDYxNzkwNWUwMWIxZGRmMGQxZTBjMWQ0ZWViODM0OGU3OWVhYmIy
YTEuLjg3MTliYTAzNjU2YmE3ODc4OTRiMzU1ZTFlNTAzNDQ1YTA5ZTIyZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaApAQCAtODMsNyArODMsNyBAQCBjbGFzcyBQbGF0Zm9ybVRvdWNo
RXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFz
cyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBSZW5kZXJMYXllclNj
cm9sbGFibGU7CiBjbGFzcyBSZW5kZXJXaWRnZXQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNs
YXNzIFNjcm9sbGJhcjsKQEAgLTU1MCw3ICs1NTAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBt
X3N2Z1BhbiB7IGZhbHNlIH07CiAKLSAgICBSZW5kZXJMYXllciogbV9yZXNpemVMYXllciB7IG51
bGxwdHIgfTsKKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fcmVzaXplTGF5ZXIgeyBudWxs
cHRyIH07CiAKICAgICBSZWZQdHI8RWxlbWVudD4gbV9jYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1l
bnQ7CiAgICAgYm9vbCBtX2V2ZW50SGFuZGxlcldpbGxSZXNldENhcHR1cmluZ01vdXNlRXZlbnRz
RWxlbWVudCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggODMyYTBk
NWZlOTViZGIzOTdlMWI4YWJmYmJhZWRiODgxNzk2ZjQ5Yy4uNGE1YWM5ZmEzN2IwNDE0OGUxYThk
NTk5Yjg4MjgzYTI3YjNiMjRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNzYs
OSArNzYsOSBAQAogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5k
ZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTYxLDcgKzI1NjEsOCBAQCB2
b2lkIEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAg
aWYgKCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0g
dGhpcy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMo
KTsKLSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworICAgICAgICAgICAgQVNTRVJUKHJlbmRlclZpZXctPnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNjcm9sbGFibGVMYXll
cigpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTM4MzMsMTAgKzM4MzQsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIEZyYW1l
Vmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGF1dG8qIGxheWVyID0gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIo
KTsKLSAgICBpZiAoIWxheWVyKQorICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXll
cigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3Ojpz
Y3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApAQCAtNDMxMSw4ICs0MzEyLDEw
IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXIt
PnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExh
eW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdp
blBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJl
bmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJM
YXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2
ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVy
LT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2
aW9yLCByZW5kZXJlcik7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJvb3RMYXll
ci0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0
LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworICAgIH0KIAogICAgIGRp
ZFBhaW50Q29udGVudHMoY29udGV4dCwgZGlydHlSZWN0LCBwYWludGluZ1N0YXRlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKaW5kZXggNGQ4YjcyZjhlNWJj
YjBlODMyZDNlYzNkZGMyZWU5MjkyYjQ5ZmU4Ni4uZGIxYTRlYmRlZDJmYWRkMWZmZjBiNWJkYjJh
OTgwMDQxZGZhZjhmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHAKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzk0LDcgKzM5NCwxMSBAQCBib29sIHNjcm9sbElu
RGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY29udGFpbmVyLT5y
ZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXpl
KGR4LCBkeSkpOworICAgICAgICBhdXRvKiBlbmNsb3NpbmdMYXllciA9IGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgIEFTU0VSVChlbmNsb3NpbmdMYXll
cik7CisKKyAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSA9IGVuY2xv
c2luZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGVuY2xvc2luZ0xheWVy
U2Nyb2xsYWJsZS0+c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGln
aHREYXRhLmNwcAppbmRleCBlNWE0N2I3MDc0ZGNjOTMxZGIwMDM3NzgzYTNlMjlhZmQ3ZmRkZTQz
Li5hZWU1MGIwOWE5MzBkYzM5NTUzMDZmZWMxNDUwY2I3N2FkYzcwMjY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmFuZ2Uu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAt
MjA5LDcgKzIwOSw4IEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6c2V0U2VsZWN0aW9uKGNvbnN0IFJl
bmRlclJhbmdlJiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrCiAKIHZvaWQgSGlnaGxpZ2h0
RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBh
aW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgQVNTRVJUKG1fcmVuZGVyVmlldy5zY3JvbGxh
YmxlTGF5ZXIoKSk7CisgICAgbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5yZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKCk7CiAgICAgc2V0U2VsZWN0aW9uKHsgfSwgSGlnaGxpZ2h0RGF0
YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsKIH0KIApAQCAtMzE5LDggKzMyMCwxMCBAQCB2
b2lkIEhpZ2hsaWdodERhdGE6OmFwcGx5U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBuZXdT
ZWxlY3Rpb24sIFJlcGFpbnRNb2RlCiAgICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0
aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpOwog
ICAgIH0KIAotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2RlOjpOb3RoaW5n
KQotICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNC
b3VuZHMoKTsKKyAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGlu
ZykgeworICAgICAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpKTsKKyAg
ICAgICAgbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kcygpOworICAgIH0KIAogICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3Rh
dGUgaGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4g
YW5kCiAgICAgLy8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmplY3RzIGxpc3QuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA2YjUzY2JhODVjOGU5ZGM1OTcxNWI2
MzhjYWU1NzVmODBlNDhmOTU0Li5hNjdjYjIyYzIzZDMzZjMzOGM4YTBhNjY0ZmViNTkyZTBmOTA2
YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTU4LDcg
KzU4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgogI2luY2x1ZGUgIlJl
bmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNTUzLDcgKzU1Myw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9u
KCkKIAogICAgIGZvciAoYXV0byogYmxvY2sgOiBibG9ja3NUb1VwZGF0ZSkgewogICAgICAgICBB
U1NFUlQoYmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKTsKLSAgICAgICAgYmxvY2stPmxheWVyKCkt
PnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworICAgICAgICBpZiAoYmxvY2stPnNjcm9s
bGFibGVMYXllcigpKQorICAgICAgICAgICAgYmxvY2stPnNjcm9sbGFibGVMYXllcigpLT51cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3Zl
cmZsb3coKTsKICAgICB9CiB9CkBAIC01ODQsOCArNTg1LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+dXBkYXRlU2Ny
b2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigpKQorICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiB9CiAK
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCkBAIC0xMTA5LDEyICsxMTEwLDE1IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpCiAgICAgaWYgKHB1c2hlZENsaXApCiAgICAgICAgIHBvcENvbnRlbnRz
Q2xpcChwYWludEluZm8sIHBoYXNlLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIAorICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIE91ciBzY3JvbGxi
YXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVsbCB0aGVtIHRvLCBzbyB0aGF0IHRo
ZXkgd29yayBwcm9wZXJseSB3aXRoCiAgICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2Ug
cGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2ls
bAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFz
ZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6
Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKICAg
ICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBw
YWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50
Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250
cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9m
ZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CisgICAgICAgIHNjcm9sbGFi
bGVMYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91
bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludElu
Zm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0xNDY5LDE2
ICsxNDczLDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPCiAKICAgICAgICAgTGF5b3V0UmVj
dCBnYXBSZWN0c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHMoKnRoaXMsIHBhaW50T2Zmc2V0LCBMYXlv
dXRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIGNhY2hlLCAmcGFpbnRJbmZv
KTsKICAgICAgICAgaWYgKCFnYXBSZWN0c0JvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byogbGF5ZXJTY3JvbGxhYmxlID0gZW5jbG9zaW5nTGF5ZXIoKSA/IGVuY2xvc2lu
Z0xheWVyKCktPnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0cikgewogICAgICAgICAgICAgICAg
IGdhcFJlY3RzQm91bmRzLm1vdmVCeSgtcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlm
ICghaGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGxvY2FsQm91
bmRzKGdhcFJlY3RzQm91bmRzKTsKICAgICAgICAgICAgICAgICAgICAgZmxpcEZvcldyaXRpbmdN
b2RlKGxvY2FsQm91bmRzKTsKLSAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBs
b2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCAmbGF5ZXItPnJlbmRl
cmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChs
YXllci0+cmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ2FwUmVj
dHNCb3VuZHMubW92ZUJ5KGxheWVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsUG9zaXRpb24oKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQo
RmxvYXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU2Nyb2xs
YWJsZS0+cmVuZGVyZXIoKS5pc0JveCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ2FwUmVj
dHNCb3VuZHMubW92ZUJ5KGxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0
aW9uKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYXllci0+YWRkQmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzKGdhcFJlY3RzQm91bmRzKTsKKyAgICAgICAgICAgICAgICBs
YXllclNjcm9sbGFibGUtPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhnYXBSZWN0c0JvdW5k
cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDAxLDcgKzIwMDUsMTAg
QEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG8KICAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJm
bG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAt
IHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKKyAgICBpZiAoIXNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxh
eWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxv
Y2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9
CiAKIE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CkBAIC0yNDk4LDkg
KzI1MDUsMTEgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGlu
ZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW4KICAgICAgICAgLy8gKHRoZSBjb250
ZW50IGluc2lkZSB0aGVtIG1vdmVzKS4gIFRoaXMgbWF0Y2hlcyBXaW5JRSBhcyB3ZWxsLCB3aGlj
aCBqdXN0IGJvdHRvbS1hbGlnbnMgdGhlbS4KICAgICAgICAgLy8gV2UgYWxzbyBnaXZlIHVwIG9u
IGZpbmRpbmcgYSBiYXNlbGluZSBpZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFyLCBvciBp
ZiB3ZSBhcmUgc2Nyb2xsZWQKICAgICAgICAgLy8gdmVydGljYWxseSAoZS5nLiwgYW4gb3ZlcmZs
b3c6aGlkZGVuIGJsb2NrIHRoYXQgaGFzIGhhZCBzY3JvbGxUb3AgbW92ZWQpLgotICAgICAgICBi
b29sIGlnbm9yZUJhc2VsaW5lID0gKGxheWVyKCkgJiYgKGxheWVyKCktPm1hcnF1ZWUoKSB8fCAo
ZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFy
KCkgfHwgbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueSgpICE9IDApCi0gICAgICAgICAgICA6IChs
YXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCku
eCgpICE9IDApKSkpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7Ci0g
ICAgICAgIAorICAgICAgICBib29sIGhhc01hcnF1ZWUgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNj
cm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCkgOiBudWxscHRyOworICAgICAgICBib29sIGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyKCkgPyAoc2Nyb2xsYWJsZUxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgp
LnkoKSkgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gc2Ny
b2xsYWJsZUxheWVyKCkgPyAoc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIo
KSB8fCBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpKSA6IGZhbHNlOworICAg
ICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0gKGhhc01hcnF1ZWUgfHwgKGRpcmVjdGlvbiA9PSBI
b3Jpem9udGFsTGluZSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyIDogaGFzSG9yaXpvbnRhbFNjcm9s
bGJhcikpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7CisKICAgICAg
ICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gT3B0aW9uYWw8
aW50PigpIDogaW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rpb24pOwogICAgICAgICAKICAgICAg
ICAgaWYgKGlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggZTIxM2FhYzcxYTk0NDU4NzNlMjE2MDQx
NjRlNDE0NDU4YjA2Y2E5MC4uYzUxYzUwY2U1N2JkYWUwMDM1NGFkZDI5NDJkMWNjZTc0OGRjMzgy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAg
LTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgog
I2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1p
bkxvZ2ljYWxXaWR0aCwKIAogICAgIGlmICghc3R5bGUoKS5hdXRvV3JhcCgpICYmIGNoaWxkcmVu
SW5saW5lKCkpIHsKICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUgd2l0aCBpbmxpbmUg
Y2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCi0gICAgICAgIGlmIChsYXllcigpICYmIGxh
eWVyKCktPm1hcnF1ZWUoKSAmJiBsYXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpvbnRhbCgpKQor
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1
ZWUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAg
ICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDhmYTZkZmIzNDllMmYzY2NkZmM3N2JlNWQxMWMyODlj
N2UwNGY1MTEuLjc1NGJmMzM3N2YwNDdmYTJhYzE2NDNhMWQ2MDljNDI2NTFkZGYyMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC01OCw4ICs1OCw4IEBACiAjaW5j
bHVkZSAiUmVuZGVyR3JpZC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRp
Q29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMzE5LDExICsz
MTksMTEgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIC8vIElmIG91ciB6b29tIGZh
Y3RvciBjaGFuZ2VzIGFuZCB3ZSBoYXZlIGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1RvcCwgd2UgbmVl
ZCB0byBhZGp1c3QgdGhhdCB2YWx1ZSBpbnRvIHRoZQogICAgIC8vIG5ldyB6b29tZWQgY29vcmRp
bmF0ZSBzcGFjZS4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiBvbGRT
dHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpv
b20oKSkgewotICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IGxheWVyKCkt
PnNjcm9sbFBvc2l0aW9uKCk7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFi
bGVMYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3
U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBv
c2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgICAgIGZs
b2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxl
LT5lZmZlY3RpdmVab29tKCk7CiAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpvb21TY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihz
Y3JvbGxQb3NpdGlvbik7CisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5zZXRQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAgIH0KIAogICAgIC8vIE91ciBvcGFx
dWVuZXNzIG1pZ2h0IGhhdmUgY2hhbmdlZCB3aXRob3V0IHRyaWdnZXJpbmcgbGF5b3V0LgpAQCAt
NTQyLDggKzU0Miw4IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpjbGllbnRIZWlnaHQoKSBjb25z
dAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxX
aWR0aCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxXaWR0aCgpOwogICAgIC8v
IEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAg
IC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIGlm
IChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewpAQCAtNTU1LDggKzU1NSw4IEBA
IGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Ny
b2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSkKLSAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhlaWdodCgpOworICAgIGlmIChoYXNP
dmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZp
c2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVlZCB0byB3
b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
dXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgpA
QCAtNTY1LDEyICs1NjUsMTIgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QK
IAogaW50IFJlbmRlckJveDo6c2Nyb2xsTGVmdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6
IDA7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpID8g
c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50IFJl
bmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBy
ZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxl
TGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6
cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTc5LDcgKzU3OSw3
IEBAIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRl
ZCgpCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoMF9sdSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNl
dHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXImIGxheWVyKQorc3RhdGljIHZvaWQgc2V0
dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAg
IFBhZ2UmIHBhZ2UgPSBsYXllci5yZW5kZXJlcigpLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UuaXNN
b25pdG9yaW5nV2hlZWxFdmVudHMoKSkKQEAgLTU4OSwyNiArNTg5LDI2IEBAIHN0YXRpYyB2b2lk
IHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXImIGxheWVyKQogCiB2b2lkIFJlbmRl
ckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93
Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVw
V2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWFBvc2l0
aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXll
cigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5p
bWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIFNj
cm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Ny
b2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkp
CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBs
YXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBh
bmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkp
OworICAgIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9s
bFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
KQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFo
YXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
KyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgc2Ny
b2xsYWJsZUxheWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBj
bGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQpIGNvbnN0CkBAIC04MDgsMjQgKzgwOCwzMCBAQCBib29sIFJlbmRlckJveDo6Zml4ZWRFbGVt
ZW50TGF5c091dFJlbGF0aXZlVG9GcmFtZShjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykgYwog
CiBib29sIFJlbmRlckJveDo6aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0g
T3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRv
KTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdHlsZSgp
Lm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9
PSBPdmVyZmxvdzo6QXV0bzsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFs
U2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgJiYg
KHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJm
bG93WCgpID09IE92ZXJmbG93OjpBdXRvKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8
ICFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzY3Jv
bGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwg
fHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0bzsKIH0KIAogaW50IFJlbmRl
ckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1
ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKSA6IDA7CisgICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkg
PyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIHJldHVybiBp
bmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNj
cm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBp
bnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAt
ODM0LDEyICs4NDAsMTIgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNh
bFdpZHRoKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
ICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIo
KSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJh
cigpKTsKICAgICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAgICB9CiAK
ICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZsb3dY
KCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkpIHsK
LSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXll
cigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpOwogICAgIH0KIApAQCAtODQ4LDE1ICs4NTQsMTQgQEAgaW50IFJl
bmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKIAogYm9vbCBS
ZW5kZXJCb3g6OnNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVs
ZW1lbnQpCiB7Ci0gICAgUmVuZGVyTGF5ZXIqIGJveExheWVyID0gbGF5ZXIoKTsKLSAgICBpZiAo
Ym94TGF5ZXIgJiYgYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKSkgewotICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCi0gICAgICAgICAgICAqc3RvcEVs
ZW1lbnQgPSBlbGVtZW50KCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8qIGJveExheWVyID0gc2Nyb2xsYWJsZUxheWVyKCk7Cisg
ICAgaWYgKCFib3hMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYm94TGF5
ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChzdG9wRWxlbWVudCkKKyAgICAgICAgKnN0b3BFbGVtZW50
ID0gZWxlbWVudCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFJlbmRlckJveDo6c2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQsIFJlbmRlckJveCog
c3RhcnRCb3gsIGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCkKQEAgLTg3
OCwxNSArODgzLDE0IEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksCiBib29sIFJlbmRlckJveDo6
bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxl
bWVudCkKIHsKICAgICBib29sIHNjcm9sbGVkID0gZmFsc2U7Ci0gICAgCi0gICAgUmVuZGVyTGF5
ZXIqIGwgPSBsYXllcigpOwotICAgIGlmIChsKSB7CisgICAgYXV0byogbGF5ZXIgPSBzY3JvbGxh
YmxlTGF5ZXIoKTsKKyAgICBpZiAobGF5ZXIpIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAg
ICAgLy8gT24gTWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24g
d2hlbiBkb2luZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAg
ICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAg
c2Nyb2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0
aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAg
ICAgICAgICAgc2Nyb2xsZWQgPSBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9s
bElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHls
ZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0
aXBsaWVyKTsKICNlbmRpZgotICAgICAgICBpZiAobC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICBp
ZiAobGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChzY3JvbGxlZCkgewpAQCAtODk5LDkgKzkwMyw5IEBAIGJvb2wg
UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0CiAgICAgaWYgKHN0b3BFbGVtZW50ICYmICpzdG9wRWxlbWVudCAm
JiAqc3RvcEVsZW1lbnQgPT0gZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGIgJiYgIWItPmlz
UmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gYi0+bG9naWNhbFNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CisgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGJsb2NrICYmICFibG9jay0+aXNS
ZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiBibG9jay0+bG9naWNhbFNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC05MzIsNyArOTM2LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3Jh
bWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6dXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBo
YXNMYXllcigpICYmIGxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgcmV0
dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVM
YXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwogfQogCiB2b2lkIFJlbmRlckJveDo6
YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCkBAIC05OTEsOCArOTk1LDggQEAg
UmVuZGVyQm94KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3Vy
Y2UpCiB7Ci0gICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Q
b2ludChzb3VyY2UpOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xs
YWJsZUxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOwogfQogCiBib29sIFJlbmRl
ckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMTAxNywxMSArMTAyMSw5
IEBAIGJvb2wgUmVuZGVyQm94OjpuZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBj
b25zdAogCiBTY3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QK
IHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm4geyAwLCAwIH07Ci0KLSAg
ICBBU1NFUlQoaGFzTGF5ZXIoKSk7Ci0gICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFBvc2l0aW9u
KCk7CisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwogfQog
CiBMYXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0
CkBAIC0xNTY5LDcgKzE1NzEsNyBAQCBib29sIFJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJ
c0tub3duVG9CZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgIGlmICgh
Z2V0QmFja2dyb3VuZFBhaW50ZWRFeHRlbnQocGFpbnRPZmZzZXQsIGJhY2tncm91bmRSZWN0KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+
c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQorICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIo
KSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZm9yZWdyb3VuZElzS25vd25Ub0Jl
T3BhcXVlSW5SZWN0KGJhY2tncm91bmRSZWN0LCBiYWNrZ3JvdW5kT2JzY3VyYXRpb25UZXN0TWF4
RGVwdGgpOwpAQCAtMTg4OCwxMCArMTg5MCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6b3Zl
cmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZQog
ICAgIGNsaXBSZWN0LnNldFNpemUoY2xpcFJlY3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJM
ZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAK
ICAgICAvLyBTdWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYg
KGxheWVyKCkpIHsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xs
YWJsZUxheWVyKCkpIHsKICAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUobGF5ZXIoKS0+dmVydGlj
YWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsKLSAgICAgICAgY2xpcFJlY3QuY29udHJh
Y3QobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBsYXllcigpLT5o
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOworICAgICAgICAgICAgY2xpcFJl
Y3QubW92ZShzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5
KSwgMCk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXllci0+dmVydGlj
YWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNsaXBSZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKaW5kZXggNWRkZmMzMTE4NDdiYWZkOTNmMzM5NDhjMTEyNWJlZWU4YzI4Mzk4Ny4uYzBkYTdl
YTExMzRmOTY2MDM1OGM5OTIxM2RkMzNhODZmZTVhNTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC00OCw5ICs0OCw5IEBA
CiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVu
dENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAtNDkwLDggKzQ5MCw4IEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRz
KFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgICAgIEZsb2F0UG9pbnQgY29udGFpbmVyTG9jYXRp
b25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgPSBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yLmxvY2F0aW9uKCkgLQogICAgICAgICAgICAgRmxvYXRTaXplKGVuY2xv
c2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRp
bmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSAr
IGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9z
aW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgY29udGFpbmVy
TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdM
YXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3gg
IT0gY29udGFpbmluZ0Jsb2NrICYmIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5n
QW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnNj
cm9sbE9mZnNldCgpOwogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmluZ0Jsb2NrUmVjdChj
b250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTUwOCw4ICs1MDgs
OCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25z
dHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9y
IC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3Np
bmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBp
bmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwot
ICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAg
ICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVu
Y2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xv
c2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRp
dmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFi
bGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3cs
IGFzc3VtZSB0aGF0IHx0aGlzfCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVs
YXRpdmVUb1Njcm9sbGluZ0FuZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRp
dmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTU0OCwxMSArNTQ4LDEzIEBAIEZsb2F0UmVjdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkg
Y29uc3QKIAogICAgICAgICBGbG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0Ns
aXBwaW5nQm94LmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3
KCkpLmJvdW5kaW5nQm94KCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBG
bG9hdFBvaW50KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAg
ICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChlbmNsb3NpbmdDbGlw
cGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9
IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQo
KTsKIAogICAgICAgICBmbG9hdCBzY3JvbGxiYXJPZmZzZXQgPSAwOwotICAgICAgICBpZiAoZW5j
bG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBzY3Jv
bGxiYXJPZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sYXllcigpLT52ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgaWYgKGVuY2xv
c2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2Nyb2xs
YWJsZUxheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5j
bG9zaW5nQ2xpcHBpbmdCb3guc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1Jl
Y3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zm
c2V0LCBzY3JvbGxPZmZzZXQueSgpKSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0
OwpAQCAtODQ0LDggKzg0NiwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZp
bGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjbwogICAgICAgICAK
ICAgICAgICAgLy8gQWRqdXN0IHRoZSBwYWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBj
b250ZW50IGJveCB3aXRoIGJvcmRlcnMgYXQgdGhlIGVuZHMuCiAgICAgICAgIHNjcm9sbGVkUGFp
bnRSZWN0Lm1vdmVCeSgtdGhpc0JveC5zY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgc2Nyb2xs
ZWRQYWludFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBsYXllcigpLT5zY3JvbGxXaWR0aCgpICsgYlJp
Z2h0KTsKLSAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsg
bGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgKyBib3JkZXJCb3R0b20oKSk7CisgICAgICAgIGF1dG8g
c2Nyb2xsV2lkdGggPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3Jv
bGxXaWR0aCgpIDogMDsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0V2lkdGgoYkxlZnQg
KyBzY3JvbGxXaWR0aCArIGJSaWdodCk7CisgICAgICAgIGF1dG8gc2Nyb2xsSGVpZ2h0ID0gc2Ny
b2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgOiAwOwor
ICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQoYm9yZGVyVG9wKCkgKyBzY3JvbGxI
ZWlnaHQgKyBib3JkZXJCb3R0b20oKSk7CiAgICAgfQogICAgIAogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgYmFja2dyb3VuZENsaXBTdGF0ZVNhdmVyKGNvbnRleHQsIGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDFhZWQ0NzE1ZjRlYzMz
ZjRjYzU3Yzk1ZTliZDgzNThiMTYwOTM3ZTEuLmIwMzNmM2VlNmQzNzQ4ZjdmYThlM2Y1MGNlNzM5
NTE0YjBlOGFlOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApA
QCAtMjg2LDE2ICsyODYsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENsaXBSZWN0cyYgY2xpcFJlY3RzKQogCiAjZW5kaWYKIAotc3RhdGlj
IFNjcm9sbGluZ1Njb3BlIG5leHRTY3JvbGxpbmdTY29wZSgpCi17Ci0gICAgc3RhdGljIFNjcm9s
bGluZ1Njb3BlIGN1cnJlbnRTY29wZSA9IDA7Ci0gICAgcmV0dXJuICsrY3VycmVudFNjb3BlOwot
fQotCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsK
IAotUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRl
cmVyTGF5ZXJNb2RlbE9iamVjdCkKLSAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJM
YXllck1vZGVsT2JqZWN0LmlzUmVuZGVyVmlldygpKQorUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVy
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCwgUmVuZGVy
TGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCisgICAgOiBtX2xheWVyVHlwZShsYXllclR5cGUp
CisgICAgLCBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1Jl
bmRlclZpZXcoKSkKICAgICAsIG1fZm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJN
b2RlbE9iamVjdC5pc01lZGlhKCkpCiAgICAgLCBtX2lzTm9ybWFsRmxvd09ubHkoZmFsc2UpCiAg
ICAgLCBtX2lzQ1NTU3RhY2tpbmdDb250ZXh0KGZhbHNlKQpAQCAtMzAzLDE5ICsyOTgsMTUgQEAg
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
TGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fek9yZGVyTGlzdHNEaXJ0eShmYWxzZSkKICAgICAs
IG1fbm9ybWFsRmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxp
c3QoZmFsc2UpCi0gICAgLCBtX2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGlt
ZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dChmYWxzZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFs
c2UpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5z
aWRlUmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQog
ICAgICwgbV9yZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJs
ZUNvbnRlbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxz
ZSkKICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1f
aGFzVmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYShmYWxzZSkKICAgICAsIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQog
ICAgICwgbV9iZWhhdmVzQXNGaXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2Nl
bmRhbnRTdGF0dXNEaXJ0eSh0cnVlKQpAQCAtMzI5LDE1ICszMjAsNiBAQCBSZW5kZXJMYXllcjo6
UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2Jq
ZWN0KQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRp
cmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBv
c2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQotICAgICwgbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9u
QWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNTIsNTMgKzMzNCwyMiBAQCBSZW5kZXJMYXllcjo6
UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2Jq
ZWN0KQogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsK
ICAgICBzZXRJc0NTU1N0YWNraW5nQ29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgp
KTsKIAotICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5
ZXIoKTsKLQotICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICBtX2JveFNjcm9s
bGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3Bl
KCk7CisgICAgLy8gbV9pc1NlbGZQYWludGluZ0xheWVyIGlzIGluaXRpYWxpemVkIGluIFJlbmRl
ckxheWVyU1ZHL0hUTUwsIGV2ZW4gdGhvdWdoCisgICAgLy8gaXQgYmVsb25ncyB0byBSZW5kZXJM
YXllciAtLSB3ZSBjYW5ub3QgY2FsbAorICAgIC8vICJtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBz
aG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7IgorICAgIC8vIGhlcmUsIGluIHRoZSBjb25zdHJ1
Y3RvciAtLSBzaW5jZSB0aGUgUmVuZGVyTGF5ZXJTVkcvSFRNTCBjbGFzc2VzIGFyZW4ndCBpbml0
aWFsaXplZCB5ZXQuCiAKICAgICBpZiAoIXJlbmRlcmVyKCkuZmlyc3RDaGlsZCgpKSB7CiAgICAg
ICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zp
c2libGVDb250ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmls
aXR5OjpWaXNpYmxlOwogICAgIH0KLQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVy
ZXIoKS5lbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRo
ZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRl
ZC4KLSAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQ
b3NpdGlvbigpOwotICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCi0gICAg
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0
aW9uKTsKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBv
aW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiB7Ci0gICAg
aWYgKGluUmVzaXplTW9kZSgpKQotICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRT
Y3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Nj
cm9sbGFibGVBcmVhKHRoaXMpKTsKLQotICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSkKLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB1bnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQt
PnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGRl
c3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJh
cihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSByZW5kZXJlcigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBz
Y3JvbGxpbmdDb29yZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0K
ICAgICBpZiAobV9yZWZsZWN0aW9uKQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKLSAg
ICBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIGNsZWFyUmVzaXplcigpOwotCiAgICAgY2xlYXJM
YXllckZpbHRlcnMoKTsKIAogICAgIGlmIChwYWludHNJbnRvUHJvdmlkZWRCYWNraW5nKCkpIHsK
QEAgLTQxNyw2ICszNjgsMjAgQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihyZW5kZXJlcigpLnJlbmRlclRy
ZWVCZWluZ0Rlc3Ryb3llZCgpIHx8ICFmaXJzdENoaWxkKCkpOwogfQogCitSZW5kZXJMYXllclNj
cm9sbGFibGUqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIoKQoreworICAgIGlmIChpczxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworY29u
c3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxheWVyKCkg
Y29uc3QKK3sKKyAgICBpZiAoaXM8Y29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhp
cyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OmFkZENoaWxk
KFJlbmRlckxheWVyJiBjaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkKQogewogICAgIFJl
bmRlckxheWVyKiBwcmV2U2libGluZyA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZp
b3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CkBAIC05MzQsNyArODk5LDEwIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0
aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhS
ZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsKLSAg
ICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAoc2Nyb2xs
YWJsZUxheWVyKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmFwcGx5UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAgZ2Vv
bWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpAQCAtOTQy
LDcgKzkxMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRl
ckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNh
Y2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsKIAotICAg
IGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYm
IHNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmZsb3dDb250cm9scygpKSB7CiAgICAgICAgIExheW91
dFNpemUgb2Zmc2V0RnJvbVJvb3Q7CiAgICAgICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAg
ICAgIG9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9tZXRyeU1hcC0+
YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CkBAIC05NTEsNyArOTE5LDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21l
dHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNl
c3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCiAgICAgICAgICAgICBvZmZz
ZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOwogICAgICAgICB9Ci0gICAg
ICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9v
dCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhy
b3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVwZGF0ZURlc2Nl
bmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAyOCwxMyArOTk2LDggQEAgdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFw
LCBPcHRpb25TZXQKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5
TWFwLCBmbGFncyk7CiAKICAgICAvLyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9zaXRpb25lZCwg
bm93IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmIChtX21hcnF1ZWUp
IHsKLSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0
IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBvbGRVcGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0
ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0g
b2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+dXBkYXRlTWFycXVlZSgpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9u
ZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQg
PSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0x
MTE0LDkyICsxMDc3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQog
ICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAg
ICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhT
Y3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50
U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zv
cm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxv
d1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNm
b3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAg
ICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7
Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3Jz
IG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVu
Vmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZs
b3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21l
dHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAs
IE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBz
b21lIGNvcm5lciBjYXNlcyB3aGVyZQotICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0
eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgotICAgIHVwZGF0ZURl
c2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBubyB2aXNpYmxl
IGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5vIHBvaW50IHJl
Y29tcHV0aW5nCi0gICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJ
ZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KLSAgICAvLyByZWNv
bXB1dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5LgotICAgIGlmICghbV9oYXNWaXNpYmxlRGVz
Y2VuZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ym9vbCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0gICAgaWYgKHBv
c2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNlc3Rvcik7Ci0K
LSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3IsIEhhc1NlZW5W
aWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkpCi0gICAgICAg
IGNsZWFyQ2xpcFJlY3RzKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc1ZpZXdw
b3J0Q29uc3RyYWluZWRQb3NpdGlvbigpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2VlblZpZXdw
b3J0Q29uc3RyYWluZWRBbmNlc3Rvcik7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0Ns
aXApOwotICAgIAotICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9IChmbGFncy5j
b250YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBmbGFncy5jb250
YWluc0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0Ns
aXAgfSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKLSAgICBib29sIGlzVmlzdWFsbHlFbXB0
eSA9ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKLSAgICBib29sIHNob3VsZFB1c2hBbmRQb3BNYXBw
aW5ncyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyAmJiAhaXNW
aXN1YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOwotICAgIGlmIChzaG91bGRQdXNoQW5kUG9w
TWFwcGluZ3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRo
aXMsIHBhcmVudCgpKTsKLQotICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzKSB7Ci0g
ICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFpbnQgcmVjdHMg
Zm9yIHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCi0gICAgICAgIGlmIChpc1Zpc3VhbGx5RW1w
dHkpCi0gICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOwotICAgICAgICBlbHNlIC8vIEZJ
WE1FOiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ugd2FsayBkb3du
IHRoZSB0cmVlLgotICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOwotICAgIH0gZWxzZSBpZiAoIXJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgLy8g
V2hlbiBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZsaXBzIGR1ZSB0
byBsYXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNpdGlvbnMgZnJv
bQotICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVu
cyB0aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRoZXkgbmVlZCB0
byBiZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCi0gICAgICAgIC8vIENo
ZWNrIHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4KLSAgICAgICAgQVNTRVJUKCFy
ZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExh
eW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7Ci0gICAgICAg
IEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigp
LnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigpLm91dGxpbmVC
b3VuZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7Ci0gICAg
fQotICAgIAotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKLQotICAgIC8vIFdl
IGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlv
biB3aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUoKQotICAgIC8vIG9mIGFuIG9iamVjdCwg
dGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMg
dGhlIGxheWVyIHBvc2l0aW9uIHdhcwotICAgIC8vIHVwZGF0ZWQgYWJvdmUuCi0KLSAgICBpZiAo
bV9tYXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsK
LSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBv
c2l0aW9uOwotICAgIH0KLQotICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCi0gICAg
ICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwotCi0gICAg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJr
ZXJzKCk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogCiB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVCbGVuZE1vZGUoKQpAQCAtMTY5MCwzNCArMTU2NywxMCBAQCBib29sIFJlbmRl
ckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9u
c0ZsYWc+KiBmbGFncwogICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBkb3duY2FzdDxSZW5kZXJU
YWJsZVJvdz4oKmFuY2VzdG9yKS50b3BMZWZ0TG9jYXRpb25PZmZzZXQoKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKLSAgICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4K
LSAgICBSZW5kZXJMYXllciogcG9zaXRpb25lZFBhcmVudDsKLSAgICBpZiAocmVuZGVyZXIoKS5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocG9zaXRpb25lZFBhcmVudCA9IGVuY2xvc2luZ0Fu
Y2VzdG9yRm9yUG9zaXRpb24ocmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkpKSkgewotICAg
ICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91dCB0aGUgZW5jbG9z
aW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgotICAgICAgICBpZiAocG9zaXRp
b25lZFBhcmVudC0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxv
Y2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9sbFBvc2l0aW9u
KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCku
aXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50
LT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2Fz
dDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9mZnNldEZvcklu
Rmxvd1Bvc2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwot
ICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBB
U1NFUlQocG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKLSAgICAg
ICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkp
IHsKLSAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9s
bFBvc2l0aW9uKCkpOwotCi0gICAgICAgIEFTU0VSVChwYXJlbnRMYXllci0+Y29udGVudHNTY3Jv
bGxpbmdTY29wZSgpKTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVy
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAgfQogCi0gICAgaWYgKGhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewotICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxp
bmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29w
ZSkKLSAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdT
Y29wZSgpOwotICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKLSAgICAgICAgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKKyAgICAvLyBTdWJ0
cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KKyAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMobG9jYWxQb2lu
dCk7CiAKICAgICBib29sIHBvc2l0aW9uT3JPZmZzZXRDaGFuZ2VkID0gZmFsc2U7CiAgICAgaWYg
KHJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkpIHsKQEAgLTE4MzksODQgKzE2OTIsMjgg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Js
b2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQotewotICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGxheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5vd25lckVsZW1lbnQoKTsKLSAgICBpZiAoIW93bmVyRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBhdXRvKiBvd25lclJlbmRlcmVyID0gb3duZXJFbGVtZW50LT5yZW5k
ZXJlcigpOwotICAgIGlmICghb3duZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLX0KLQotc3Rh
dGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVz
KQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cihDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKIHsKLSAg
ICBpZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Js
b2NrT3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdMYXllckluQ29u
dGFpbmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwogCiAgICAgaWYg
KGNyb3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXll
cihsYXllcik7Ci19Ci0KLVJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAotewotICAgIGF1dG8gaXNDb25zaWRlcmVk
U2Nyb2xsYWJsZSA9IFtdKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgewotICAgICAgICByZXR1
cm4gaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+
KGxheWVyLnJlbmRlcmVyKCkpLmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpOwot
ICAgIH07Ci0KLSAgICBpZiAoaW5jbHVkZVNlbGYgPT0gSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVk
ZVNlbGYgJiYgaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqdGhpcykpCi0gICAgICAgIHJldHVybiBj
b25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyk7Ci0gICAgCi0gICAgZm9yIChhdXRvKiBuZXh0
TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgY3Jvc3NGcmFtZUJv
dW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9j
a0xheWVyKCpuZXh0TGF5ZXIsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewotICAgICAgICBpZiAo
aXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkKLSAgICAgICAgICAgIHJldHVybiBu
ZXh0TGF5ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUludFJlY3QgUmVu
ZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgv
KiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9s
bHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAg
ICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3Jv
bGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAg
ICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAg
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25z
dAorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkg
Y29uc3QKIHsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3Zl
cmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5p
bWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxB
bmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCisgICAgYXV0byogb3du
ZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOworICAgIGlm
ICghb3duZXJFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBm
YWxzZTsKLX0KKyAgICBhdXRvKiBvd25lclJlbmRlcmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJl
cigpOworICAgIGlmICghb3duZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBl
cmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKTsKKyAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKIH0KIAog
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdUcmFuc2Zvcm1lZEFuY2VzdG9yKCkg
Y29uc3QKQEAgLTI0NDQsMzMxICsyMjQxLDYgQEAgTGF5b3V0U2l6ZSBSZW5kZXJMYXllcjo6b2Zm
c2V0RnJvbUFuY2VzdG9yKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDb2wKICAg
ICByZXR1cm4gdG9MYXlvdXRTaXplKGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIs
IExheW91dFBvaW50KCksIGFkanVzdEZvckNvbHVtbnMpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXll
cjo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgYm9vbCBpc1Zpc2li
bGUgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2li
bGU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5n
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygp
ICYmICFpc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgcmV0dXJuIGlzVmlz
aWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNo
T3ZlcmZsb3dTY3JvbGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNj
ZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLWJvb2wgUmVuZGVyTGF5ZXI6
OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQot
ewotICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9s
bGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgotICAgIGlmIChoYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVt
ZW50KCkpOwotICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
ID0gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8
ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5k
bGVyKCpyZW5kZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKLQotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBt
YWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3Jv
bGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdl
J3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5n
Rm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERl
bHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRj
aGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291
cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBjb25zdCBp
bnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmlu
Z0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKLSAgICAg
ICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQo
c3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBlbHNlIGlmIChh
ZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxp
bnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVs
dGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQotewot
ICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFk
anVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKLXsKLSAg
ICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgpLmV2
ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAgICAvLyBXZSBu
ZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0
aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0
aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0
aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtub3du
TW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0g
cHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlvdXNNb3VzZVBv
c2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUgZGVsdGEgPSBs
YXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAoYWJzKGRlbHRh
LndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2Vu
dGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRhLnNldFdpZHRo
KDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Ny
b2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBzY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8gRklYTUU6IHVu
aWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xs
YWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOwot
ICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xh
bXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsK
LQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlM
aW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9s
bE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNl
dCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVh
ID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwg
d2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAgICAg
SW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxP
ZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYg
cmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMg
c2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxl
ZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
dXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0
IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAgICAv
LyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVu
dCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0g
ICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
OwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXks
IGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcK
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBwbHlQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZzZXQo
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZhbHVl
KCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24u
eSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24o
aW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBh
bmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKLSAg
ICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlv
bihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAgIHNj
cm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5
cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVt
U2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0aGlz
IDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0gICAg
aWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwot
I2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxU
b09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNjcm9s
bEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5p
bWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKLQot
ICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Ny
b2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9m
ZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9
IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlw
ZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlv
bkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkK
LSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZz
ZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlv
clN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJl
dmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRX
aXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNTY3Jv
bGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShz
Y3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGlu
ZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkg
OiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0
aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zm
c2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNjcm9s
bFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
VG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
ICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1
c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIp
IDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOwot
ICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRoYXQg
dGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBv
dmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29k
ZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1v
dmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRv
SW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAgICAg
IGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChzY3Jv
bGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAgIHNj
cm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9m
ZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0g
MDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRp
b24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNh
cmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOwot
ICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zm
c2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9sbFBv
c2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09
IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBGSVhN
RTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5n
ZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8gVGhl
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4g
dGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGlu
Z0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0Fm
dGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
c2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcgPSBy
ZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBj
aGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1w
YWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBs
YXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBv
c2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0
KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUg
bWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhh
cyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Ny
b2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBv
c2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgewot
ICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdo
ZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAgICAg
ICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwg
d2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBpbiB0
aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRh
dGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29t
cGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAg
ICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBv
ZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9y
ZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZy
b20gdGhlIHBhaW50LW9yZGVyIHBhcmVudC4KLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFp
bnRQYXJlbnQgPSBwYWludE9yZGVyUGFyZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50
UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25z
LCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgot
ICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVu
dFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJl
cigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJh
bWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVu
ZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVl
ZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RG
b3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVy
KCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1
YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7
Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAg
IGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsK
LSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWlu
dE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBm
dWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBy
ZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwt
cmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIo
KS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZp
ZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0
b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9v
bCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBm
cmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJZiBzY3Jv
bGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KQEAg
LTI4MTMsMzAgKzIyODUsMzMgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJs
ZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKIAogICAgIExheW91
dFJlY3QgbmV3UmVjdCA9IGFic29sdXRlUmVjdDsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9
IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpObyk7CisgICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogICAgIGJvb2wgYXV0b3Njcm9sbE5vdElu
UHJvZ3Jlc3MgPSAhcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJ
blByb2dyZXNzKCk7CiAKICAgICBpZiAoYWxsb3dzQ3VycmVudFNjcm9sbCgpKSB7CisgICAgICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgICAg
ICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKwogICAgICAgICAvLyBEb24ndCBzY3JvbGwgdG8g
cmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdlYmtp
dC1saW5lLWNsYW1wIHByb3BlcnR5LgogICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVudCB1cyBm
cm9tIHJldmVhbGluZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVyIGluIFNhZmFyaSBSU1MuCiAg
ICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgICAgIEFTU0VSVChib3gp
OwogICAgICAgICBMYXlvdXRSZWN0IGxvY2FsRXhwb3NlUmVjdChib3gtPmFic29sdXRlVG9Mb2Nh
bFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChhYnNvbHV0ZVJlY3QpKSkuYm91bmRpbmdCb3goKSk7
Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
IHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgICAgICAvLyBGb3IgZGlyZWN0aW9uOiBydGw7
IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBzY3JvbGwgYmFyIGlzIG9uIHRo
ZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKICAgICAgICAgICAgIC8vIHN0YXJ0cyBmcm9t
IHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4IG9mIGxvY2FsRXhwb3NlUmVj
dCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0b28uCi0gICAgICAgICAgICBs
b2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KCksIDApKTsKKyAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQo
LXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CiAgICAgICAg
IH0KICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1LCAwX2x1LCBib3gtPmNsaWVu
dFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAgICBMYXlvdXRSZWN0IHJldmVh
bFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVjdCwgaW5z
aWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAKLSAgICAgICAgU2Ny
b2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxP
ZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlvbigp
KSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8
IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNl
dCA9IHNjcm9sbE9mZnNldCgpOworICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9m
ZnNldCA9IHNjcm9sbGFibGVMYXllci0+Y2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5s
b2NhdGlvbigpKSk7CisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24p
IHsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0
ZWQgPSBBbmltYXRlZFNjcm9sbDo6Tm87CiAgICAgICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdElu
UHJvZ3Jlc3MgJiYgdXNlU21vb3RoU2Nyb2xsaW5nKG9wdGlvbnMuYmVoYXZpb3IsIGJveC0+ZWxl
bWVudCgpKSkKICAgICAgICAgICAgICAgICBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7
Ci0gICAgICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
Y2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbkZyb21PZmZz
ZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKICAgICAgICAgICAgIEludFNpemUgc2Nyb2xs
T2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7
CiAgICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5j
ZSk7CiAgICAgICAgICAgICBuZXdSZWN0ID0gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3QpKSwgVXNlVHJhbnNmb3Jt
cykuYm91bmRpbmdCb3goKSk7CkBAIC0yODU0LDcgKzIzMjksNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9v
bCBpbnNpZAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYXNzZXJ0aW9uIGZpcmVzIHdlIG5l
ZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50IGZyb20gYmVpbmcgZGVzdHJveWVkLgogICAg
ICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERp
c2FsbG93ZWRTY29wZTsKIAotICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBm
cmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3Qp
OworICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJs
ZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0
KTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGV4cG9zZVJlY3QgPSBnZXRSZWN0VG9FeHBv
c2Uodmlld1JlY3QsIGFic29sdXRlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBv
cHRpb25zLmFsaWduWSk7CiAKICAgICAgICAgICAgICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlv
bihyb3VuZGVkSW50UG9pbnQoZXhwb3NlUmVjdC5sb2NhdGlvbigpKSk7CkBAIC0yODcwLDggKzIz
NDUsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlv
dXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgICAgICAgICBmcmFtZVZp
ZXcuc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBhbmltYXRlZCk7CiAKICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG91bGRBbGxv
d0Nyb3NzT3JpZ2luU2Nyb2xsaW5nID09IFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6
OlllcyB8fCBmcmFtZVZpZXcuc2FmZVRvUHJvcGFnYXRlU2Nyb2xsVG9QYXJlbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRMYXllciA9IGVuY2xvc2luZ0xheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5j
bHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXllciA9IG93bmVyRWxlbWVu
dC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ0xheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRMYXllciA9IHNjcm9s
bGFibGVMYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6Oklu
Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlY3QgaW50byB0aGUgY29v
cmRpbmF0ZSBzcGFjZSBvZiB0aGUgcGFyZW50IGZyYW1lJ3MgZG9jdW1lbnQuCiAgICAgICAgICAg
ICAgICAgICAgIG5ld1JlY3QgPSBmcmFtZVZpZXcuY29udGVudHNUb0NvbnRhaW5pbmdWaWV3Q29u
dGVudHMoZW5jbG9zaW5nSW50UmVjdChuZXdSZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIGlu
c2lkZUZpeGVkID0gZmFsc2U7IC8vIEZJWE1FOiBpZGVhbGx5IG5lZWQgdG8gZGV0ZXJtaW5lIGlm
IHRoaXMgPGlmcmFtZT4gaXMgaW5zaWRlIHBvc2l0aW9uOmZpeGVkLgpAQCAtMjkyOCwyNCArMjQw
NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0
UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgIHBhcmVudExheWVyLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCi17Ci0g
ICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgewotICAg
ICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBh
bGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKLSAgICAgICAgLy8gcmVwb3NpdGlv
bmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgotICAgICAgICBp
ZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+
ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29t
cG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGws
IGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9z
aXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgotICAgICAgICAgICAgICAgIGNvbXBv
c2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJj
aHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9z
aXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdB
bmNlc3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUxheW91dFJl
Y3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxl
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29u
c3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25Z
KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExh
eW91dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29s
IGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xs
QWxpZ25tZW50JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRl
clZpZXcoKSAmJiBpbnNpZGVGaXhlZCkgewpAQCAtMzAyMywxMTU1ICsyNDgzLDk3IEBAIExheW91
dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgTGF5CiAgICAgICAgIC8vIElmIHRoZSByZWN0IGlzIGJpZ2dlciB0aGFu
IHRoZSB2aXNpYmxlIGFyZWEsIGRvbid0IGJvdGhlciB0cnlpbmcgdG8gY2VudGVyLiBPdGhlciBh
bGlnbm1lbnRzIHdpbGwgd29yay4KICAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6
Z2V0VmlzaWJsZUJlaGF2aW9yKGFsaWduWSk7CiAgICAgICAgIGlmIChzY3JvbGxZID09IFNjcm9s
bEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQ2VudGVyKQotICAgICAgICAgICAgc2Nyb2xsWSA9
IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsOwotICAgIH0gZWxzZSBpZiAoaW50
ZXJzZWN0SGVpZ2h0ID4gMCkKLSAgICAgICAgLy8gSWYgdGhlIHJlY3RhbmdsZSBpcyBwYXJ0aWFs
bHkgdmlzaWJsZSwgdXNlIHRoZSBzcGVjaWZpZWQgcGFydGlhbCBiZWhhdmlvcgotICAgICAgICBz
Y3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRQYXJ0aWFsQmVoYXZpb3IoYWxpZ25ZKTsKLSAg
ICBlbHNlCi0gICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldEhpZGRlbkJlaGF2
aW9yKGFsaWduWSk7Ci0gICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGFsaWduIHRvIHRoZSBjbG9z
ZXN0IGVkZ2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVyIGRvd24KLSAgICAvLyB0aGFu
IHRoZSB2aXNpYmxlUmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCB0
aGVuIGFsaWduIHdpdGggdGhlIGJvdHRvbS4KLSAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGln
bm1lbnQ6OkJlaGF2aW9yOjpBbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVjdC5tYXhZKCkg
PiB2aXNpYmxlUmVjdC5tYXhZKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQoKSA8IHZpc2libGVSZWN0
LmhlaWdodCgpKQotICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6
QWxpZ25Cb3R0b207Ci0KLSAgICAvLyBHaXZlbiB0aGUgWSBiZWhhdmlvciwgY29tcHV0ZSB0aGUg
WSBjb29yZGluYXRlLgotICAgIExheW91dFVuaXQgeTsKLSAgICBpZiAoc2Nyb2xsWSA9PSBTY3Jv
bGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Njcm9sbCkKLSAgICAgICAgeSA9IHZpc2libGVSZWN0
LnkoKTsKLSAgICBlbHNlIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6
OkFsaWduQm90dG9tKQotICAgICAgICB5ID0gZXhwb3NlUmVjdC5tYXhZKCkgLSB2aXNpYmxlUmVj
dC5oZWlnaHQoKTsKLSAgICBlbHNlIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVo
YXZpb3I6OkFsaWduQ2VudGVyKQotICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCkgKyAoZXhwb3Nl
UmVjdC5oZWlnaHQoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpKSAvIDI7Ci0gICAgZWxzZQotICAg
ICAgICB5ID0gZXhwb3NlUmVjdC55KCk7Ci0KLSAgICByZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQ
b2ludCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25JbldpbmRvdykKLXsKLSAgICBJbnRQ
b2ludCBjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLndpbmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRvdyk7Ci0gICAgc2Nyb2xsUmVjdFRv
VmlzaWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBvc2l0aW9uLCBMYXlvdXRTaXplKDEs
IDEpKSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpjYW5SZXNpemUoKSBjb25zdAotewotICAgIC8vIFdlIG5lZWQgYSBzcGVj
aWFsIGNhc2UgZm9yIDxpZnJhbWU+IGJlY2F1c2UgdGhleSBuZXZlciBoYXZlCi0gICAgLy8gaGFz
T3ZlcmZsb3dDbGlwKCkuIEhvd2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNsaXAgdGhlaXIg
Y29udGVudHMsIHNvCi0gICAgLy8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0aGVtIGFsc28u
Ci0gICAgcmV0dXJuIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCku
aXNSZW5kZXJJRnJhbWUoKSkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6
ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmZzZXQpCi17Ci0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9uIGdlbmVyYXRlZCBjb250ZW50IGJ1dCBpcyBu
b3QgcmlnaHQgbm93LgotICAgIGlmICghaW5SZXNpemVNb2RlKCkgfHwgIWNhblJlc2l6ZSgpIHx8
ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6
IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXItPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSAhPSBy
ZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMuIERvIHRoZXkgbWF0dGVyIGhlcmU/Ci0gICAg
Ly8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBiZSBiZXR0ZXIgdG8gZGVhbCB3aXRoIHRoZW0g
ZXhwbGljaXRseS4KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCk7
Ci0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KGVsZW1lbnQtPnJlbmRl
cmVyKCkpOwotCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsK
LSAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3NlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgYXV0byBhYnNvbHV0ZVBvaW50ID0gZG9jdW1l
bnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2dC5wb3NpdGlvbigpKTsKLSAgICBhdXRvIGxv
Y2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1dGVUb0NvbnRlbnRzKGFic29sdXRlUG9p
bnQpKTsKLQotICAgIExheW91dFNpemUgbmV3T2Zmc2V0ID0gb2Zmc2V0RnJvbVJlc2l6ZUNvcm5l
cihsb2NhbFBvaW50KTsKLSAgICBuZXdPZmZzZXQuc2V0V2lkdGgobmV3T2Zmc2V0LndpZHRoKCkg
LyB6b29tRmFjdG9yKTsKLSAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KG5ld09mZnNldC5oZWlnaHQo
KSAvIHpvb21GYWN0b3IpOwotICAgIAotICAgIExheW91dFNpemUgY3VycmVudFNpemUgPSBMYXlv
dXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9vbUZhY3RvciwgcmVuZGVyZXItPmhlaWdodCgp
IC8gem9vbUZhY3Rvcik7Ci0gICAgTGF5b3V0U2l6ZSBtaW5pbXVtU2l6ZSA9IGVsZW1lbnQtPm1p
bmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtUbyhjdXJyZW50U2l6ZSk7Ci0gICAgZWxlbWVu
dC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7Ci0gICAgCi0gICAgTGF5
b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0LndpZHRoKCkg
LyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICBpZiAo
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgIG5l
d09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwotICAgICAgICBhZGp1c3RlZE9s
ZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7Ci0gICAgfQotICAg
IAotICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChjdXJyZW50U2l6ZSArIG5ld09mZnNldCAt
IGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1pbmltdW1TaXplKSAtIGN1cnJlbnRTaXpl
OwotCi0gICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVs
ZW1lbnQ+KGVsZW1lbnQpOwotICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJlci0+
c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveDsKLQotICAgIFJlc2l6
ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsKLSAgICBpZiAocmVzaXplICE9
IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5jZS53aWR0aCgpKSB7Ci0gICAgICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgIC8vIE1h
a2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwg
cmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgp
OwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3Is
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFz
ZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDog
cmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBi
YXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFz
ZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAg
fQotCi0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVyZW5jZS5o
ZWlnaHQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1l
bnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhl
bWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3Rv
ciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFy
Z2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAg
fQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAo
aXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFk
ZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFj
dG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgp
KSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBkYXRlTGF5
b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1
dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIg
dGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZz
ZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Nyb2xsUG9z
aXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5
ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2Rl
SURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0KLUludFJl
Y3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50
UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50
UmVjdEJlaGF2aW9yKSBjb25zdAotewotICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7Ci0gICAg
aWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNs
dWRlU2Nyb2xsYmFycykKLSAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNp
b24oKTsKLSAgICAKLSAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsK
LSAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXpl
LndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNp
emUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OwotfQotCi1JbnRTaXpl
IFJlbmRlckxheWVyOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdG
b3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKLQotICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNj
cm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KLSAgICBT
Y3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uKCkpOwotICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplKCk7Ci0gICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQotICAgICAgICBzdHJl
dGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVT
aXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgp
IC0gdmlzaWJsZUhlaWdodCgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZz
ZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKLQot
ICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChz
Y3JvbGxPZmZzZXQueCgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYg
c2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgp
KQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxl
U2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKLQotICAgIHJldHVybiBzdHJldGNoOwot
I2Vsc2UKLSAgICByZXR1cm4gSW50U2l6ZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyTGF5
ZXI6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFnZSgpLmZvY3VzQ29udHJvbGxl
cigpLmlzQWN0aXZlKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJl
Y3QoKSBjb25zdAotewotICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxD
b3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7Ci0gICAgcmV0dXJuICFzY3Jv
bGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBy
ZWN0ID0gc2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9s
bGJhcikpOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZl
cnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCByZWN0KTsKLX0KLQot
SW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBj
b25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRS
ZWN0KTsKLSAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICBy
ZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gc2Ny
b2xsYmFyUG9pbnQ7Ci0gICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7
Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVu
ZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Ci19Ci0KLUludFBvaW50
IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3Qg
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QK
LXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRQb2lu
dCk7Ci0gICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJl
dHVybiBwb2ludDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUoKSBjb25z
dAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0g
ICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50
KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSkpOwot
fQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpjb250ZW50c1NpemUoKSBjb25zdAotewotICAgIHJl
dHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKLX0KLQotSW50U2l6
ZSBSZW5kZXJMYXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAotewotICAg
IEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBpZiAo
IWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgY29udGVudHNTaXpl
LnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndp
ZHRoKCkpKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKLSAg
ICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0
KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBjb250ZW50c1NpemU7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uIHJlYXNvbikKLXsKLSAgICBTY3JvbGxhYmxlQXJlYTo6YXZh
aWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7Ci0KLSAgICBpZiAocmVhc29uID09IEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Ci0gICAgICAgIGlm
IChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUp
OwotICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQotfQotCi1ib29s
IFJlbmRlckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zKCk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBSZW5k
ZXJMYXllcjo6ZGlkU3RhcnRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQo
KS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVu
ZFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJmbG93
U2Nyb2xsKCk7Ci19Ci0gICAgCi12b2lkIFJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwoKQot
ewotICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNpbmNlIHRo
aXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCi0gICAgcGFnZSgpLmNocm9tZSgp
LmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Ci19Ci0jZW5kaWYKLQot
SW50UG9pbnQgUmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25z
dAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25N
b3VzZVBvc2l0aW9uSW5WaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzSGFuZGxpbmdX
aGVlbEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50
SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Ci19Ci0KLVJlbmRlckxheWVyOjpPdmVy
Zmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYg
cmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKLSAgICAvLyBTY3Jv
bGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCi0gICAgYXV0byBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hS
ZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOwotCi0gICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgYXV0byB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKLQotICAgIGF1
dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IHsKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKTsKLSAgICB9OwotCi0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3Jv
bGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICBib29sIGhh
dmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92
QmFyLmdldCgpKTsKLSAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Ci0gICAgYm9vbCBoYXZl
UmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci0g
ICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFs
U2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVz
aXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVy
bGF5VmVydGljYWxTY3JvbGxiYXIpKTsKLQotICAgIEludFNpemUgY29ybmVyU2l6ZTsKLSAgICBp
ZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9s
bGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KLSAgICAgICAgY29ybmVyU2l6
ZSA9IEludFNpemUgewotICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAotICAgICAgICAg
ICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
OiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgT3ZlcmZs
b3dDb250cm9sUmVjdHMgcmVzdWx0OwotCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBhdXRv
IGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBiYXJS
ZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQpOwotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgICAgICBiYXJS
ZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXpl
LndpZHRoKCksIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3Jv
bGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgYXV0
byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICBiYXJSZWN0LnNl
dFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgpOwotCi0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAg
ICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIHJl
c3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgYXV0byBjb3Ju
ZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgewotICAgICAgICBpZiAocGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgewotICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29y
bmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwot
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0
b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsK
LSAgICB9OwotCi0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgcmVzdWx0
LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7Ci0KLSAgICBpZiAoaGF2ZVJl
c2l6ZXIpIHsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAg
IHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOwotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBj
b3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRTaXplIFJlbmRl
ckxheWVyOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0
Ci17Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYg
KCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJl
Y3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIg
PT0gbV9oQmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250
YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKLSAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotICAgIC8vIElmIHdlIGFyZSBu
b3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWlu
dC4KLSAgICBpZiAoIWJveC0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09
IG1fdkJhci5nZXQoKSkKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxT
Y3JvbGxiYXIubG9jYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVC
eShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgTGF5b3V0UmVj
dCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0
aW5nTW9kZShyZXBhaW50UmVjdCk7Ci0gICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJl
cGFpbnRSZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5l
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250
cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3Jv
bGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3Qp
OwotICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+cmVwYWludFJlY3Rhbmds
ZShyZWN0KTsKLX0KLQotc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxi
YXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNI
aWRkZW5CeVN0eWxlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlT
dHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp2ZXJ0
aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOwotfQotCi1zdGF0aWMgaW5saW5l
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyKQotewotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxl
bWVudCgpKSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+
Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1v
ZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gJnJlbmRlcmVyOwotfQotCi1SZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllcjo6Y3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKLSAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIo
cmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Ny
b2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBp
czxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVh
bFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOwot
ICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVy
U2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3du
Y2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOwotICAgIGVsc2Ugewot
ICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywg
b3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKLSAgICAgICAgZGlk
QWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwotICAgICAgICBpZiAocGFn
ZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRv
cigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9y
KCkpOwotICAgIH0KLSAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgq
d2lkZ2V0KTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7Ci0gICAgaWYgKCFzY3Jv
bGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNj
cm9sbGJhcigpKQotICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwg
b3JpZW50YXRpb24pOwotCi0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAg
c2Nyb2xsYmFyID0gbnVsbHB0cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsc092ZXJm
bG93KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpLnNjcm9sbHNPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlmIChoYXNTY3Jv
bGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAg
IFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRl
cmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFi
bGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7
Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShl
bGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3JvbGxi
YXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAg
ICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xs
RWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVzdHJveWluZyBvciBj
cmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFu
ZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4K
LSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlm
IChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewot
ICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX3ZCYXIgPSBjcmVh
dGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93
KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxl
UmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFz
dGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxh
c3RpY2l0eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ry
b3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShT
Y3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAgLy8gRGVzdHJveWlu
ZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBj
b21lIGFuZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBz
dHlsZS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwot
ICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLVNj
cm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25z
dAotewotICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpObykpCi0gICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7Ci0KLSAgICByZXR1cm4gJnJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhh
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQotewotICAgIGZvciAoYXV0byog
bmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKCpuZXh0TGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7
Ci0gICAgICAgIGlmIChuZXh0TGF5ZXItPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAotewotICAgIHJl
dHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMoKQotewot
ICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVsZW1lbnRzLgotICAgIGlm
ICghaXM8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1l
bnQoKS0+cmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCogYm94
ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAgICB1cGRhdGVTbmFwT2Zmc2V0
c0ZvclNjcm9sbGFibGVBcmVhKCp0aGlzLCAqZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVuY2xvc2lu
Z0VsZW1lbnQoKSksICpib3gsIGJveC0+c3R5bGUoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6
OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJm
bG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlm
IChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdO
b2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0
byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQotYm9vbCBSZW5kZXJMYXllcjo6dXNlc01vY2tTY3Jv
bGxBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5n
czo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpsb2dN
b2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKLXsK
LSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcsICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2Up
OwotfQotCi1TdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAotewot
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5
ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2Fz
ZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIGlm
ICh0cmFuc2Zvcm0oKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9z
KTsKLQotICAgIGlmIChoYXNGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMg
ZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCYWNrZHJvcEZpbHRlcigpKQotICAgICAgICBidWls
ZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JsZW5k
TW9kZSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2RlIl9zKTsKLQot
ICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNv
bGF0ZXMgYmxlbmRpbmciX3MpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAg
IC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgot
ICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFj
a2luZygpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6
OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVs
ZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV92QmFyCi0gICAgICAgIHx8ICFzaG93c092ZXJm
bG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAm
JiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNo
b3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6Omhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5
KSBjb25zdAotewotICAgIGlmICghbV9oQmFyCi0gICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29u
dHJvbHMoKQotICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVs
ZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBh
cnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gbV9oQmFyLT5oZWlnaHQoKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJv
bVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKLXsKLSAgICBh
dXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKLSAgICBh
dXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4
WUNvcm5lcigpOwotICAgIHJldHVybiBsb2NhbFBvaW50IC0gcmVzaXplQ29ybmVyOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjpoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Njcm9sbENvcm5lciB8fCByZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpwb3Np
dGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCi17Ci0g
ICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghcmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmIChtX3ZCYXIpIHsKLSAg
ICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAg
ICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChy
ZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29y
bmVyKTsKLQotICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVS
ZWN0KHJlY3RzLnJlc2l6ZXIpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVu
c2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21w
dXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25h
cHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0
dXJuIG1fc2Nyb2xsU2l6ZS53aWR0aCgpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhl
aWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlz
KS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
dXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgot
ICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVy
TGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93Qm90dG9tKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkp
OwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJu
IG92ZXJmbG93UmVjdC5tYXhZKCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJm
bG93TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAg
ICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAg
ICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVy
Zmxvd1JlY3QueCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0
KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVj
dC5tYXhYKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gp
OwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBmYWxzZTsKLQotICAgIG1fc2Nyb2xs
U2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgp
KSk7Ci0gICAgbV9zY3JvbGxTaXplLnNldEhlaWdodChyb3VuZFRvSW50KG92ZXJmbG93Qm90dG9t
KCkgLSBvdmVyZmxvd1RvcCgpKSk7Ci0KLSAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9
IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7Ci0gICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgc2Ny
b2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Ci0gICAgaW50
IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+
Ym9yZGVyVG9wKCkpOwotICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxl
ZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOwotICAgIAotICAgIGNvbXB1dGVI
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKLXsKLSAgICBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
JiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVy
ZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZs
b3dZKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1
cm4gc2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkp
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3Jv
bGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKLX0K
LQotc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZs
b3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8g
c3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93
U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5
bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09
IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi1z
dGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92
ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJh
ciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYg
IXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRo
ZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxv
dyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKLXsKLSAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotCi0gICAgLy8g
TGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2Ug
aGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09
IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxP
dmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOwotICAgIGJvb2wgaGFzVmVy
dGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKLQotICAgIC8vIElm
IG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFi
bGUgb3IgZGlzYWJsZS4KLSAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
cmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV9oQmFy
LT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgaWYgKG1fdkJhciAmJiBz
dHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxi
YXIpKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0K
LSAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0
IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQuCi0gICAgYm9vbCBhdXRv
SG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJX
aXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jp
em9udGFsT3ZlcmZsb3cpOwotICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9
IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICBpZiAoYXV0b0hv
cml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQp
IHsKLSAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZp
b3IoKSkKLSAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRh
bE92ZXJmbG93KTsKLSAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0
b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0
aWNhbE92ZXJmbG93KTsKLQotICAgICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwotCi0g
ICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgpOwotCi0gICAgICAgIGlmIChyZW5kZXJlcigpLnN0
eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIoKS5zdHlsZSgp
Lm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7Ci0gICAgICAgICAgICBpZiAoIW1faW5P
dmVyZmxvd1JlbGF5b3V0KSB7Ci0gICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09u
bHlUaGlzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xs
YmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxT
Y3JvbGxCYXJDaGFuZ2VkKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2so
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlbmRl
cmVyKCkubGF5b3V0KCk7Ci0gICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOwotICAgICAgICBpZiAocGFyZW50
ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1h
aW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdXAgdGhl
IHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCi0gICAgaWYgKG1faEJhcikgewotICAg
ICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0g
ICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgpOwot
ICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwg
cGFnZVN0ZXApOwotICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1f
c2Nyb2xsU2l6ZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBp
bnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKLSAgICAg
ICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOwotICAg
ICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFn
ZVN0ZXApOwotICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Nj
cm9sbFNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0
KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpKTsKLX0KLQotLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAo
YmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxEaW1lbnNp
b25zRGlydHkgPSB0cnVlOwotICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9
IHNjcm9sbE9mZnNldCgpOwotCi0gICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLQotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNl
dHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2Vz
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQK
LSAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwotI2VuZGlmCi0KLSAgICBpZiAoIWJveC0+aXNIVE1M
TWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkpIHsKLSAgICAgICAgLy8gTGF5
b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4g
dGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMg
YmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAgIFNj
cm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5h
YmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAvLyBUaGlzIGNv
ZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9p
bnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAgICAgIC8vIG9m
IGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxy
ZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgc2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAgICAgIGlmIChj
bGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAgICAgc2Nyb2xs
VG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwotI2Vu
ZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBp
ZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwotCi0g
ICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9t
ZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVw
ZGF0ZSgpOwotICAgIH0KLQotICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0g
ICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0KLSAgICB1cGRh
dGVTY3JvbGxTbmFwU3RhdGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250
cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAotewotICAg
IGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmIChyZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2Nh
bFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy5zY3JvbGxDb3Ju
ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Njcm9sbDsKKyAgICB9
IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+IDApCisgICAgICAgIC8vIElmIHRoZSByZWN0YW5n
bGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVzZSB0aGUgc3BlY2lmaWVkIHBhcnRpYWwgYmVoYXZp
b3IKKyAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0UGFydGlhbEJlaGF2aW9y
KGFsaWduWSk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50Ojpn
ZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOworICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBhbGln
biB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMgZnVydGhlciBkb3du
CisgICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3QgYmlnZ2VyIHRoYW4gdGhlIHZp
c2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20uCisgICAgaWYgKHNjcm9sbFkg
PT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9z
ZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9zZVJlY3QuaGVpZ2h0KCkg
PCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVu
dDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwogCi0gICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJz
ZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBHaXZlbiB0aGUg
WSBiZWhhdmlvciwgY29tcHV0ZSB0aGUgWSBjb29yZGluYXRlLgorICAgIExheW91dFVuaXQgeTsK
KyAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Njcm9sbCkK
KyAgICAgICAgeSA9IHZpc2libGVSZWN0LnkoKTsKKyAgICBlbHNlIGlmIChzY3JvbGxZID09IFNj
cm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tKQorICAgICAgICB5ID0gZXhwb3Nl
UmVjdC5tYXhZKCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKKyAgICBlbHNlIGlmIChzY3JvbGxZ
ID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQ2VudGVyKQorICAgICAgICB5ID0g
ZXhwb3NlUmVjdC55KCkgKyAoZXhwb3NlUmVjdC5oZWlnaHQoKSAtIHZpc2libGVSZWN0LmhlaWdo
dCgpKSAvIDI7CisgICAgZWxzZQorICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCk7CiAKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQoeCwgeSksIHZp
c2libGVSZWN0LnNpemUoKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3dzT3ZlcmZsb3dD
b250cm9scygpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjphdXRvc2Nyb2xsKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbkluV2luZG93KQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
Ly8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4KLSAg
ICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIHRydWU7CisgICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24gPSByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uSW5XaW5kb3cp
OworICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3Np
dGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJl
dmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6
OlllcyB9KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQorU3Ry
aW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICAvLyBEb24n
dCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgotICAgIGlmICghcmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzaG93c092
ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3ZlcmxheSBzY3Jv
bGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0
aGF0IHRoZXkgd2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElm
IHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9s
cwotICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290
IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8vIHRoYXQgbmVl
ZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2gg
dGhlIGxheWVyIHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xs
YmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAK
LSAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRy
ZWUgdG8gZ2V0IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFw
YWludGluZ092ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxi
YXJPZmZzZXQgPSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3Nhcnkg
dG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJz
LgotICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkg
fHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKLSAg
ICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGlmICgh
b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBlbmNsb3Np
bmdDb21wb3NpdGluZ0xheWVyKCk7Ci0gICAgICAgIGlmICghcGFpbnRpbmdSb290KQotICAgICAg
ICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKTsKLQotICAgICAg
ICBwYWludGluZ1Jvb3QtPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyh0cnVlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQg
dG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChw
YWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0OwotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIC8vIE1v
dmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1hbGx5IG1vdmUg
YW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKLSAgICAvLyB3
aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdo
ZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBmaXhlZCBwb3Np
dGlvbmVkIGVsZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXpl
KGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhl
IHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAo
bV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFy
LT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFt
YWdlUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiUmVu
ZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIExv
d2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgpKTsKIAot
ICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEg
c2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCi0gICAgLy8g
ZWRnZSBvZiB0aGUgYm94LgotICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVk
UGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotICAgIAotICAgIC8vIFBhaW50IG91ciByZXNpemVy
IGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgotICAgIHBh
aW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLX0K
KyAgICBpZiAodHJhbnNmb3JtKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5z
Zm9ybSJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRS
ZWN0JiBkYW1hZ2VSZWN0KQotewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJl
Y3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmls
dGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICBp
ZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVT
Y3JvbGxDb3JuZXJTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChoYXNC
YWNrZHJvcEZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBm
aWx0ZXIiX3MpOwogCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xs
Q29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ug
d2UgbmVlZAotICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KLSAgICBpZiAoIWhhc092
ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50
U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOwotfQorICAgIGlmIChpc29sYXRlc0JsZW5k
aW5nKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwog
Ci12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKLXsKLSAg
ICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOwotICAgIEZsb2F0U2l6ZSBjb3JuZXJS
ZXNpemVyU2l6ZTsKLSAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkgPj0gMikgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNp
emVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVh
UmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2Ug
PSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJl
c2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxl
KDAuNWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFn
ZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
dGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJ
bWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXpl
ID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsK
KyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdy
YXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgIiAi
IDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkp
OwogICAgIH0KIAotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQudHJhbnNs
YXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJl
c2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVy
UmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgt
MS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICAgICAg
Y29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQot
ICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
Y29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVD
b3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0CiB7
Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKLQotICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAg
IHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJz
UmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
Y29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNp
emVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNp
emVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9m
ZnNldCwgcmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJh
d1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKLQotICAgIC8v
IERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJl
IGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVk
ZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAgIGlmICghaGFz
T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICBjb250
ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5l
ciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRT
aXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsg
MV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsg
MjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMS4w
Zik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIp
KTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
eSgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBv
aW50IGxvY2FsUG9pbnQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0Jv
dHRvbSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFp
bnMobG9jYWxQb2ludCk7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBM
YXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBi
b3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxv
d1JlY3QubWF4WSgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250
cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQor
TGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKIHsKLSAgICBpZiAo
IW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgSW50
UmVjdCByZXNpemVDb250cm9sUmVjdDsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6
ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgewotICAgICAgICBpZiAocmVjdHMucmVzaXplci5jb250YWlu
cyhsb2NhbFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVyIGFuZCBwYXNzIGl0
IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgotICAgIGlmIChtX3ZCYXIgJiYgbV92QmFyLT5zaG91
bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNl
dFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9oQmFyICYmIG1faEJhci0+c2hvdWxkUGFydGljaXBh
dGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJh
ci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJh
cihtX2hCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgp
KTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVy
biBvdmVyZmxvd1JlY3QueCgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwor
ICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwor
ICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92
ZXJmbG93UmVjdC5tYXhYKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5
b3V0U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJl
aGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNldDxQYWludExh
eWVyRmxhZz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBwYWludFBvbGlj
eSwgRXZlbnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCkBAIC00MTg5LDE3ICsy
NTkxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAgICB3aWRnZXQtPnNldE92ZXJs
YXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5
U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5ZXJQYWludGluZ0luZm8g
cGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVo
YXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7Ci0gICAgcGFpbnRMYXllcihj
b250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3Jv
bGxiYXJzKTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7
Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBSZWN0LCBCb3Jk
ZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtNDIyMiw3
ICsyNjEzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgICAgICAvLyBhbnkgbGF5ZXJz
IHdpdGggb3ZlcmZsb3cuIFRoZSBjb25kaXRpb24gZm9yIGJlaW5nIGFibGUgdG8gYXBwbHkgdGhl
c2UgY2xpcHMgaXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2JqZWN0IGJlIGluIG91cgogICAgICAgICAv
LyBjb250YWluaW5nIGJsb2NrIGNoYWluIHNvIHdlIGNoZWNrIHRoYXQgYWxzby4KICAgICAgICAg
Zm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSBydWxlID09IEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFk
aXVzID8gdGhpcyA6IHBhcmVudCgpOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsK
LSAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNv
bXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT51c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpKQorICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRC
ZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVudCkgJiYgbGF5ZXItPnNjcm9s
bGFibGVMYXllcigpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXItPnJlbmRl
cmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVySXNJbkNvbnRh
aW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ0MjQsNyArMjgxNSw4IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgYm9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkaXNh
YmxlIHN1YnBpeGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cgY2xpcHMgb3Igc3ViZnJhbWVz
IG9uY2Ugd2Ugc2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9uIHRoZSBzY3JvbGxpbmcgdGhy
ZWFkLgotICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHx8IChyZW5kZXJl
cigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wgZG9lc05vdFVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcgPSAhc2Nyb2xsYWJsZUxheWVyKCkgfHwgIXNjcm9sbGFibGVMYXllcigpLT51
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50
aW5nID0gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgZG9lc05vdFVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAg
IGJvb2wgaXNab29taW5nID0gIXBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdl
U2NhbGVGYWN0b3IoKTsKICAgICBpZiAoc2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRz
U2Nyb2xsQnlQYWludGluZyB8fCBpc1pvb21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250
cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzE5LDggKzMx
MTEsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBv
c2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywg
bG9jYWxQYWludEZsYWdzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3Zl
cmxheVNjcm9sbGJhcnMgJiYgaGFzU2Nyb2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVy
Zmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8pOworICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxi
YXJzICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxi
YXJzKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRy
b2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8pOwogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAv
LyBXaGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5
UmVjdCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTE4OCwx
OCArMzU4MCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRDbGlwcGluZ01hc2tGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyCiAgICAgfQogfQogCi12b2lkIFJl
bmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKLXsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKLSAgICAgICAgaWYgKGZyYWdtZW50
LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJv
dW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9u
KCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZz
ZXQpKSwKLSAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0
LnJlY3QoKSksIHRydWUpOwotICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgIH0KLX0KLQogdm9pZCBSZW5k
ZXJMYXllcjo6Y29sbGVjdEV2ZW50UmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiBwYWludEJlaGF2aW9yKQogewogICAgIEFTU0VSVChsb2NhbFBhaW50aW5nSW5mby5ldmVudFJl
Z2lvbkNvbnRleHQpOwpAQCAtNTIzMyw3ICszNjEzLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0
VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JgogICAgICAgICAgICAgICAgIGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNjYWxlKHNjYWxl
RmFjdG9yKTsKICAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChhYnNvbHV0ZUxheW91
dFZpZXdwb3J0UmVjdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGl0VGVzdEFyZWEu
aW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVj
dChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CisgICAgICAgICAgICBoaXRUZXN0QXJl
YS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRS
ZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CiAgICAg
fQogCiAgICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMsIG51
bGxwdHIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwgZmFs
c2UpOwpAQCAtNTQ2NCw5ICszODQ0LDExIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAg
ICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxv
Y2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKLSAgICAg
ICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYWxQb2ludCk7Ci0g
ICAgICAgIHJldHVybiB0aGlzOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlz
LT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5jYW5S
ZXNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXItPmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5
ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAg
IHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOworICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOZXh0IHdl
IHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBSZW5kZXJP
YmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKQEAgLTU1MzksMzUgKzM5MjEsNiBAQCBib29sIFJl
bmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJMYXll
cjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJG
cmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewotICAgIGlmIChsYXllckZyYWdtZW50cy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYm9yZGVyQm94UmVj
dCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuYm9yZGVy
Qm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0K
LSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdt
ZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgewotICAgICAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgICAgICBJ
bnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0
LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1h
eFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhY
TWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgp
LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9OwotCi0gICAgZm9yIChpbnQgaSA9IGxheWVy
RnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IExheWVy
RnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7Ci0gICAgICAgIGF1dG8g
cmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJl
Y3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKLSAgICAgICAgaWYgKGZy
YWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNp
emVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgp
KSkgewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0
TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5
ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFp
bmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUq
IHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpCiB7CkBAIC02MDA4LDM2ICs0MzYxLDYg
QEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVk
c0JvdW5kcykgY29uc3QKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMp
Ci17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5pdGUoZW5jbG9zaW5nSW50UmVj
dChib3VuZHMpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKQotewotICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgp
OwotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmNsZWFyQmxvY2tTZWxl
Y3Rpb25HYXBzQm91bmRzKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1Nl
bGVjdGlvbkdhcHMoKQotewotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQt
PnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLQotICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91dFJlY3Qg
cmVjdCA9IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwotICAgIHJlY3QubW92ZUJ5KC1zY3Jv
bGxQb3NpdGlvbigpKTsKLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAh
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCks
IG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCi0gICAgaWYg
KHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQotICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsg
Ly8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCi0gICAgaWYgKCFyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCiBi
b29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBs
YXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IE9w
dGlvbmFsPExheW91dFJlY3Q+JiBjYWNoZWRCb3VuZGluZ0JveCkgY29uc3QKIHsKICAgICAvLyBB
bHdheXMgZXhhbWluZSB0aGUgY2FudmFzIGFuZCB0aGUgcm9vdC4KQEAgLTYzMzQsMjEgKzQ2NTcs
NiBAQCBib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0CiAgICAgcmV0
dXJuIG1fYmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQogCi1HcmFwaGlj
c0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjps
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5n
ID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQot
Ci1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25z
dAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkgOiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRoVHJhbnNm
b3JtKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAogewogICAg
IGJvb2wgcGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2luZygpLT5wYWlu
dHNJbnRvV2luZG93KCk7CkBAIC02Mzc5LDExICs0Njg3LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6
c2hvdWxkQXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlv
ciwgT3AKICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVyRmxhZzo6UGFp
bnRpbmdDb21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpz
Y3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xs
c092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQogYm9vbCBSZW5k
ZXJMYXllcjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAm
JiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NTA3LDggKzQ4MTAsMTIg
QEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0CiAg
ICAgaWYgKCFpc05vcm1hbEZsb3dPbmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
cmV0dXJuIGhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgfHwgY2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJs
ZUxheWVyKCk7CisgICAgYm9vbCBoYXNPdmVybGF5U2Nyb2xsYmFycyA9IHNjcm9sbGFibGVMYXll
ciAmJiBzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgYm9vbCBj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0gc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVM
YXllci0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworCisgICAgcmV0dXJuIGhhc092ZXJs
YXlTY3JvbGxiYXJzCisgICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcKICAgICAg
ICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0Nh
bnZhcygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNWaWRlbygpCkBAIC02NjI1LDcgKzQ5MzIs
NyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25zdAog
ICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IGhhc092
ZXJmbG93Q29udHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JC
YWNrZ3JvdW5kKCkgfHwgKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5o
YXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5
Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdApAQCAtNjYzNSw3
ICs0OTQyLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRD
b250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50
KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCBoYXNPdmVyZmxv
d0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwg
KHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNPdmVyZmxvd0NvbnRy
b2xzKCkpKSB7CiAgICAgICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogCkBAIC02NjYwLDM4ICs0OTY3LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5v
bkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICByZXR1cm4g
aGFzTm9uRW1wdHlDaGlsZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKLXsKLSAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KLSAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNl
bHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE92ZXJmbG93
IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKLSAgICBPdmVyZmxvdyBvdmVy
Zmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAgICAvLyBUbyBhdm9pZCBkb2lu
ZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtl
ZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgotICAg
IGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAm
JiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3Jv
bGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKLSAgICBib29s
IG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFz
VmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
Ym94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOwotICAgIHNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIC8vIFdpdGggbm9uLW92ZXJs
YXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5
IGJlIGRpc2FibGVkLgotICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdl
IG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgotICAgIGlmIChtX2hCYXIg
JiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVy
Zmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Ny
b2xsKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAobV92QmFy
ICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJm
bG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3Jv
bGwpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmICghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgc2V0SXNOb3Jt
YWxGbG93T25seShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpAQCAtNjcxNCw2ICs0OTg5LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXllciBh
bHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2liaWxpdHkg
ZGlydHkgYml0cy4gVGhpcyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQgYWxv
bmcgd2l0aCB0aGUgcmVzdC4KKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3Jv
bGxhYmxlTGF5ZXIoKTsKICAgICBpZiAob2xkU3R5bGUpIHsKICAgICAgICAgYm9vbCB2aXNpYmls
aXR5Q2hhbmdlZCA9IG9sZFN0eWxlLT52aXNpYmlsaXR5KCkgIT0gcmVuZGVyZXIoKS5zdHlsZSgp
LnZpc2liaWxpdHkoKTsKICAgICAgICAgaWYgKG9sZFN0eWxlLT51c2VkWkluZGV4KCkgIT0gcmVu
ZGVyZXIoKS5zdHlsZSgpLnVzZWRaSW5kZXgoKSB8fCB2aXNpYmlsaXR5Q2hhbmdlZCkgewpAQCAt
NjcyMywxOCArNDk5OSwxNSBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAK
ICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1
dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmls
aXR5Q2hhbmdlZCAmJiBzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAgICAgfQogCi0g
ICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5t
YXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5p
c0JveCgpKSB7Ci0gICAgICAgIGlmICghbV9tYXJxdWVlKQotICAgICAgICAgICAgbV9tYXJxdWVl
ID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKLSAgICAgICAgbV9tYXJxdWVlLT51
cGRhdGVNYXJxdWVlU3R5bGUoKTsKLSAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKLSAgICAgICAg
bV9tYXJxdWVlID0gbnVsbHB0cjsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKSB7CisgICAgICAg
IHNjcm9sbGFibGVMYXllci0+Y3JlYXRlT3JEZWxldGVNYXJxdWVlSWZOZWVkZWQoKTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShvbGRT
dHlsZSk7CisgICAgfQogCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xk
U3R5bGUpOwogICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBjYW4gbWFrZSB0aGlzIGxheWVyIHNl
bGYtcGFpbnRpbmcgc28gd2UgbmVlZAogICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUgYml0IG9uY2Ug
c2Nyb2xsYmFycyBoYXZlIGJlZW4gdXBkYXRlZC4KICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXll
cigpOwpAQCAtNjc0NywxNSArNTAyMCwxMiBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5n
ZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX3JlZmxlY3Rpb24tPnNldFN0eWxlKGNyZWF0ZVJlZmxl
Y3Rpb25TdHlsZSgpKTsKICAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IE5lZWQgdG8gZGV0ZWN0
IGEgc3dhcCBmcm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZpY2UgdmVyc2Ep
LgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAg
aWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAKLSAgICB1
cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworCisg
ICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZVNjcm9sbGJhclN0eWxlKCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xs
Q29ybmVyU3R5bGUoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVSZXNpemVyU3R5
bGUoKTsKKyAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKICAg
ICB1cGRhdGVUcmFuc2Zvcm0oKTsKQEAgLTY3NzYsOTggKzUwNDYsNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFi
bGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCi17Ci0gICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcg
PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgIGJvb2wgaXNWaXNpYmxlVG9I
aXRUZXN0ID0gcmVuZGVyZXIoKS52aXNpYmxlVG9IaXRUZXN0aW5nKCk7Ci0gICAgaWYgKEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25lckVsZW1lbnQo
KSkKLSAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJlcigpICYmIG93
bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7Ci0KLSAgICBib29sIGlzU2Ny
b2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKLSAgICBib29sIGFk
ZGVkT3JSZW1vdmVkID0gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKLSAg
ICAKLSAgICBpZiAoaXNTY3JvbGxhYmxlKSB7Ci0gICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEpIHsKLSAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFk
ZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYSkgewotICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVT
Y3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEg
PSBmYWxzZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBpZiAo
YWRkZWRPclJlbW92ZWQpIHsKLSAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAhY2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG9u
bHkgbmVlZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3ZlcmZsb3cgc2Ny
b2xsaW5nLCBzbyBpZiB3ZSBiZWNhbWUKLSAgICAgICAgICAgIC8vIGFjY2VsZXJhdGVkLCByZW1v
dmUgb3Vyc2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCi0gICAgICAgICAgICB1bnJl
Z2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgfQotICAg
IH0KLSNlbHNlCi0gICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsKLSNlbmRpZgot
fQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCi17Ci0gICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcigpKTsKLSAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkg
PyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3Jv
bGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7Ci0KLSAg
ICBpZiAoIWNvcm5lcikgewotICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Nj
cm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVy
KCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBBIHJl
bmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0gICAgICAgIG1fc2Nyb2xs
Q29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Njcm9sbENvcm5lci0+
aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5z
ZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJT
Y3JvbGxDb3JuZXIoKQotewotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOwotICAgIG1fc2Nyb2xs
Q29ybmVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUmVzaXplclN0
eWxlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9y
U2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7
IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRy
OwotCi0gICAgaWYgKCFyZXNpemVyKSB7Ci0gICAgICAgIGNsZWFyUmVzaXplcigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNp
emVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1
bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVy
IHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0gICAgICAgIG1fcmVzaXplci0+c2V0
UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUo
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNp
emVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyUmVzaXplcigpCi17Ci0gICAgaWYg
KCFtX3Jlc2l6ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChu
dWxscHRyKTsKLSAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOwotfQotCiBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OnJlZmxlY3Rpb25MYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVmbGVj
dGlvbiA/IG1fcmVmbGVjdGlvbi0+bGF5ZXIoKSA6IG51bGxwdHI7CkBAIC02OTk5LDcgKzUxNzcs
NyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBhcmVudCgpKQog
ICAgICAgICByZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIobGF5ZXIpOworICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0aW5nUGFyZW50
RnJhbWVzKCkgY29uc3QKQEAgLTcyNDUsMTEgKzU0MjMsMTMgQEAgc3RhdGljIHZvaWQgb3V0cHV0
UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBXZWJDb3Jl
OjpSZW4KIAogICAgIHN0cmVhbSA8PCAiICI7CiAKLSAgICBzdHJlYW0gPDwgbGF5ZXIuYm94U2Ny
b2xsaW5nU2NvcGUoKTsKLSAgICBzdHJlYW0gPDwgIiAiOwotICAgIHN0cmVhbSA8PCBsYXllci5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGxheWVyLnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIHN0cmVhbSA8PCBzY3JvbGxhYmxl
TGF5ZXItPmJveFNjcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIHN0cmVhbSA8PCAiICI7CisgICAg
ICAgIHN0cmVhbSA8PCBzY3JvbGxhYmxlTGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsK
IAotICAgIHN0cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8PCAiICI7CisgICAgfQogCiAg
ICAgb3V0cHV0SWRlbnQoc3RyZWFtLCBkZXB0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKaW5kZXggZDgzNzNhYWU4MTlkNGViOTlkNmIyN2RjY2U1ZWVlMDk0ZmVlOWJm
NC4uZmVhYjkxYjNiNzk2Mzk5NWM2MzFlNzExMjJlZDNkNWQ5NzRiOGU5OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJTY3JvbGxCZWhh
dmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC0x
NDAsMjAgKzEzOSwyOCBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMgewogICAg
IFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yIHsgU2Nyb2xsQmVoYXZpb3I6OkF1dG8gfTsKIH07CiAK
LXVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7Ci0KIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJlbmRlckxheWVyIGZpbmFs
IDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHVibGljIENh
bk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURf
V0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGljOgogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7
CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAgICBmcmllbmQgY2xhc3Mg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9s
bGFibGU7CisKKyAgICBlbnVtIGNsYXNzIExheWVyVHlwZSB7CisgICAgICAgIFN0YXRpYywKKyAg
ICAgICAgU2Nyb2xsYWJsZQorICAgIH07CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihSZW5k
ZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAorICAg
IExheWVyVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlwZTsgfQorICAg
IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgY29uc3QgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIoKSBjb25zdDsKKwogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRn
ZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3ll
ZCgpOwpAQCAtMjIzLDYgKzIzMCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11
dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBm
bGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVyKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdz
IHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNz
IENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MjEsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0
eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7
CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVl
LmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93
KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0NDEsMTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVj
dCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9
CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBj
b250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsK
LSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZyb21Q
b2ludChjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxh
eWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVk
QXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
Y29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9s
bFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZz
ZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBB
bmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1h
dGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6
Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQg
c2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBz
Y3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1w
aW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Ny
b2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZv
aWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7
Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0KLSAg
ICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFi
bGUuCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVy
IHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxl
QXJlYS4KLSAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZhaWxh
YmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwot
CiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVz
LgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0
ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25z
Jik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJs
ZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25z
dCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7
Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0K
LSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9u
dGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJl
YSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAg
IFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZC
YXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEo
KSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgp
IGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcigp
IGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5h
bDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlv
bjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJv
b2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wg
aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNlbmRp
ZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVu
ZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0jZW5k
aWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBz
Y3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBz
Y3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9s
bGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0byBiZSB1cC10by1kYXRlKS4KICAgICBi
b29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUp
IGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAg
IGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KTsKLSAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJmbG93
Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0
JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAg
IHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQotICAg
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAot
ICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVzaXpl
TW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVuZGVy
Vmlld0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAgIGJv
b2wgaXNGb3JjZWRTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0YWNr
aW5nQ29udGV4dDsgfQogICAgIGJvb2wgaXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAgLTU1
NSw5ICs0NjQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQo
Ym9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhh
c0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAg
ZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVk
TGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9k
ZSkgY29uc3QKQEAgLTU3OSwxMCArNDg1LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDbGlw
UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxs
Q2xpcFJlY3RUeXBlcyk7CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBlIHR5
cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcygpOwotICAgIHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcygp
OwotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0
dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJvb2wg
aGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9
CkBAIC02MzcsNiArNTM5LDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdB
bmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAg
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91
bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5
ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGlu
ZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNs
aXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTgsNyArNjAyLDYgQEAgcHVibGlj
OgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRp
b25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0g
U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQq
ID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3Zl
cmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWlu
dFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAg
ICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBS
ZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBp
bk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVz
cGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSArNjg3LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lu
bGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRp
b24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlv
bjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
Ym9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRp
ZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmhh
c1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUg
dHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OCwyMCAr
NzU2LDkgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygp
OwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNl
KTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigp
IGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KICAg
ICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9pZCBzZXRIYXNDb21wb3Np
dGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3Ip
IHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3I7IH0KIAotICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Nj
b3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBm
b3IgYXN5bmMgc2Nyb2xsaW5nLgotICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3Jv
bGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KLSAgICBP
cHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQotCiAgICAgYm9vbCBwYWludHNXaXRo
VHJhbnNwYXJlbmN5KE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIChpc1RyYW5zcGFyZW50KCkgfHwgaGFzQmxlbmRNb2Rl
KCkgfHwgKGlzb2xhdGVzQmxlbmRpbmcoKSAmJiAhcmVuZGVyZXIoKS5pc0RvY3VtZW50RWxlbWVu
dFJlbmRlcmVyKCkpKSAmJiAoKHBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yOjpGbGF0dGVu
Q29tcG9zaXRpbmdMYXllcnMpIHx8ICFpc0NvbXBvc2l0ZWQoKSk7CkBAIC04ODUsMTEgKzc3Miw2
IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkgcmVjdCBpcyBnaXZlbiBpbiBsb2NhbCBjb29y
ZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25z
dCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBib29sIHNjcm9sbGluZ01heVJldmVhbEJhY2tn
cm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KLSAg
ICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xs
YmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFy
czsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNvbnN0OwogICAgIGJvb2wgcmVx
dWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsKIApAQCAtOTE4LDggKzgwMCw2
IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFnbWVudGVkRmxvd0Fu
Y2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQotCiAgICAgdm9pZCBzaW11bGF0ZUZy
ZXF1ZW50UGFpbnQoKSB7IFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50RnJl
cXVlbmN5VHJhY2tlciB9OyB9CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBjb25zdCB7
IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHkoKTsgfQog
CkBAIC05MzAsNyArODEwLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRSZWdpb25J
bnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUsIE5vbkNv
bXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2ZW50UmVn
aW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKIAogcHJp
dmF0ZToKIApAQCAtMTAxMCw5ICs4OTAsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVT
ZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxh
ZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAw
LAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEgPDwgMSwK
QEAgLTEwMzAsMTYgKzkwNyw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25z
RmxhZz4pOwogCi0gICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7
Ci0gICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8
PCAxLAotICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAx
IDw8IDIsCi0gICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMywKLSAgICB9OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsRmxhZz4gPSB7IH0pOwotCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBQ
YWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAgICBMYXlvdXRQb2ludCByZW5kZXJC
b3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgp
OyB9CkBAIC0xMDcyLDcgKzkzOSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IExheW91dFJl
Y3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3Vu
ZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAg
ICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKLSAgICB2
b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CiAgICAgdm9p
ZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWlu
dENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRC
ZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZv
aWQgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pOwpAQCAt
MTA5OSw2NCArOTY1LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVu
dHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVj
dCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNv
bnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJh
Z21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0
OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQp
IGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21l
bnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRy
KTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25z
dCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIGNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAKICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAg
IGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Nj
cm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5l
clJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmlu
YWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50
IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBm
aW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikg
Y29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwot
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qg
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Ny
b2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xs
YWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAg
IHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6
ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9p
ZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBi
b29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3Rv
ckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTYsMTQgKzEwMTIsNiBAQCBw
cml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBs
YXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBv
aW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAg
dm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7
Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigp
OwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29s
IGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxNywyMCArMTAy
NSw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKICAg
ICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKIAotICAgIHN0cnVjdCBPdmVyZmxv
d0NvbnRyb2xSZWN0cyB7Ci0gICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAg
ICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxD
b3JuZXI7Ci0gICAgICAgIEludFJlY3QgcmVzaXplcjsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxD
b3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Nyb2xsQ29ybmVyIDogcmVzaXplcjsKLSAgICAg
ICAgfQotICAgIH07Ci0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCkgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNv
bnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KKyAgICBMYXllclR5cGUgbV9sYXllclR5
cGU7CiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRzOwog
CiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVyIDogMTsKQEAgLTEyNDQsMTAgKzEw
MzksNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9ub3JtYWxGbG93TGlzdERpcnR5OiAxOwogICAg
IGJvb2wgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QgOiAxOwogCi0gICAgLy8gS2VlcHMgdHJhY2sg
b2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2Fu
IGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgotICAgIGJvb2wgbV9pblJlc2l6ZU1v
ZGUgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAgYm9v
bCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYgaGF2ZSBubyBzZWxmLXBh
aW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVuIGR1
cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1OSwxNCArMTA1MCwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5kZWQgdXAg
cGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZvcmUgbmVl
ZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxlbmQpLgogICAgIGJv
b2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQgdHJhY2tp
bmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBtX2luT3Zl
cmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50U3RhdHVzIDogMjsgLy8g
UmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgOiAx
OwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAgYm9vbCBtX3Zpc2libGVE
ZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVzY2VuZGFu
dCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAgICAgYm9v
bCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2JlaGF2ZXNB
c0ZpeGVkIDogMTsKIApAQCAtMTI4NywxNyArMTA3Niw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3NpdGlu
Z1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRS
ZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgogCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAg
ICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsK
LSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOwot
I2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
IDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKLSAg
ICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VOQUJM
RUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpAQCAt
MTMzOCwyNSArMTExNiw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVp
Z2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Ny
b2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQg
YXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKLQotICAgIC8vIEZvciBsYXllcnMgd2l0
aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8U2Ny
b2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOwotCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hlOwogICAgIAotICAg
IEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIE1hcmthYmxl
PFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAw
Pj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50
ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fY29udGVudHNTY3JvbGxp
bmdTY29wZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7
IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAKICAgICAvLyBDYWNoZWQgbm9ybWFsIGZsb3cg
dmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzIHdpdGggc3RhdGljIGxlZnQv
dG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1fc3RhdGljSW5saW5lUG9zaXRpb247CiAgICAg
TGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0xMzY2LDEwICsxMTI3LDYgQEAg
cHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVseSBiZSBleHRlbmRlZCB0byBtYW55IHJlcGxp
Y2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRlcikuCiAgICAgUmVuZGVyUHRyPFJlbmRlclJl
cGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0
b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xs
YmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBh
cnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJM
YXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5v
dCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKaW5kZXggNTE5ZDM2MTA3ODA4ZTM2MmY3YzA0MGY0Mjc4Yzg4M2EyZjM5MDYxZS4u
Y2RmOWE5YTZkZDRiNTUwYWNjMjFkNTI2YTQwMmE4ODUxY2VhNWIxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTUzLDEzICs1Mywx
NCBAQAogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBs
dWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVkZSAi
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVy
SFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAi
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUu
aCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjY5LDcgKzI3MCw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQoKQogI2VuZGlmCiAKICAgICBBU1NFUlQobV9vd25p
bmdMYXllci5iYWNraW5nKCkgPT0gdGhpcyk7Ci0gICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21T
Y3JvbGxDb29yZGluYXRlZExheWVycyhtX293bmluZ0xheWVyKTsKKyAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
Y29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycygqc2Nyb2xsYWJs
ZUxheWVyKTsKIAogICAgIGNsZWFyQmFja2luZ1NoYXJpbmdMYXllcnMoKTsKIH0KQEAgLTQyMSwx
MSArNDIzLDExIEBAIHN0YXRpYyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShjb25zdCBSZW5kCiAKICAgICBUaWxlZEJhY2tpbmc6
OlRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmlz
aWJsZUFyZWE7CiAgICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplID0gZnJh
bWVWaWV3LmluTGl2ZVJlc2l6ZSgpOwotICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2
ZVJlc2l6ZSkgewotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVy
ZmxvdygpKQorICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSAmJiBsYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCktPmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRpbGVD
b3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGluZzsK
IAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAg
ICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlVmVydGljYWxP
dmVyZmxvdygpKQogICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292
ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFn
ZTsKQEAgLTEyMzIsOCArMTIzNCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6
Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgIGlm
IChjb21wb3NpdGVkQW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkg
ewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9y
QmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENv
bnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsK
LSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+
c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0
UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0
b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNl
dCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3Jv
bGxPZmZzZXQ7CisgICAgICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVMYXll
cigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGNvbXBvc2l0ZWRB
bmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKTsKKyAgICAgICAgcGFy
ZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9j
YXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24o
KSkgLSBzY3JvbGxPZmZzZXQpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gcGFyZW50R3JhcGhpY3NMYXllclJlY3Q7CkBAIC0xMjg1LDcgKzEyODksOCBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5
ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXIt
PnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUoKSk7CiAKICAgICAgICAgICAg
IGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICAgICAg
U2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChlbnRyeS5jbGlwRGF0YS5j
bGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICAgICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9s
bGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICAgICAgICAgIGVudHJ5LmNs
aXBwaW5nTGF5ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAgICAgICAg
ICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTEzOTAsNyAr
MTM5NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRhaW5l
ckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlv
bigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9sbENv
bnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xsQ29u
dGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAotICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisgICAgICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNl
dCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAgICAg
ICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5lckxh
eWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTE0MDQsNyArMTQxMSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9z
aXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBv
bGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRG
cm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXll
ci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAgICAg
SW50U2l6ZSBzY3JvbGxTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSwgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxTaXplICE9IG1f
c2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9mZnNldENoYW5nZWQp
CiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7
CiAKQEAgLTE0ODksMTQgKzE0OTYsMTggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldExv
Y2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQKIAogdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3JvbGxPZmZzZXQgc2Ny
b2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCkg
PT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxU
eXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMg
aGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJv
dW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAgICAg
IHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5
ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250ZW50
cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0aGFu
IGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xs
ZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNl
dCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVCht
X3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTExLDEy
ICsxOTIyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVyRm9yU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNj
cm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJh
cihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkp
OwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJh
ckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhciht
X293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGlmICghbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBy
ZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVx
dWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0xOTI0LDEyICsxOTM5LDE2IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3QK
ICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5yZW5kZXJlcigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5v
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsK
KyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFy
ID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xsYmFy
ID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5ZXIu
aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBzY3Jv
bGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIgPSB2
ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVyLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxi
YXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwxMCArMTk4NCwxMiBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpv
bnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9s
YXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9s
bCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3du
aW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgQVNTRVJU
KG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworCiAgICAgICAgIGlmIChob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwg
SG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlTGF5ZXIoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAgICAgICAgIGlmICh2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZl
cnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3Jv
bGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCptX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVy
c0NoYW5nZWQ7CkBAIC0xOTc2LDcgKzE5OTcsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAog
CiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJz
KCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAg
aWYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYmFycygp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhl
bCBzbmFwcGluZy4KQEAgLTE5OTgsMTYgKzIwMjAsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRo
ZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJl
Y3RzID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRvIHJl
Y3RzID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAogICAgIGlm
IChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAg
IHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFy
LCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3du
aW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5
ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAg
ICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
IHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250
ZW50KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250
ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVM
YXllci0+dmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkp
OwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKQEAgLTIxNjUsNyArMjE4Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVT
Y3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAgICAgbV9zY3Jv
bGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Nyb2xs
Q29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCptX3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldp
dGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJlbW92
ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCksICp0aGlzKTsKIAogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsQ29udGFpbmVy
TGF5ZXIuZ2V0KCkpOwogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyLmdldCgpKTsKQEAgLTIxNzQsOSArMjE5NywxMSBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNTY3JvbGxpbmdMYXllcnMpCiAg
ICAgICAgIEdyYXBoaWNzTGF5ZXI6OnVucGFyZW50QW5kQ2xlYXIobV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXIpOwogICAgIH0KIAotICAgIGlmIChtX3Njcm9sbENvbnRhaW5lckxheWVyKQotICAgICAg
ICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIobV9vd25pbmdMYXllcik7Ci0gICAg
CisgICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkuZGlkQWRk
U2Nyb2xsaW5nTGF5ZXIoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIH0K
KwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yOTg1LDggKzMwMTAsOSBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlvdXRS
ZWN0JiByLCBHcmFwaAogICAgIH0KIAogICAgIGlmIChtX3Njcm9sbGVkQ29udGVudHNMYXllciAm
JiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAgICBGbG9hdFJlY3Qg
bGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRSZWN0Rm9yUGFpbnRpbmc7Ci0gICAgICAgIGxh
eWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVu
ZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpKSAtIG1f
c3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3Zl
KC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91
dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkpIC0g
bV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXAp
OwogICAgIH0KIH0KQEAgLTMwMzIsOCArMzA1OCwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3Jh
cAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBs
YXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdz
KTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRM
YXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxh
eWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAgICAg
ICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygp
ICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGxheWVyLnBhaW50
TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJM
YXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJXaXRo
RWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCkBAIC0zMzIzLDE3
ICszMzUxLDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWludERl
YnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdy
YXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAg
cGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRl
eHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVM
YXllcigpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxhYmxl
TGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAg
IH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
IHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJh
cigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVj
dCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAg
ICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9
IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JS
ZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0
aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3Qo
Y2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlv
bigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJ
bnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9v
d25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRD
bGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0
LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNm
b3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgp
LnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4ODM0
OWM3ZmYzY2U2ODUyMjZhLi43NWYwYmRlZTQ5YjdlNWMyOGZjOGY2ZDRlNzY2N2RhZmYwMWQ1YjU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcApAQCAtMzE1Myw3ICszMTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAog
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxv
d1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdE
YXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSB8fCAhbGF5ZXIu
c2Nyb2xsYWJsZUxheWVyKCktPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHF1ZXJ5RGF0YS5sYXlvdXRVcFRvRGF0ZSA9PSBMYXlv
dXRVcFRvRGF0ZTo6Tm8pIHsKQEAgLTMyOTMsNyArMzI5Myw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGNvbnN0IFJlbmRlckxh
eWVyJiBsCiAKIHN0YXRpYyBib29sIGlzU2Nyb2xsZWRCeU92ZXJmbG93U2Nyb2xsTGF5ZXIoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgb3ZlcmZsb3dTY3JvbGxM
YXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKSA9PSBvdmVyZmxv
d1Njcm9sbExheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobGF5ZXIu
c2Nyb2xsYWJsZUxheWVyKCkpOworICAgIEFTU0VSVChvdmVyZmxvd1Njcm9sbExheWVyLnNjcm9s
bGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmJveFNj
cm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+
Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNv
bnN0IFJlbmRlckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRpYXRl
TGF5ZXIpCkBAIC00NTY3LDggKzQ1NjksMTEgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclZpZXdwb3J0Q29uc3RyYWluZWQKIExh
eW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVS
ZWN0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
TGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGFuY2VzdG9yTGF5ZXIgbmVlZHMgdG8gYmUg
YWx3YXlzIG5vbi1udWxsLCBzbyBzaG91bGQgYmVjb21lIGEgcmVmZXJlbmNlLgotICAgIGlmICgh
YW5jZXN0b3JMYXllcikKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXpl
KGxheWVyLnZpc2libGVTaXplKCkpKTsKKyAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpIHsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpKQor
ICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKHNjcm9sbGFibGVM
YXllci0+dmlzaWJsZVNpemUoKSkpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAg
IH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJv
eD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00NTg4LDExICs0NTkzLDE0IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xp
cExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisKICAgICAgICAgYXV0byYgYmFja2luZyA9ICps
YXllci5iYWNraW5nKCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVMYXll
cnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAogICAgICAgICAgICAgYmFja2lu
Zy5zY3JvbGxDb250YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXllcigp
LAogICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAgIGxh
eWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXllci5sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBzY3JvbGxhYmxl
TGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0ciwKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+bGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIDogbnVsbHB0ciB9KTsKICAgICB9CiB9CiAKQEAgLTQ2MzAsOCArNDYzOCwxMCBA
QCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdO
b2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQogICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGlu
Z05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1cGRhdGVTY3JvbGxpbmdOb2Rl
TGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29yZGluYXRvcik7CiAKLSAgICAg
ICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkg
JiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGxh
eWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6Okxh
eWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkgeworICAgICAgICAgICAgQVNT
RVJUKGxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQs
ICpsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1
cm4gbmV3Tm9kZUlEOwpAQCAtNDc2NywyMCArNDc3NywyMSBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2RlcygpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvIHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKKyAgICBh
dXRvIHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKSB7CiAgICAgICAgIGlmICgm
bGF5ZXIucmVuZGVyZXIoKSA9PSAmcmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm4gbGF5ZXIu
Ym94U2Nyb2xsaW5nU2NvcGUoKTsKICAgICAgICAgcmV0dXJuIGxheWVyLmNvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUoKTsKICAgICB9OwogCi0gICAgYXV0byByb290U2Nyb2xsaW5nU2NvcGUgPSBtX3Jl
bmRlclZpZXcubGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VSVCht
X3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIGF1dG8gcm9vdFNjcm9sbGluZ1Nj
b3BlID0gbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5jb250ZW50c1Njcm9sbGluZ1Nj
b3BlKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogKnNsb3dSZXBhaW50T2JqZWN0cykg
ewogICAgICAgICBhdXRvIGxheWVyID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAg
ICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVM
YXllcigpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBzY3JvbGxpbmdT
Y29wZSA9IHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIsICpsYXllcik7CisgICAgICAg
IGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGluZ1Njb3BlKHJlbmRlcmVyLCAq
bGF5ZXItPnNjcm9sbGFibGVMYXllcigpKTsKICAgICAgICAgaWYgKHNjcm9sbGluZ1Njb3BlICE9
IHJvb3RTY3JvbGxpbmdTY29wZSkgewogICAgICAgICAgICAgYXV0byBlbmNsb3NpbmdTY3JvbGxp
bmdOb2RlSUQgPSBhc3luY1Njcm9sbGFibGVDb250YWluZXJOb2RlSUQocmVuZGVyZXIpOwogICAg
ICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ1Njcm9sbGluZ05vZGVJRCk7CkBAIC00ODA0LDcgKzQ4
MTUsNyBAQCBTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxl
QXJlYUZvclNjcm9sbGluZ05vZGVJRChTY3JvbGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9yZW5k
ZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbGluZ05vZGVJRCgpKQogICAgICAgICByZXR1cm4gJm1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAotICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xh
eWVyTWFwLmdldChub2RlSUQpLmdldCgpOworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xh
eWVyTWFwLmdldChub2RlSUQpLmdldCgpLT5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KIAogdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDdh
ODViMjY5NmM2OGFhNDBkNDI4MWYzYmMyMmM2YmNkNmI4ODAwNWEuLmJmZjIxOWM0Yjc5MTExNjdi
NmM3NWExY2YwYTg2NTg4ZTE5YjY4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclVwZGF0ZXIuaCIK
ICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAy
YzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRhYWY0YTA4MTUxYThjYjFkLi4zODYxM2IyMmE1MjRhNjRj
YmIwNDIxMjU1YjMwNmIwMzJjOGVkZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC05NSwxMSArOTUsMTcgQEAgdm9p
ZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpkZXN0cm95TGF5ZXIoKQogdm9pZCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcigpCiB7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAg
ICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllcj4oKnRoaXMpOworICAgIC8vIEZJWE1F
OiBIb29rIGluIG9wdGltaXphdGlvbiB0byBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFi
bGUsIGlmIG5lY2Vzc2FyeS4KKyAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNj
cm9sbGFibGU+KCp0aGlzKTsKICAgICBzZXRIYXNMYXllcih0cnVlKTsKICAgICBtX2xheWVyLT5p
bnNlcnRPbmx5VGhpc0xheWVyKFJlbmRlckxheWVyOjpMYXllckNoYW5nZVRpbWluZzo6U3R5bGVD
aGFuZ2UpOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBtX2xh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBt
X2xheWVyICYmIG1fbGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2Fk
Y2E2ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLjY5MGNhZjIzNmZhZDAxODlmMGZjYzBj
OWM2NjdhYzA0YTYxMWJjZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExheW91dFJlY3RzIHsKICAgICBM
YXlvdXRSZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBpcyBjbGlwcGVkIGJ5IGVuY2xv
c2luZyBvYmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpAQCAtNDYsNiArNDcsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAgICAgUmVu
ZGVyTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQorICAgIFJl
bmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCkgY29uc3Q7CiAKICAgICB2b2lk
IHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdT
dHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJj
NjFkYmY3N2Q3YzhkZjNmNDhiMTk3N2FkYTBjYzU0OTJhOGU5MWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcApAQCAt
MCwwICsxLDIwMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWRvYmUuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBO
ZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqCisgKiBPdGhlciBjb250cmli
dXRvcnM6CisgKiAgIFJvYmVydCBPJ0NhbGxhaGFuIDxyb2MrQGNzLmNtdS5lZHU+CisgKiAgIERh
dmlkIEJhcm9uIDxkYmFyb25AZmFzLmhhcnZhcmQuZWR1PgorICogICBDaHJpc3RpYW4gQmllc2lu
Z2VyIDxjYmllc2luZ2VyQHdlYi5kZT4KKyAqICAgUmFuZGFsbCBKZXN1cCA8cmplc3VwQHdnYXRl
LmNvbT4KKyAqICAgUm9sYW5kIE1haW56IDxyb2xhbmQubWFpbnpAaW5mb3JtYXRpay5tZWQudW5p
LWdpZXNzZW4uZGU+CisgKiAgIEpvc2ggU29yZWYgPHRpbWVsZXNzQG1hYy5jb20+CisgKiAgIEJv
cmlzIFpiYXJza3kgPGJ6YmFyc2t5QG1pdC5lZHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBB
bHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVy
IHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1Q
TCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZv
dW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BM
IiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFy
ZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhl
IHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBH
UEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVs
ZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGlj
ZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BM
LCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlz
aW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFNjcm9sbGluZ1Njb3BlIG5leHRTY3JvbGxp
bmdTY29wZSgpCit7CisgICAgc3RhdGljIFNjcm9sbGluZ1Njb3BlIGN1cnJlbnRTY29wZSA9IDA7
CisgICAgcmV0dXJuICsrY3VycmVudFNjb3BlOworfQorCitERUZJTkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK1JlbmRlckxheWVyU2Ny
b2xsYWJsZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKKyAgICA6IFJlbmRlckxheWVyKHJlbmRlcmVyTGF5ZXJN
b2RlbE9iamVjdCwgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZSkKKyAgICAsIG1f
aW5SZXNpemVNb2RlKGZhbHNlKQorICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkK
KyAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQorICAgICwgbV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEoZmFsc2UpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUo
SU9TX1RPVUNIX0VWRU5UUykKKyAgICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9u
UmVjb25jaWxpYXRpb24oZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyhmYWxzZSkKKyAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCit7Cisg
ICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOwor
CisgICAgaWYgKGlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgIG1fYm94U2Nyb2xsaW5nU2Nv
cGUgPSBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKKwor
ICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKKyAgICAg
ICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90
aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KKyAgICAgICAgbV9zY3JvbGxQb3Np
dGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOworICAgICAgICBpZiAo
IW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigp
LnNldEN1cnJlbnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgZWxlbWVudC0+
c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworICAgIH0KK30KKworUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKCkKK3sKKyAgICBpZiAo
aW5SZXNpemVNb2RlKCkpCisgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5yZXNpemVMYXllckRlc3Ryb3llZCgpOworCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQor
ICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5z
ZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisKKyAgICBkZXN0
cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxiYXIo
VmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOworCisg
ICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICBjbGVhclJlc2l6ZXIoKTsKK30KKworSW50U2l6
ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOworCisgICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdp
ZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKK30KKworSW50U2l6ZSBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworfQorCitJbnRTaXplIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAor
eworICAgIEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAg
ICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVu
dHNTaXplLnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6
ZSgpLndpZHRoKCkpKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSkKKyAgICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUu
aGVpZ2h0KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50
c1NpemU7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFdpZHRoKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQocmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlz
KS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
dXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgor
ICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKK30KKworaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVuZGVyQm94KCkp
OworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3
aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0
KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lu
bmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdz
LgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9j
b250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVj
ZXIgPSAxMjsKKworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVl
ZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERl
bHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxk
b3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEg
PCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWRE
ZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisK
KyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFk
anVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIElu
dFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxE
ZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKK3sKKyAgICBJ
bnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50
SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKyAgICAKKyAgICAvLyBXZSBuZWVk
IHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUg
d2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9u
IGlzIGluY29oZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9u
OworICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtub3duTW91
c2VQb3NpdGlvbi55KCkgPCAwKQorICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcHJl
dmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgcHJldmlvdXNNb3VzZVBvc2l0
aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKKworICAgIEludFNpemUgZGVsdGEgPSBsYXN0
S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisKKyAgICBpZiAoYWJzKGRlbHRhLndp
ZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVy
IHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAgICAgIGRlbHRhLnNldFdpZHRoKDAp
OworICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xs
UmFkaXVzKQorICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7CisKKyAgICBzY3JvbGxCeVJlY3Vy
c2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKK30KKworLy8gRklYTUU6IHVuaWZ5
IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEs
IFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBm
YWxzZTsKKyAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5
TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNO
b25lKCk7CisKKyAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJp
Y3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOworICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3Jv
bGxPZmZzZXQpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9s
bGVkQXJlYSA9IHRoaXM7CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUg
c2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Cisg
ICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0g
c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVy
bygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgorICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCisgICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwg
c2Nyb2xsZWRBcmVhKTsKKworICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVy
ZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKKyAg
ICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEg
ZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KKyAgICAgICAgcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRB
cmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hv
bGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVt
ZW50PyAKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MjM3CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xs
VHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8
PCAqc3RhdGljX2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKSA8PCAiIHJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1cm4g
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywg
cG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0
dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworCisgICAgU2Nyb2xsT2Zm
c2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xh
bXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7Cisg
ICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9s
bFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIGlm
ICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChj
bGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQorICAgICAgICBzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcp
OworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJ
bkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5
cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxU
eXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3Jv
bGxUeXBlKTsKKworICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBv
ZmZzZXQ7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJl
aGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlz
LT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5
cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQ
b3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgc2V0U2Nyb2xs
UG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbi54KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBl
LCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBh
bmltYXRlZCkKK3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKKyAg
ICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlv
bihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyAgICBlbHNlCisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5
cGUsIGNsYW1waW5nKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCit7
CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZSogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJp
ZXMpIGNvbnN0Cit7CisgICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyKSB7CisgICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVy
LnJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CisgICAgfTsKKworICAgIGlmIChpbmNs
dWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRT
Y3JvbGxhYmxlKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKj4odGhpcyk7CisgICAgCisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXll
cjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihj
cm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKm5leHRMYXllcikpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXh0TGF5ZXItPnNjcm9sbGFi
bGVMYXllcigpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXItPnNjcm9sbGFibGVMYXll
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxh
YmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWls
YWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOworCisgICAgaWYgKHJlYXNvbiA9PSBBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgeworICAgICAgICBpZiAo
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsK
KyAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYg
KCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3co
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3co
KSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAorewor
ICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNP
dmVyZmxvd1koKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJh
ciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Ny
b2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIo
KS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQo
KSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAg
ICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0
aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJveVNjcm9sbGJhcihI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAg
IFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFz
dGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0
aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdv
LiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAg
aWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92
QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIp
Cit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9
IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQorICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3Zl
cmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9s
bGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9s
bEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGlj
aXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ry
b3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIg
dG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIn
cyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgp
OworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQg
PSByZW5kZXJlci5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAo
c2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAmcmVuZGVyZXI7Cit9CisKK1JlZjxTY3JvbGxiYXI+IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAgICBBU1NF
UlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIGFjdHVhbFJl
bmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGJvb2wgaGFz
Q3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBk
b3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KFBzZXVkb0lkOjpTY3JvbGxiYXIpOworICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkK
KyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIo
KnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5l
bGVtZW50KCkpOworICAgIGVsc2UgeworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0
ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXpl
OjpSZWd1bGFyKTsKKyAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50
YXRpb24pOworICAgICAgICBpZiAocGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisg
ICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdl
KCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOworICAgIH0KKyAgICByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVh
c2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxT
Y3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gbV9oQmFyIDogbV92QmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgd2ls
bFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKworICAgIHNj
cm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Cit9
CisKK3N0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCit7CisgICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHls
ZSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0
eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVy
biBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQorCitTY3Jv
bGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJl
YSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6Ok5vKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKworICAgIHJl
dHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICByZXR1
cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRM
YXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgaWYgKG5leHRMYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkgJiYgbmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlRGFya0FwcGVh
cmFuY2UoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNl
KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1
cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNs
b3NpbmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+
cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhp
cywgKmRvd25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gt
PnN0eWxlKCkpOworfQorI2VuZGlmCisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZv
cm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0
ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2Vi
S2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hF
dmVudCh0b3VjaEV2ZW50KTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
K3ZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxh
eWVyOjpkaWRFbmRTY3JvbGwoKQoreworICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRF
bmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3Jv
bGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNp
bmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgcGFnZSgpLmNo
cm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Cit9CisjZW5k
aWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSBjb25zdAoreworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZp
c2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJlcigpLnNl
dHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
IGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2Jq
ZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NS
T0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkg
JiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVu
ZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7
CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbnQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdkJhcgorICAgICAgICB8fCAh
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAh
bV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKK30KKworaW50IFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAgICAgICAg
fHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX2hCYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUg
fHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHls
ZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QK
K3sKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxvd0NvbnRy
b2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7
CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
KworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgaWYgKHJlbmRlcmVyKCkuc3R5
bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3RzLnJlc2l6
ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBh
bmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFyICYmIG1f
dkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVj
dHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3Vs
ZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhvcml6b250
YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5z
ZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVy
KCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIHJldHVybiBsb2NhbFBvaW50
IC0gcmVzaXplQ29ybmVyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRP
dmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8g
b3ZlcmZsb3cuCisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFz
cyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CisgICAgLy8g
b24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5n
IHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5k
IHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3Zlcmxh
eSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBj
YXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCisgICAg
Ly8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwg
Y2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAorICAgIC8vIHNlY29uZCBwYXNzIGRvZXNuJ3Qg
bmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisgICAgaWYg
KGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7Cisg
ICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0OworCisg
ICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYgdGhl
IHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFyICYmIGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJlY3QgbG9j
YWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3ZlQnko
LXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVj
dChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVuZGVy
TGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKKyAgICAg
ICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJl
cigpLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyLT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lk
IHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KKyAgICBpZiAocGFpbnRpbmdP
dmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAg
ICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCisgICAgICAgIGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBNb3ZlIHRoZSBz
Y3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuIFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6
ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKKyAgICAvLyB3aWRnZXRzIGNh
biBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNj
cm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAvLyBjb250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVs
ZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVk
UGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJh
cnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KKyAgICBpZiAobV9oQmFyICYm
ICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV9oQmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBpZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7
CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBz
Y3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKKyAgICAvLyBl
ZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQ
YWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisgICAgCisgICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIg
bGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCisgICAgcGFp
bnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVj
dCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIWFic1JlY3Qu
aW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRl
eHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsQ29y
bmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENv
cm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBw
YWludE9mZnNldCwgYWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxi
YXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8gdG8gc2VlIHdoYXQgaXMgYmVoaW5kIGl0LgorICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6
Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKKworICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNp
emVyOworICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFy
ZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAobV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsK
KworICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgorICAgIC8vIENsaXBwaW5nIHdp
bGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgorICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAg
ICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOworICAgICAgICBMYXlvdXRSZWN0IGxh
cmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OworICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6
ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhl
aWdodCgpICsgMV9sdSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMS4wZik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKKyAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJn
ZXJDb3JuZXIpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNv
ZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7CisgICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFs
U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBjb21wdXRlU2Nyb2xsRGltZW5z
aW9ucygpOworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5z
dXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGlj
IHN0eWxlIGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlm
ICghYm94LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSkgewor
ICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xs
IHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAorICAgICAgICAvLyB0byBwdWxsIG91ciBz
Y3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWlu
KS4KKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9s
bE9mZnNldChzY3JvbGxPZmZzZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91
bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCisgICAg
ICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0
IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UK
KyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMg
Ym91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgor
ICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisjZW5kaWYK
KyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAg
ICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZyhmYWxzZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQoKTsKKworICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkK
KyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9m
ZnNldCgpKSk7CisKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHND
b21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdD
b25maWd1cmF0aW9uVXBkYXRlKCk7CisgICAgfQorCisgICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSkKKyAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUo
KTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplKCkgY29uc3QKK3sKKyAg
ICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNlIHRoZXkgbmV2
ZXIgaGF2ZQorICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5IGRvICJpbXBs
aWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbworICAgIC8vIHdlIHdhbnQgdG8gYWxsb3cg
cmVzaXppbmcgdGhlbSBhbHNvLgorICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0Ns
aXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUo
KS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNp
emUmIG9sZE9mZnNldCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcG9zc2libGUg
b24gZ2VuZXJhdGVkIGNvbnRlbnQgYnV0IGlzIG5vdCByaWdodCBub3cuCisgICAgaWYgKCFpblJl
c2l6ZU1vZGUoKSB8fCAhY2FuUmVzaXplKCkgfHwgIXJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSByZW5kZXJl
ci0+ZWxlbWVudCgpLT5yZW5kZXJlcigpICE9IHJlbmRlcmVyIGlzIHdpdGggY29udGludWF0aW9u
cy4gRG8gdGhleSBtYXR0ZXIgaGVyZT8KKyAgICAvLyBJZiB0aGV5IGRvIGl0IHdvdWxkIHN0aWxs
IGJlIGJldHRlciB0byBkZWFsIHdpdGggdGhlbSBleHBsaWNpdGx5LgorICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGRvd25j
YXN0PFJlbmRlckJveD4oZWxlbWVudC0+cmVuZGVyZXIoKSk7CisKKyAgICBEb2N1bWVudCYgZG9j
dW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCkubW91c2VQcmVzc2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZs
b2F0IHpvb21GYWN0b3IgPSByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisKKyAg
ICBhdXRvIGFic29sdXRlUG9pbnQgPSBkb2N1bWVudC52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
ZXZ0LnBvc2l0aW9uKCkpOworICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChh
YnNvbHV0ZVRvQ29udGVudHMoYWJzb2x1dGVQb2ludCkpOworCisgICAgTGF5b3V0U2l6ZSBuZXdP
ZmZzZXQgPSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOworICAgIG5ld09mZnNl
dC5zZXRXaWR0aChuZXdPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IpOworICAgIG5ld09mZnNl
dC5zZXRIZWlnaHQobmV3T2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgCisgICAg
TGF5b3V0U2l6ZSBjdXJyZW50U2l6ZSA9IExheW91dFNpemUocmVuZGVyZXItPndpZHRoKCkgLyB6
b29tRmFjdG9yLCByZW5kZXJlci0+aGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKKyAgICBMYXlvdXRT
aXplIG1pbmltdW1TaXplID0gZWxlbWVudC0+bWluaW11bVNpemVGb3JSZXNpemluZygpLnNocnVu
a1RvKGN1cnJlbnRTaXplKTsKKyAgICBlbGVtZW50LT5zZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5n
KG1pbmltdW1TaXplKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGFkanVzdGVkT2xkT2Zmc2V0ID0g
TGF5b3V0U2l6ZShvbGRPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IsIG9sZE9mZnNldC5oZWln
aHQoKSAvIHpvb21GYWN0b3IpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQu
d2lkdGgoKSk7CisgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9s
ZE9mZnNldC53aWR0aCgpKTsKKyAgICB9CisgICAgCisgICAgTGF5b3V0U2l6ZSBkaWZmZXJlbmNl
ID0gKGN1cnJlbnRTaXplICsgbmV3T2Zmc2V0IC0gYWRqdXN0ZWRPbGRPZmZzZXQpLmV4cGFuZGVk
VG8obWluaW11bVNpemUpIC0gY3VycmVudFNpemU7CisKKyAgICBTdHlsZWRFbGVtZW50KiBzdHls
ZWRFbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oZWxlbWVudCk7CisgICAgYm9vbCBp
c0JveFNpemluZ0JvcmRlciA9IHJlbmRlcmVyLT5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNp
emluZzo6Qm9yZGVyQm94OworCisgICAgUmVzaXplIHJlc2l6ZSA9IHJlbmRlcmVyLT5zdHlsZSgp
LnJlc2l6ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpWZXJ0aWNhbCAmJiBkaWZmZXJl
bmNlLndpZHRoKCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpl
bGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhl
IHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCByZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9v
bUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIHJlbmRlcmVy
LT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAg
ICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAt
IChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRlckFu
ZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21G
YWN0b3I7CisgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkp
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICB9CisKKyAgICBpZiAocmVzaXplICE9IFJlc2l6
ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7CisgICAgICAgIGlmIChpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ug
aW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAgICAgICBzdHlsZWRF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5k
ZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAg
ICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENT
U1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQgYmFzZUhl
aWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiBy
ZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAgICAgICBiYXNl
SGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7CisgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFz
ZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAg
ICB9CisKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKworICAgIC8vIEZJWE1FIChSYWRh
ciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vz
c2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZs
b3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5z
Zm9ybXMpOworICAgIGlmICh0aGlzICE9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpCisgICAg
ICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIp
OworCisgICAgLy8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9y
cyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2Vl
blZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJm
bG93Q2xpcCBmbGFncz8KKyAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9t
ZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKQoreworICAgIEFT
U0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpOworCisgICAgTE9HKFNjcm9s
bGluZywgIlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsIik7CisKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VU
cmFuc2Zvcm1zKTsKKyAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRy
eU1hcCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphZGRCbG9ja1NlbGVjdGlv
bkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQoreworICAgIG1fYmxvY2tTZWxl
Y3Rpb25HYXBzQm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoUmVuZGVy
TGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkK
KyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3Vu
ZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcyhjaGlsZCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKQoreworICAgIG1fYmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgpOworICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHModGhpcyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5
UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9y
IChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gY2hpbGQtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhjaGlsZCk7CisgICAgfQor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fw
cygpCit7CisgICAgcmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKHRoaXMpOwor
ICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIExheW91dFJlY3QgcmVjdCA9IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRz
OworICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKKyAgICBpZiAocmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAg
ICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5vdmVyZmxv
d0NsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90
IGFjY291bnRlZCBmb3IuCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQorICAgICAgICBy
ZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KExh
eW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBm
b3IuCisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50
UmVjdGFuZ2xlKHJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRP
dmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCit7CisgICAgaWYgKCFtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5ZXJQYWludGlu
Z0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBh
aW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7CisgICAgcGFpbnRM
YXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJs
YXlTY3JvbGxiYXJzKTsKKworICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0g
ZmFsc2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYWNraW5nID8g
bV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Cit9CisK
K0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6
IG51bGxwdHI7Cit9CisKKy8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUg
bWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBpc0NvbXBvc2l0ZWQoKSAmJiBiYWNraW5n
KCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKKy8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFs
aWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcG9zaXRvcigpLnVz
ZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7
Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRlYnVnRGVzY3JpcHRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpOworfQor
CitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxv
dyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBz
dHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dT
Y3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHls
ZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0g
T3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0
YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3Zl
cmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAh
c3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93
ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFu
Z2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIE92ZXJmbG93IGFyZSBh
IGJveCBjb25jZXB0LgorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYg
KCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0
aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAg
ICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93
WCgpOworICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsK
KworICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdh
cyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBi
b3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0
eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3Jv
bGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRh
bFNjcm9sbGJhcikpOworICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5l
c0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwg
c3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7
CisgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIp
OworICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOwor
CisgICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJl
IGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCisgICAgLy8gV2hlbiBzd2l0Y2hp
bmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAx
MTk4NSkuCisgICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xk
U3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3Zl
cmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0
cnVlKTsKKworICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRT
dHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVy
Zmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRy
dWUpOworCisgICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgdXBkYXRl
U2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgLy8gTGlzdCBib3gg
cGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3Ro
aW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQ
YXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9
IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wgaGFzVmVydGljYWxPdmVy
ZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAgIC8vIElmIG92ZXJmbG93
IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlz
YWJsZS4KKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIo
KS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFi
bGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVp
cmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKQorICAg
ICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAvLyBT
Y3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlm
IHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQuCisgICAgYm9vbCBhdXRvSG9yaXpvbnRh
bFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0Jl
aGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3Zl
cmZsb3cpOworICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFz
VmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICBpZiAoYXV0b0hvcml6b250YWxT
Y3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsKKyAgICAg
ICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAg
ICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93
KTsKKyAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9y
KCkpCisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJm
bG93KTsKKworICAgICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgICAgIHJl
bmRlcmVyKCkucmVwYWludCgpOworCisgICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkub3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93
WSgpID09IE92ZXJmbG93OjpBdXRvKSB7CisgICAgICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1Jl
bGF5b3V0KSB7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5n
ZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJD
aGFuZ2VkKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkubGF5
b3V0KCk7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBw
YXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOworICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVu
dC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVyKCkuaXNCb3goKSkKKyAgICAgICAgICAgIGRv
d25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5TaXplRm9y
Q2hpbGQoKnJlbmRlckJveCgpKTsKKyAgICB9CisKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChh
bmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBpbnQg
Y2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgIGlu
dCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgpOworICAgICAgICBt
X2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXAp
OworICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6
ZS53aWR0aCgpKTsKKyAgICB9CisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBpbnQgY2xpZW50
SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAgaW50IHBh
Z2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOworICAgICAgICBtX3ZC
YXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwor
ICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbFNpemUu
aGVpZ2h0KCkpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsKFJlbmRlckxheWVyKiBsYXllciwgUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5
TWFwLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpVcGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQg
PSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gY2hpbGQtPnNjcm9sbGFi
bGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKGdlb21ldHJ5TWFwLCBmbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChjaGlsZCwg
Z2VvbWV0cnlNYXAsIGZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBn
ZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFn
PiBmbGFncykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLCBidXQg
dGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCisgICAgLy8gdGhlc2UgZmxhZ3MgYXJl
IHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMgdmFsaWQuCisg
ICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CisKKyAgICAvLyBJZiB3ZSBoYXZl
IG5vIHZpc2libGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50cywgdGhlcmUgaXMg
bm8gcG9pbnQgcmVjb21wdXRpbmcKKyAgICAvLyBvdXIgcmVjdGFuZ2xlcyBhcyB0aGV5IHdpbGwg
YmUgZW1wdHkuIElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBleHBlY3RlZCB0bwor
ICAgIC8vIHJlY29tcHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCisgICAgaWYgKCFtX2hh
c1Zpc2libGVEZXNjZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVyUG9zaXRpb24oKTsK
KyAgICBpZiAocG9zaXRpb25DaGFuZ2VkKQorICAgICAgICBmbGFncy5hZGQoSGFzQ2hhbmdlZEFu
Y2VzdG9yKTsKKworICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0NoYW5nZWRBbmNlc3Rv
ciwgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVyZmxvd1Njcm9sbCB9
KSkKKyAgICAgICAgY2xlYXJDbGlwUmVjdHMoKTsKKworICAgIGlmIChyZW5kZXJlcigpLnN0eWxl
KCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCisgICAgICAgIGZsYWdzLmFkZChI
YXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKKworICAgIGlmIChyZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBmbGFncy5hZGQoSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCk7CisgICAgCisgICAgYm9vbCBzaG91bGRDb21wdXRlUmVwYWludFJlY3Rz
ID0gKGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpIHx8
IGZsYWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOworICAgIGJvb2wgaXNW
aXN1YWxseUVtcHR5ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOworICAgIGJvb2wgc2hvdWxkUHVz
aEFuZFBvcE1hcHBpbmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21wdXRlUmVwYWludFJl
Y3RzICYmICFpc1Zpc3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7CisgICAgaWYgKHNob3Vs
ZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1Rv
QW5jZXN0b3IodGhpcywgcGFyZW50KCkpOworCisgICAgaWYgKHNob3VsZENvbXB1dGVSZXBhaW50
UmVjdHMpIHsKKyAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0IGNvbXB1dGUgcmVw
YWludCByZWN0cyBmb3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KKyAgICAgICAgaWYgKGlz
VmlzdWFsbHlFbXB0eSkKKyAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3RzKCk7CisgICAgICAg
IGVsc2UgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNvbnRhaW5lciBhcyB3
ZSB3YWxrIGRvd24gdGhlIHRyZWUuCisgICAgICAgICAgICBjb21wdXRlUmVwYWludFJlY3RzKHJl
bmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7CisgICAgfSBlbHNl
IGlmICghcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1XaWRnZXQoKSkgewor
ICAgICAgICAvLyBXaGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNvbnRlbnRzIGZsYWcg
ZmxpcHMgZHVlIHRvIGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFpbnQgYXJlYSB0cmFu
c2l0aW9ucyBmcm9tCisgICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3ZlcmZsb3cuIFdoZW4g
dGhpcyBoYXBwZW5zIHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUgaW52YWxpZCBhbmQg
dGhleSBuZWVkIHRvIGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2IvMTg4MTIxKS4KKyAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3JyZWN0LgorICAgICAg
ICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIo
KS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRlcmVyKCkuY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCkp
KTsKKyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8
IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94ID09IHJlbmRlcmVy
KCkub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50
KCkpKTsKKyAgICB9CisKKyAgICByZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGwodGhpcywgZ2VvbWV0cnlNYXAsIGZsYWdzKTsgICAgCisKKyAgICAvLyBXZSBkb24ndCB1
cGRhdGUgb3VyIHJlZmxlY3Rpb24gYXMgc2Nyb2xsaW5nIGlzIGEgdHJhbnNsYXRpb24gd2hpY2gg
ZG9lcyBub3QgY2hhbmdlIHRoZSBzaXplKCkKKyAgICAvLyBvZiBhbiBvYmplY3QsIHRodXMgUmVu
ZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJlcGFpbnQgaXRzZWxmIHByb3Blcmx5IGFzIHRoZSBsYXll
ciBwb3NpdGlvbiB3YXMKKyAgICAvLyB1cGRhdGVkIGFib3ZlLgorCisgICAgaWYgKG1fbWFycXVl
ZSkgeworICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbjsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRy
dWU7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAgICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsK
KyAgICB9CisKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQorICAgICAgICBnZW9t
ZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKKworICAgIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuaW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpOwor
fQorCitTY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGFtcFNjcm9sbE9mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xs
T2Zmc2V0KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRPdmVyZmxv
d0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50
cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9j
YWxQYWludGluZ0luZm8pCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVy
RnJhZ21lbnRzKSB7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgICAg
IHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQ
b2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24o
KSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCisgICAgICAgICAgICBzbmFw
cGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKKyAgICAg
ICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNI
b3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRl
ckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6
Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChy
ZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJ
IHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisjZW5k
aWYKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFn
bWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAoreworICAgIGlmIChsYXllckZyYWdtZW50cy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9
IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94
UmVjdCgpKTsKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAg
ICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50
Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAgICBpZiAoc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgICAgICBJbnRT
aXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigp
IC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRS
ZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21M
ZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNp
emUoKSB9OworICAgICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0
ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4
WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCBy
ZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IGxheWVyRnJh
Z21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IExheWVyRnJh
Z21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGF1dG8gcmVz
aXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJlY3Qo
ZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAgICAgaWYgKGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVy
UmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkg
eworICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9j
YXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94
KTsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7CisKKyAgICBtX3Njcm9s
bFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQo
KSkpOworICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRv
bSgpIC0gb3ZlcmZsb3dUb3AoKSkpOworCisgICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cg
PSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOworICAgIGlm
IChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgIHNj
cm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOworICAgIGlu
dCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gt
PmJvcmRlclRvcCgpKTsKKyAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVM
ZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKKyAgICAKKyAgICBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQorewor
ICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Cisg
ICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7
CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBzY3JvbGxSZWN0ID0g
cmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OworICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJl
IGlzIG5vIG5lZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKwor
ICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xsUmVjdC5t
b3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxzZQorICAg
ICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9u
KCkpOworCisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7CisgICAgcmVu
ZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7CisgICAgcmVuZGVyZXIo
KS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkg
eworICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBtX3Njcm9s
bENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKKyAgICBpZiAobV9yZXNpemVyKQorICAg
ICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS5m
b2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVuZGVy
ZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7
Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxDb3JuZXJSZWN0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVy
OworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJh
clJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKworICAg
IHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0
Cit7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3Qp
OworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVy
biByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29u
c3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50
ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xs
YmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRG
cm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Cit9CisKK0lu
dFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFy
ZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVy
ZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3Jv
bGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCit7CisgICAg
c2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOworfQorCitTY3JvbGxp
bmdOb2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAor
eworICAgIGlmICghaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25S
b2xlOjpTY3JvbGxpbmcpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmlz
aWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxi
YXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0
Cit7CisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKKyAgICBpZiAoc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQorICAg
ICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworICAgIAorICAgIGF1
dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9s
bFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJh
clNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9s
bGJhclNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQorICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3Jv
bGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAg
IEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9sbE9mZnNl
dCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KKyAgICBTY3JvbGxPZmZz
ZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
KCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXpl
KCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAgICBzdHJldGNoLnNldEhl
aWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLmhlaWdo
dCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJs
ZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpIC0g
KHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKKworICAgIGlmIChz
Y3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZz
ZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Nyb2xsT2Zm
c2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQorICAgICAg
ICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6ZS53aWR0
aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJldGNoOworI2Vsc2UKKyAg
ICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25J
blZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzSGFuZGxpbmdXaGVl
bEV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zKCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxhYmxl
QXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0
cnVlLCBpc0luc2lkZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omlz
VXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJ
RCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvIHNj
cm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4g
c2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byog
c2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVy
biBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpmb3JjZVVw
ZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAor
eworICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJz
T25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzTW9ja1Njcm9sbEFuaW1h
dG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2Vz
TW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjps
b2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QK
K3sKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcsICJSZW5kZXJMYXllclNjcm9sbGFibGU6
ICIgKyBtZXNzYWdlKTsKK30KKworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpCit7CisgICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVy
ZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVy
ZXIoKS5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgaWYgKCFyZW5k
ZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5y
ZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgIG1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3Jv
bGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgp
ID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBuZXdQ
b3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKKyAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0
aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KKyAgICAgICAgaWYg
KG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVu
c2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5v
dCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJl
YXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNj
cm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgICAg
ICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bv
c2l0aW9uKTsKKyAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsK
KyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkg
eworICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAgICAg
ICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAg
ICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9m
ZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAg
ICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAgIG5ld09mZnNldC5z
ZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3Np
dGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAg
IAorICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3Jv
bGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlv
bikgeworICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9s
bFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2Vz
dHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRz
IHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCisgICAgICAg
IGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgeworICAgICAgICAg
ICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgICAgICB1cGRh
dGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKworICAg
IFJlbmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKKworICAgIC8vIFVwZGF0ZSB0
aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVk
IGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgorICAgIC8vIFdlIGRvbid0
IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAg
dXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgorICAgIGlmICghdmlldy5mcmFt
ZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgeworICAgICAg
ICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUg
bGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5z
Y2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOworCisgICAgICAgIGlmICghbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9z
aXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0
aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0
aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5k
CisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIg
cG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCisgICAgICAg
ICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAgICAgICAgICAgaWYgKHVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2Vv
bWV0cnlVcGRhdGUoKTsKKworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4g
YWZmZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5
IGJlIGEgc2libGluZyBpbiB6LW9yZGVyKSwKKyAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2Vy
IGEgZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHBhaW50LW9yZGVyIHBhcmVudC4KKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBwYWludE9yZGVyUGFyZW50KCkpCisgICAg
ICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNr
aW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBh
IHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxp
ZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKKyAgICAgICAgRGVidWdQYWdlT3Zlcmxh
eXM6OmRpZExheW91dChyZW5kZXJlcigpLmZyYW1lKCkpOworICAgIH0KKworICAgIEZyYW1lJiBm
cmFtZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7CisgICAg
Ly8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5n
CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKKyAgICAK
KyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5
b3V0UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVj
dCA6IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRh
aW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0
UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCisgICAgICAg
IHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworICAgIGZyYW1lLmV2ZW50SGFu
ZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1v
dXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKKyAgICBp
ZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICBzZXROZWVkc0NvbXBvc2l0
aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBi
YWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAgIH0KKworICAg
IC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KKyAgICBpZiAo
cmVxdWlyZXNSZXBhaW50KQorICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5l
cihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CisKKyAgICAvLyBTY2hlZHVsZSB0
aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgorICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPmRvY3Vt
ZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKKworICAgIGlmIChz
Y3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3Jv
bGxPZmZzZXQoKTsKKworICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5n
ZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0Fm
dGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGlu
Z0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFu
dGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAorICAg
ICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20g
dGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0
YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKKyAgICAgICAg
ICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgICAgIGNvbXBv
c2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9u
Q29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5
IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCisgICAg
ICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRl
QmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgICAgIGNvbXBvc2l0
b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Ny
b2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGJhck9mZnNldChj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0
KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9j
YXRpb24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
KyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KQoreworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRl
cmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCisgICAgICAgIGlz
VmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIo
KS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNP
dmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9
IGZhbHNlOworICAgIAorICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBm
cmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisgICAgCisgICAgaWYgKGlz
U2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7
CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsK
KyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7CisgICAg
fQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgaWYgKGFkZGVkT3JSZW1vdmVk
KSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRv
dWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYg
d2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBh
cyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAg
IFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7CisjZW5kaWYKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXpl
JiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5S
ZXNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJCb3goKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwor
CisgICAgaWYgKG1fdkJhcikgeworICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3Zl
KG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVy
dGljYWxTY3JvbGxiYXIpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAg
IHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAg
IG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0K
KworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZy
YW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAg
ICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgUmVu
ZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJl
cigpKTsKKyAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBh
Y3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxi
YXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBp
ZiAoIWNvcm5lcikgeworICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9s
bENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCku
ZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRl
cmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29y
bmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5p
dGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRT
dHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBt
X3Njcm9sbENvcm5lciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRl
cmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byByZXNpemVy
ID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNh
Y2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5z
dHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJS
ZXNpemVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikg
eworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0
PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8g
RklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAg
ICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Jlc2l6ZXIt
PmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Jlc2l6ZXItPnNldFN0
eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFtX3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxs
cHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZHJhd1BsYXRmb3JtUmVzaXpl
ckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXpl
ckNvcm5lclJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAg
ICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAg
IHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29y
bmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3Ju
ZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAg
ICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAg
ICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQor
CisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewor
ICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXpl
ckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5l
clJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkp
OworICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRy
YXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5l
clJlc2l6ZXJTaXplKSk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhM
YXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNp
emVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdl
LCBpbWFnZVJlY3QpOworfQorCitSZW5kZXJMYXllclNjcm9sbGFibGU6Ok92ZXJmbG93Q29udHJv
bFJlY3RzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYg
cmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3Jv
bGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hS
ZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1
dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IHsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKTsKKyAgICB9OworCisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3Jv
bGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhh
dmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92
QmFyLmdldCgpKTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZl
UmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cisg
ICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFs
U2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVz
aXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVy
bGF5VmVydGljYWxTY3JvbGxiYXIpKTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBp
ZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9s
bGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6
ZSA9IEludFNpemUgeworICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAg
ICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
OiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAgT3ZlcmZs
b3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRv
IGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJS
ZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJS
ZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXpl
LndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3Jv
bGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0
byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNl
dFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAg
ICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJl
c3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3Ju
ZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29y
bmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwor
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0
b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsK
KyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0
LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJl
c2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAg
IHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBj
b3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVj
dCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKKworICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMo
bG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMudmVydGlj
YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9j
YWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVNYXJxdWVlKCkKK3sKKyAgICBpZiAo
bV9tYXJxdWVlKSB7CisgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JT
Y29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgICAgIGJvb2wg
b2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwor
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9tYXJx
dWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0KK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCkKK3sK
KyAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgp
Lm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigp
LmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21hcnF1ZWUpCisgICAgICAgICAgICBtX21hcnF1
ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOworICAgICAgICBtX21hcnF1ZWUt
PnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOworICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQorICAgICAg
ICBtX21hcnF1ZWUgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMoTGF5b3V0UG9pbnQm
IGxvY2FsUG9pbnQpCit7CisgICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZz
ZXQuCisgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CisgICAgaWYgKHJlbmRlcmVy
KCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3Np
bmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlID0gcG9zaXRpb25l
ZFBhcmVudC0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIC8vIEZvciBwb3NpdGlv
bmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9zaXRpb25lZCBsYXll
cidzIHNjcm9sbCBvZmZzZXQuCisgICAgICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudFNjcm9s
bGFibGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICAgICAgbG9j
YWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPnNjcm9s
bFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudFNjcm9sbGFi
bGUtPnJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihw
b3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgICAg
ICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBh
cmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkpLm9mZnNldEZvckluRmxvd1Bvc2l0aW9uZWRJbmxp
bmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOworICAgICAgICAgICAgICAgIGxv
Y2FsUG9pbnQgKz0gb2Zmc2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQo
cG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Cisg
ICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcG9zaXRpb25lZFBhcmVudFNjcm9sbGFi
bGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
YXV0byogcGFyZW50TGF5ZXIgPSBwYXJlbnQoKSkgeworICAgICAgICBpZiAoYXV0byogcGFyZW50
TGF5ZXJTY3JvbGxhYmxlID0gcGFyZW50TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAg
ICAgICAgICBpZiAocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVu
dExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICAgICAgICAgIEFTU0VS
VChwYXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CisgICAg
ICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5jb250
ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25z
dCBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXIgPSBwYXJlbnRMYXllci0+cGFyZW50KCk7Cisg
ICAgICAgICAgICBjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUqIGVuY2xvc2luZ0xheWVyU2Ny
b2xsYWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICB3aGlsZSAoZW5jbG9zaW5nTGF5ZXIpIHsK
KyAgICAgICAgICAgICAgICBpZiAoKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSA9IGVuY2xvc2lu
Z0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGVuY2xvc2luZ0xheWVyID0gZW5jbG9zaW5nTGF5ZXItPnBhcmVudCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXJTY3JvbGxh
YmxlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+
Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAgICAgICBtX2JveFNjcm9sbGlu
Z1Njb3BlID0gZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3Bl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9s
bGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Nj
b3BlKQorICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGlu
Z1Njb3BlKCk7CisgICAgfSBlbHNlIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1f
Y29udGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICBt
X2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBtX2JveFNjcm9sbGluZ1Njb3BlOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5bGUoKQoreworICAgIC8v
IEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNjcm9s
bGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXIt
PnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVD
aGFuZ2VkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllclNjcm9sbGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lY2FhMTVjYTg1YzE5Y2E3MjZiMjA5Zjc2ZDA0
Y2EzNTg4MTM3YTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENv
bW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAq
ICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24g
PGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVz
aW5nZXJAd2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICog
ICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5k
ZT4KKyAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNr
eSA8YnpiYXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
CisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZv
dW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0
cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBs
aWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Yg
b25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5v
dCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICog
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBj
YXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK3VzaW5nIFNjcm9sbGluZ1Njb3Bl
ID0gdWludDY0X3Q7CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZSBmaW5hbAorICAgIDog
cHVibGljIFJlbmRlckxheWVyCisgICAgLCBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Ny
b2xsYWJsZSk7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CisKKyAgICBleHBsaWNpdCBSZW5kZXJMYXll
clNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIHZpcnR1YWwgflJlbmRl
ckxheWVyU2Nyb2xsYWJsZSgpOworCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgp
IGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Cisg
ICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisg
ICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0
OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAg
IC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92
ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0
YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAgIGJvb2wg
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xs
VHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxP
ZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFt
cGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKworICAgIHZvaWQgc2Nyb2xsVG9YUG9z
aXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lk
IHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpO
byk7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1h
dGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5
IHVzZWQgYnkgbWFycXVlZS4KKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3Jv
bGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorICAgIHZvaWQg
c2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1w
aW5nOjpVbmNsYW1wZWQpOyB9CisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNs
b3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgorICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBy
ZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0
aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXMpIGNvbnN0OworCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5n
ZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29sIHNjcm9sbHNP
dmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKKyAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92
QmFyOyB9CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOworICAgIHZv
aWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAgICBSZWY8U2Nyb2xsYmFyPiBj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAgICBib29sIGhhc0hvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBi
b29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxi
YXIoKTsgfQorCisgICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29u
c3QgZmluYWw7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKKyAgICBTY3JvbGxQ
b3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9z
aXRpb247IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxh
YmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKKworICAgIGJv
b2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQor
ICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgYm9vbCBy
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlv
biA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1
aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNj
cm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBk
aWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgLy8gUmV0dXJucyB0cnVlIHdo
ZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBh
dCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9v
bCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyAgICBpbnQgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAg
IGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsK
KyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVy
KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsK
KyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBv
aW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBk
YW1hZ2VSZWN0KTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisK
KyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyID0gMSk7CisKKyAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OworICAgIHZv
aWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExheW91dFNpemUmKTsK
KyAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9
CisgICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsg
fQorCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsK
KyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisg
ICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOwor
ICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB2b2lkIHJlcGFp
bnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFy
cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxw
dHIpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nOyB9CisgICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
Ym9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIGZpbmFsIHsgbV9hZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0K
KyNlbmRpZgorCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsK
KworICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxl
ZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xs
aW5nLgorICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KKyAgICBPcHRpb25hbDxTY3JvbGxp
bmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZTsgfQorCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3Jv
dW5kKCkgY29uc3Q7CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAg
dm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJh
cnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7
IH0KKworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpOyB9CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNv
bnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyTGF5b3V0KCk7CisKKyAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFnIHsKKyAgICAgICAgSXNPdmVyZmxvd1Njcm9sbCAgICAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAwLAorICAgICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yICAgICAg
PSAxIDw8IDEsCisgICAgICAgIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgICAgICAg
ICA9IDEgPDwgMiwKKyAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yICAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCAzLAorICAgIH07CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGxGbGFnPiA9IHsgfSk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxP
ZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZs
b3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisKKyAgICBib29sIGhhc0hvcml6b250
YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
OworCisgICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKworICAgIGJvb2wg
aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OworCisg
ICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGlu
dGVyZmFjZQorICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNv
bnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0
JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2Rl
SUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJu
YWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJl
Y3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNv
bnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwor
ICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVk
ID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNz
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJm
b3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlm
CisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFs
OworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgLy8gTk9URTogVGhp
cyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0
IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3Np
dGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOyAg
CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsK
KworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisK
KyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgIHZvaWQgY2xlYXJTY3JvbGxDb3Ju
ZXIoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgIHZvaWQgY2xlYXJSZXNp
emVyKCk7CisKKyAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7CisKKyAgICBzdHJ1Y3Qg
T3ZlcmZsb3dDb250cm9sUmVjdHMgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXI7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CisgICAgICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyOworICAgICAgICBJbnRSZWN0IHJlc2l6ZXI7CisgICAgICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAhc2Nyb2xsQ29ybmVyLmlzRW1wdHkoKSA/IHNjcm9sbENvcm5lciA6IHJlc2l6ZXI7
CisgICAgICAgIH0KKyAgICB9OworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisjaWYgMAorcHJpdmF0ZToK
KyAgICBib29sIHVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFJlbmRlckxheWVyOjpVcGRh
dGVMYXllclBvc2l0aW9uc0ZsYWc+KiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0
ZUxheWVyUG9zaXRpb25zRmxhZz4pOworCisgICAgdm9pZCBwYWludEJhY2tncm91bmRGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0Nv
bnRleHQmIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVj
dCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29u
c3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKworICAgIHZvaWQg
cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhp
Y3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisg
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29s
IGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5nSW5mbyYs
IE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pOwor
ICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFJlbmRlckxh
eWVyOjpQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0
ID0gTGF5b3V0U2l6ZSgpKTsKKworICAgIGJvb2wgc2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRp
b24oR3JhcGhpY3NDb250ZXh0JiwgYm9vbCYgZGlkUXVhbnRpemVGb250cyk7CisjZW5kaWYKKwor
ICAgIHZvaWQgdXBkYXRlTWFycXVlZSgpOworICAgIHZvaWQgY3JlYXRlT3JEZWxldGVNYXJxdWVl
SWZOZWVkZWQoKTsKKyAgICB2b2lkIHN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xs
aW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhclN0eWxlKCk7CisKK3ByaXZhdGU6CisgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0
aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6
aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgorICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOworICAg
IGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJmbG93
UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
KyAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDog
MTsKKyNlbmRpZgorICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAx
OworI2VuZGlmCisKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsK
KyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworCisgICAgU2Nyb2xsUG9z
aXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91
ciBzY3JvbGxlZCBhcmVhLgorICAgIEludFNpemUgbV9zY3JvbGxTaXplOworCisgICAgLy8gRm9y
IGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAg
IFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7
CisKKyAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICBN
YXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdT
Y29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2Nv
cGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9t
YXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9s
ZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJl
bmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJT
Y3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBJbnRSZWN0IG1fYmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6UmVuZGVyTGF5ZXImIGxheWVyKSB7IHJldHVybiBsYXllci5sYXllclR5cGUoKSA9
PSBXZWJDb3JlOjpSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOyB9CitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAKaW5kZXggN2U5ZjM4MzJkMzZlZmQxOTEzY2Y3Mzk3MDExZWJiM2QyMTk0OGUyNC4u
ZTQ1NmM2YzhhNTU4MzIwNGY2M2FlZmI2OGU4YmMwMzBiNmQ3NjFiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1
ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODc5LDEwICs4
NzksOSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbgogU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxp
c3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKIHsKICAgICBhdXRvKiBsYXll
ciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8
ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGxh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogfQogCiBi
b29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQpAQCAtODky
LDcgKzg5MSwxMCBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKQogCiBib29sIFJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKQogewotICAgIHJldHVybiBlbmNsb3NpbmdMYXllcigpICYmIGVuY2xvc2lu
Z0xheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKyAgICBh
dXRvKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGxh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNl
c3RvcigpOwogfQogCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OnNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2ZTZiZmJlNDBhNjQ0MTE2NDQ1OWFhNjc4MGQ4Yi4uMWJh
NWE2MDIxZThkMjEzYWJkNDI0ZTdlZWY1MjM4NGJmNDAxOTBjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcApAQCAtNDksMTQgKzQ5LDE0IEBACiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE1hcnF1ZWVFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotUmVuZGVyTWFycXVl
ZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIpCitSZW5kZXJNYXJxdWVlOjpSZW5k
ZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxh
eWVyKQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaAppbmRleCAxYzc4ODQ5NWUw
ZTg4NTc1ZTgwYmY5MzA4YTJmNDk0ZmI0YTYyOGQ1Li4wODRhZDMzNzc0ODZkZjljZTgzMjU2NjY2
ODU0NTJjNDdiOTgyMzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVl
LmgKQEAgLTQ5LDEzICs0OSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJl
bmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiAvLyBUaGlzIGNsYXNz
IGhhbmRsZXMgdGhlIGF1dG8tc2Nyb2xsaW5nIGZvciA8bWFycXVlZT4KIGNsYXNzIFJlbmRlck1h
cnF1ZWUgZmluYWwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlck1hcnF1ZWUpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJNYXJx
dWVlKFJlbmRlckxheWVyKik7CisgICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5kZXJMYXll
clNjcm9sbGFibGUqKTsKICAgICB+UmVuZGVyTWFycXVlZSgpOwogCiAgICAgYm9vbCBpc0hvcml6
b250YWwoKSBjb25zdDsKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdGlt
ZXJGaXJlZCgpOwogCi0gICAgUmVuZGVyTGF5ZXIqIG1fbGF5ZXI7CisgICAgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKiBtX2xheWVyOwogICAgIFRpbWVyIG1fdGltZXI7CiAgICAgaW50IG1fY3VycmVu
dExvb3AgeyAwIH07CiAgICAgaW50IG1fdG90YWxMb29wcyB7IDAgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA3MTEzZjVjMzI5MDBlZDc2NGIzNmU0NDc5Yjk2
MDdmMDc3OWIxMmY4Li45NTc1NDFhNmJlODFmMWMwYzZjY2Q3Y2E0NmY1Y2JmMWMzYjZkOWRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAsNiArMTAwLDcg
QEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50LCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQmxvY2tG
bG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogcHVi
bGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBh
cyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8v
IG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApp
bmRleCA2MjYwYTgxNTc5ZjU4NGY1OGNjNDBmN2NlMDkwNzViOWIwODY1YWY4Li5lZTJhZTY2NTJh
MjIyYmJkMzg1YzhiNmQzYzg5NmQ2MmQyNGMwNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtMzMs
NyArMzMsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKQEAgLTQwMCwxNyArNDAwLDIyIEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsCiAg
ICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1l
bnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYg
KGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCwgc3Rh
cnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBF
bGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJU
ZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXll
ci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIFJlbmRl
clRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJl
bmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkp
IHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxv
dzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9w
RWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAppbmRleCBlMDU2MGQ3YTUyYTk1MjY0ZDZhM2Q1NjgyZDc5MzU2OTVjMjNmNjBjLi5j
YmM4OWNkMzgyYmNiOWEzZTJmN2IyZjM2NzViZWZmMTE5YzZiMjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00Nyw4ICs0Nyw4IEBACiAj
aW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBAIC01OTks
MTUgKzU5OSwxNiBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgdHMgPDwg
IiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlwUmVjdDsKICAgICB9CiAKLSAgICBpZiAobGF5ZXIucmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpKQotICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwot
ICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJC
b3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgoKSkKLSAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0aCgpOwotICAgICAgICBp
ZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAgICAgICAgICAgdHMgPDwg
IiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsKKyAgICBpZiAobGF5ZXIu
cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkg
eworICAgICAgICBhdXRvJiBzY3JvbGxhYmxlTGF5ZXIgPSAqbGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCk7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQorICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNl
dCgpLngoKTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS55KCkp
CisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueSgpOworICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLnNj
cm9sbFdpZHRoKCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Nyb2xs
YWJsZUxheWVyLnNjcm9sbFdpZHRoKCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAm
JiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xs
YWJsZUxheWVyLnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWln
aHQgIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsSGVpZ2h0KCk7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgICAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKTsKICAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpICYm
IGxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKaW5kZXggMTcyNDhjZGEzNGFhNmI2YTcxOTZmN2YwMDZmMjA4NWZh
OWFiNDI2Yy4uMzQ3MDZkNjZlZTAwMzM1MzAxZWEwNmQxMDI1NDIxNTc3MzY2OGViYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTI4LDggKzI4LDggQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMjksOCArMzI5LDgg
QEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmls
bFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkpOwogICAgIH0KIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJl
c2l6ZSgpKQotICAgICAgICBsYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQo
KSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7
CisgICAgaWYgKGhhc0xheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxh
eWVyKCktPmNhblJlc2l6ZSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRSZXNp
emVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0KSwgcGFpbnRJbmZvLnJlY3QpOwogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3Zlcmxh
cFRlc3RSZXN1bHQoYm9vbCBpc092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKaW5kZXggYzA1M2E0ZGRhMjAwOGVmZDdhNjY4OGQzNDQ4ZmZiZjNiZmNiZTFmNS4uODJi
OWJlNGE3MGFlOTdkODVmNmM5MWQyNDEzY2U2YmJmNzgwZTc5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMTU1LDYgKzE1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxp
c3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTkwNiw3ICsxOTA3LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhh
c1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgfQog
ICAgIAogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCkBAIC0yOTAxLDcgKzI5MDIsNyBAQCBFeGNl
cHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2Rl
KE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0Qm94PihyZW5kZXJC
b3gpKQogICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSAmZG93bmNhc3Q8UmVuZGVyTGlzdEJv
eD4ocmVuZGVyQm94KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEg
PSByZW5kZXJCb3gubGF5ZXIoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVy
Qm94LnNjcm9sbGFibGVMYXllcigpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406515</attachid>
            <date>2020-08-13 07:36:58 -0700</date>
            <delta_ts>2020-08-13 14:54:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215443-20200813163655.patch</filename>
            <type>text/plain</type>
            <size>325275</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg5YTZiNjkyYjFlNzUy
MDQ2YjBhZDI5YjY0NTM1NDM3ODAxYzVhOC4uYjUyNWI4YTk0MjMzYzlmOTBmMzhkOTEzMmU3M2U1
Mzc5ZmJiZTM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4NiBAQAorMjAyMC0wOC0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBNb3Zl
IHNjcm9sbCAvIG92ZXJmbG93IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDQzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5
ZXIgaW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBN
b3ZlIGFsbCBzY3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGlu
dG8KKyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSBy
ZWR1Y2VzIHRoZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNs
ZWFucyB1cCB0aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNy
ZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNo
ZXMgd2lsbCBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1h
bmQsIGlmCisgICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2Fy
eS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVh
ZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6
CisgICAgICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlIGNvbnN0KToKKyAgICAgICAgKiBo
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJ
bnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xv
c2luZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVW
aWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFp
bnRDb250ZW50cyk6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlv
bkNoYW5nZWRGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlQXJlYUZvckJveCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0
YTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6YXBw
bHlTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRy
b2wpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBj
b25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpz
Y3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxM
ZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsVG9wIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwV2hlZWxFdmVudE1vbml0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlVmVy
dGljYWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnBhblNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnNjcm9sbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29t
cHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNr
eVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YXV0b3Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpvdmVyZmxvd0xlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Om92ZXJmbG93UmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNs
aXBUb1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBp
eGVsUXVhbnRpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExh
eWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Om91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXll
clR5cGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3Jh
cGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWly
ZXNTY3JvbGxDb3JuZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05l
ZWREaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
cGFpbnRJbnRvTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpw
YWludENvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXND
b21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmlzU2Nyb2xsZWRCeU92ZXJmbG93U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5n
Tm9kZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2Rlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9y
U2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2Nyb2xsYWJs
ZUxheWVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRl
bnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zm
c2V0V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZz
ZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91
Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkU3RhcnRTY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRy
b2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFNjcm9sbENvcm5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXplcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblJlc2l6ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFkZEJsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxl
Y3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6cmVj
dXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWlyZXNTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRPdmVyZmxvd0Nv
bnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dDb250cm9scyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RS
ZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0
ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGlu
Z05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5k
bGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJT
Y3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVh
ZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Nj
cm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxl
QXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBvc2l0
aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclJlc2l6ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xz
UmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zm
c2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGUuaDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0
b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJNYXJxdWVlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xs
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRn
ZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0wOC0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBiYWQgbWVyZ2UgaW4gcjI2NTQ4OApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGI5OGI3YWIzZTdiODBkMWNmNzRmMmUzZThh
YmU5ZmM5OGM1NTA2MjMuLjkxMzIyMGIwYzVhMTk4OGM0ODgyZGM0MzhkM2FjOTNiMTQwZjQxOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wOC0x
MyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAg
ICBNb3ZlIHNjcm9sbCAvIG92ZXJmbG93IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDQzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVu
ZGVyTGF5ZXIgaW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAg
ICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6CisKIDIwMjAt
MDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBS
YW5nZTo6Y3JlYXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKaW5kZXggYTZjYTU0MTBjNDFhZmZlYjFiYjVlZDEwNmE2YWQxOTNiM2JhZjM3OC4uYzJm
NzNiYjJjOWRkN2UyYzcxOTljNDU1MDQxMDU0M2U4ZmI1MzE5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CkBAIC0xMzkxLDYgKzEzOTEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCiAgICAgcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuaAorICAgIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMjdlMmQ2MzZhODFiZTIy
NDkyNjg4OTJhN2NiYWNiN2Q0Y2I4MGVjYy4uN2Y5ZTQyZDE0ZWJiMTA3NmFiNDNiM2M5YzE0NjI3
NmIxZjk3OTI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMjcsNiArMjEyNyw3IEBAIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXlvdXRTdGF0ZS5j
cHAKIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ODczODJkOWI4YjE3YTY0
NjMwZDYzNzRkYWU0MzRhZDliZTgzOTYwLi5hM2Q0NmU4ZmNlYjFiMDU1OTAyZmIwNTQ1OGVjMWNk
MGQwOGQwOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zMDksNiArMzA5LDcgQEAKIAkJMEY1ODBCMEUwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xh
eWVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRjkw
RjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUx
RDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXll
ckJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjU4MENGRjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBG
MTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1
QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRC
YWNraW5nTGF5ZXIuaCAqLzsgfTsKIAkJMEY1ODBGQUYxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1h
dGlvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI3QTU1
MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAy
IC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU5MjQsNiArNTkyNSw4IEBACiAJCTBGNTgwQ0ZBMEYxMkRF
OUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyQmFja2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXll
ckJhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBDRkMwRjEyREU5
QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Ny
b2xsYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU4MENGQzBGMTNBQjlC
MDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJh
Y2tpbmdMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUaWxlZEJh
Y2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMjE0OTY5
MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlv
blV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25V
dGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzYzLDYgKzI4NzY2
LDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJz
LmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1ODBDRkMwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8sCisJCQkJMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8q
IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5
OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2
OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8sCiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNE
RDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAqLywKQEAgLTMzMTE2LDYgKzMzMTIxLDcgQEAK
IAkJCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjU4MENGRDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYg
LyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1ODBDRkYw
RjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJv
eExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXgg
M2M0NGVjODk4NGI2N2Y2Y2E5OGI3MDk3ZjQ3YzYwMjZkODU2NTQxNy4uYTJlZGJhNGE5NjQ4MzIx
YzhkZGYxYTc3MjEwNjc0NWY3MTNiYzExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC03OSw3
ICs3OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RJdGVtLmgiCkBAIC0zOTE2LDcgKzM5MTYsOCBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25z
dAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICBBU1NF
UlQoYm94LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXll
cigpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0
IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MjksNyArMzkzMCw4IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3JvbGxPZmZz
ZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJveC5sYXll
cigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNTRVJUKGJveC5zY3JvbGxhYmxlTGF5
ZXIoKSk7CisgICAgYm94LnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7
CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDg4MDJl
ZDA0ZWEzMzMwZTk1N2RiYTAxYzE3MTYyNDQ1MWVjNDQ0Y2QuLjg4MDRhMTZiZWMxNGNkMDJmMDdh
ZWZhNjliZjliMTIwNmQyNmQzMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5LDkgKzg5
LDkgQEAKICNpbmNsdWRlICJQc2V1ZG9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1
ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgpAQCAtMTMwOCw4ICsxMzA4LDgg
QEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQg
Y2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCku
ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VT
bW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3Jv
bGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9s
bExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVh
ID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Ny
b2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwog
ICAgIH0KIH0KIApAQCAtMTMzMiw4ICsxMzMyLDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxU
b3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNsYW1wZWRUb3AgPSBjbGFtcFRvSW50ZWdlcihu
ZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmlt
YXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6
QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwog
ICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNsYW1wZWRUb3AsIFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAg
ICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJs
ZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENs
ZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2NGUyZTRlMmIwZmIxMTNmMDNhMWJk
M2E3M2MyNzEyNzUuLjA0OGYwNTBmODFhODYxYzE0NDcxMDQ5Y2Q2MjU1M2RhMDBlOTgxMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TWFycXVlZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTE3NSw3
ICsxNzUsOCBAQCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUoKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVs
T2JqZWN0KCktPmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBBU1NFUlQocmVuZGVyQm94TW9kZWxP
YmplY3QoKS0+c2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9i
amVjdCgpLT5zY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0
VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKaW5k
ZXggMmRlNDNkYWQ1YTlmYjZkOGM1OTFkN2ZmZmQ0NGUxYzQ0MjY3ODZhMy4uNzIyMjRmOTUxMGE5
NjlmN2Q0YWRhYTQxYzY4Yjk1NzgxZWNiOTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5vZGVSZW5k
ZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50
RGlkQmx1cigpCiAgICAgaWYgKCFpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byogaW5uZXJMYXllciA9IGlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpOworICAg
IGF1dG8qIGlubmVyTGF5ZXIgPSBpbm5lclRleHRSZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCk7
CiAgICAgaWYgKCFpbm5lckxheWVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAppbmRleCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBlMGU1MWZm
NzYxMzkyLi5iNTAyZWRhYWE5ZGE0NzhjOWQwNzcxOGY2ODEzNmE2NjUzMDg4YWVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAi
UGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZy
YW1lU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAt
MzQzLDEyICszNDMsMTQgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlh
dGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGlsZSAoY3Vy
cmVudEVuY2xvc2luZ0JveCkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0g
Y3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9y
bUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAgICAgICAg
ICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZl
bnQpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1FdmVudC0+
Y29weVdpdGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lkdGgoKSwg
ZmlsdGVyZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsKLSAgICAg
ICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdoZWVsRXZl
bnQoY29waWVkRXZlbnQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2Ny
b2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExheWVyLCB3
aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGJveExheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29waWVkRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5j
b3B5V2l0aERlbHRhc0FuZFZlbG9jaXR5KGZpbHRlcmVkUGxhdGZvcm1EZWx0YS53aWR0aCgpLCBm
aWx0ZXJlZFBsYXRmb3JtRGVsdGEuaGVpZ2h0KCksIGZpbHRlcmVkVmVsb2NpdHkpOworICAgICAg
ICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXJTY3JvbGxhYmxlLT5o
YW5kbGVXaGVlbEV2ZW50KGNvcGllZEV2ZW50KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xs
YWJsZUFyZWEoKmJveExheWVyU2Nyb2xsYWJsZSwgd2hlZWxFdmVudCk7CisgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChzY3JvbGxpbmdXYXNIYW5kbGVkKSB7CiAgICAgICAgICAgICAg
ICAgc3RvcEVsZW1lbnQgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5lbGVtZW50KCk7CkBAIC0xNTY4
LDcgKzE1NzAsNyBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29y
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAogICAgICAgICBib29sIGluUmVz
aXplciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVy
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4dCBpbiBh
IGJveCwgdGhlIHJlbmRlcmVyIGhlcmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdoaWNoIHBy
ZXZlbnRzIHNob3dpbmcgdGhlIHJlc2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5MzUuCi0g
ICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PigqcmVuZGVyZXIpLmxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9
IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxh
eWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVz
aXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAg
ICAgICAgICAgIGlmIChpblJlc2l6ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXll
ci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0
UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKQEAgLTE4MTIsMTIgKzE4
MTQsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKIAogICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IG1fY2xpY2tOb2RlLT5yZW5kZXJlcigpID8gbV9jbGlja05vZGUtPnJlbmRlcmVyKCktPmVu
Y2xvc2luZ0xheWVyKCkgOiBudWxscHRyOwogICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJ
bnRQb2ludChtb3VzZUV2ZW50LmhpdFRlc3RSZXN1bHQoKS5sb2NhbFBvaW50KCkpOwotICAgIGlm
IChsYXllciAmJiBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChsb2NhbFBvaW50KSkgewot
ICAgICAgICBsYXllci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOwotICAgICAgICBtX3Jlc2l6ZUxh
eWVyID0gbGF5ZXI7Ci0gICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IGxheWVyLT5v
ZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOwotICAgICAgICBpbnZhbGlkYXRlQ2xp
Y2soKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyID8gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0cikgeworICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKGxvY2FsUG9pbnQp
KSB7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEluUmVzaXplTW9kZSh0cnVlKTsK
KyAgICAgICAgICAgIG1fcmVzaXplTGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXI7CisgICAgICAgICAg
ICBtX29mZnNldEZyb21SZXNpemVDb3JuZXIgPSBzY3JvbGxhYmxlTGF5ZXItPm9mZnNldEZyb21S
ZXNpemVDb3JuZXIobG9jYWxQb2ludCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVkKHRydWUpOwpAQCAtMTkxOCwx
MCArMTkyMiwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYShOb2RlKiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogbGF5ZXIg
PSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmll
czo6Tm8pKSB7CiAgICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3
TGF5ZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRkZjBkMWUw
YzFkNGVlYjgzNDhlNzllYWJiMmExLi44NzE5YmEwMzY1NmJhNzg3ODk0YjM1NWUxZTUwMzQ0NWEw
OWUyMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTgzLDcgKzgzLDcgQEAg
Y2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xh
c3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlckxheWVyOwor
Y2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxiYXI7CkBAIC01NTAsNyArNTUwLDcgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9zdmdQYW4geyBmYWxzZSB9OwogCi0gICAgUmVuZGVyTGF5ZXIq
IG1fcmVzaXplTGF5ZXIgeyBudWxscHRyIH07CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBt
X3Jlc2l6ZUxheWVyIHsgbnVsbHB0ciB9OwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fY2FwdHVy
aW5nTW91c2VFdmVudHNFbGVtZW50OwogICAgIGJvb2wgbV9ldmVudEhhbmRsZXJXaWxsUmVzZXRD
YXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IDgzMmEwZDVmZTk1YmRiMzk3ZTFiOGFiZmJiYWVkYjg4MTc5NmY0OWMuLjRh
NWFjOWZhMzdiMDQxNDhlMWE4ZDU5OWI4ODI4M2EyN2IzYjI0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKQEAgLTc2LDkgKzc2LDkgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVu
LmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAt
MjU2MSw3ICsyNTYxLDggQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGxpbmcoKQogICAgIGlmICghbGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkg
JiYgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoUmVuZGVy
VmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKSkgewogICAgICAgICAgICAgdXBk
YXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT51
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKyAgICAgICAgICAgIEFT
U0VSVChyZW5kZXJWaWV3LT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICByZW5kZXJW
aWV3LT5zY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50
U2Nyb2xsKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zODMzLDEwICszODM0LDEwIEBAIFNj
cm9sbGFibGVBcmVhKiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvKiBsYXllciA9IG93bmVyUmVuZGVy
ZXItPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8
ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGxh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogfQogCiBJ
bnRSZWN0IEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QK
QEAgLTQzMTEsOCArNDMxMiwxMCBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAgICAgICBy
ZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFpbnQoY29u
dGV4dCwgZGlydHlSZWN0LCBMYXlvdXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIs
IHsgfSwgc2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5OjpBbnlPcmlnaW4gPyBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6
QW55T3JpZ2luIDogUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFjY2Vz
c2libGVPcmlnaW5Pbmx5LCBldmVudFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290TGF5ZXIt
PmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQp
Ci0gICAgICAgIHJvb3RMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0
eVJlY3QsIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSByb290TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChz
Y3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVu
dFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50T3Zlcmxh
eVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVy
KTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFp
bnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
CmluZGV4IDRkOGI3MmY4ZTViY2IwZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLmRiMWE0ZWJk
ZWQyZmFkZDFmZmYwYjViZGIyYTk4MDA0MWRmYWY4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiTm9kZS5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTQs
MTEgQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5
UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9zaW5nTGF5
ZXIgPSBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAgICAgICBB
U1NFUlQoZW5jbG9zaW5nTGF5ZXIpOworCisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXll
clNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAg
ICAgICBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6
ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCmluZGV4IDliYjhlOTJjYWFjNWNmNTMyYjc5YjkwZWVhYjNjZjIxNTQw
YWZmNDMuLmQxNjI2ZWMzYzI3YjFmYjYzZWZiNTNhODBmMDJlNmM4NjgwNmVjNDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC04MTksMTQgKzgxOSwxNiBAQCB2b2lkIEZyYW1l
OjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9pbnQmIHBv
c2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNMYXllcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93bmNhc3Q8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvKiBsYXll
ciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLnNjcm9sbGFibGVM
YXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gb2xk
U2Nyb2xsVHlwZSA9IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3Vy
cmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKHBvc2l0aW9uKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxU
eXBlKTsKKyAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci0+Y3VycmVudFNjcm9sbFR5cGUo
KTsKKyAgICBsYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xs
VHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgbGF5ZXItPnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEN1cnJl
bnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOwogCi0gICAgbGF5ZXIuZGlkRW5kU2Nyb2xsKCk7
IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KKyAgICBsYXllci0+ZGlkRW5k
U2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9p
ZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IGMwOTMwYjYzNDk1ZTcxODE1OTkxYTQw
NmE0ZDY2NWEyN2JhNzcxNGIuLjE4MGZlN2UwNDUxOTc4ZmZiNDJiN2IwOTY3OTJlMTg4MTc5MzNm
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTc4
Miw3ICs3ODIsNyBAQCBzdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQm94
KFJlbmRlckJveCYgYm94KQogICAgIGlmIChpczxSZW5kZXJMaXN0Qm94Pihib3gpKQogICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4oJmJveCk7CiAKLSAgICByZXR1cm4gYm94
LmxheWVyKCk7CisgICAgcmV0dXJuIGJveC5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KICAgICAKIHN0
YXRpYyBDb250YWluZXJOb2RlKiBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcihDb250
YWluZXJOb2RlKiBub2RlLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKaW5kZXggZTVhNDdiNzA3
NGRjYzkzMWRiMDAzNzc4M2EzZTI5YWZkN2ZkZGU0My4uYWVlNTBiMDlhOTMwZGMzOTU1MzA2ZmVj
MTQ1MGNiNzdhZGM3MDI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
Z2hsaWdodERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHRE
YXRhLmNwcApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIwOSw3ICsyMDksOCBAQCB2b2lkIEhpZ2hs
aWdodERhdGE6OnNldFNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBSZXBh
aW50TW9kZSBibG9jawogCiB2b2lkIEhpZ2hsaWdodERhdGE6OmNsZWFyU2VsZWN0aW9uKCkKIHsK
LSAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwor
ICAgIEFTU0VSVChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIG1fcmVuZGVy
Vmlldy5zY3JvbGxhYmxlTGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwogICAg
IHNldFNlbGVjdGlvbih7IH0sIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09s
ZCk7CiB9CiAKQEAgLTMxOSw4ICszMjAsMTAgQEAgdm9pZCBIaWdobGlnaHREYXRhOjphcHBseVNl
bGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9uLCBSZXBhaW50TW9kZQogICAg
ICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKICAgICB9CiAKLSAgICBpZiAoYmxvY2tSZXBh
aW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAgbV9yZW5kZXJWaWV3Lmxh
eWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgaWYgKGJsb2NrUmVw
YWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVu
ZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIG1fcmVuZGVyVmlldy5zY3JvbGxh
YmxlTGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB9CiAKICAg
ICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRo
ZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFuZAogICAgIC8vIHB1dCB0aGVtIGluIHRo
ZSBuZXcgb2JqZWN0cyBsaXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKaW5kZXggNmI1M2NiYTg1YzhlOWRjNTk3MTViNjM4Y2FlNTc1ZjgwZTQ4Zjk1NC4uYTY3Y2Iy
MmMyM2QzM2YzMzhjOGEwYTY2NGZlYjU5MmUwZjkwNmM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC01OCw3ICs1OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
RnJhZ21lbnRlZEZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJS
ZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
QEAgLTU1Myw3ICs1NTMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjplbmRBbmRDb21taXRVcGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpCiAKICAgICBmb3IgKGF1dG8qIGJsb2Nr
IDogYmxvY2tzVG9VcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5oYXNPdmVyZmxvd0Ns
aXAoKSk7Ci0gICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKKyAgICAgICAgaWYgKGJsb2NrLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAg
IGJsb2NrLT5zY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7
CiAgICAgICAgIGJsb2NrLT5jbGVhckxheW91dE92ZXJmbG93KCk7CiAgICAgfQogfQpAQCAtNTg0
LDggKzU4NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91
dCgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGxheWVy
KCkpCi0gICAgICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQo
KQpAQCAtMTEwOSwxMiArMTExMCwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIGlmIChw
dXNoZWRDbGlwKQogICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwaGFzZSwgYWRq
dXN0ZWRQYWludE9mZnNldCk7CiAKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcigpKQorICAgICAg
ICByZXR1cm47CisKICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3
aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAg
IC8vIHotaW5kZXguIFdlIHBhaW50IGFmdGVyIHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9y
ZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJzIHdpbGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJh
Y2tncm91bmQvYm9yZGVyLgogICAgIGlmICgocGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNr
Z3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBo
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpCiAgICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0
eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGlu
Um9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAg
ICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwg
cm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWlu
dEluZm8ucmVjdCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50
T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAogdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMTQ2OSwxNiArMTQ3MywxNiBAQCB2b2lkIFJlbmRlckJs
b2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50TwogCiAgICAgICAgIExheW91dFJlY3QgZ2FwUmVjdHNCb3VuZHMgPSBzZWxlY3Rp
b25HYXBzKCp0aGlzLCBwYWludE9mZnNldCwgTGF5b3V0U2l6ZSgpLCBsYXN0VG9wLCBsYXN0TGVm
dCwgbGFzdFJpZ2h0LCBjYWNoZSwgJnBhaW50SW5mbyk7CiAgICAgICAgIGlmICghZ2FwUmVjdHNC
b3VuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0g
ZW5jbG9zaW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyU2Nyb2xsYWJs
ZSA9IGVuY2xvc2luZ0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxlTGF5ZXIo
KSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkoLXBh
aW50T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAg
ICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRS
ZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaXNCb3goKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXllci0+cmVu
ZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBnYXBSZWN0
c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyksICZs
YXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChsYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaXNCb3goKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXllclNjcm9s
bGFibGUtPnJlbmRlckJveCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhnYXBS
ZWN0c0JvdW5kcyk7CisgICAgICAgICAgICAgICAgbGF5ZXJTY3JvbGxhYmxlLT5hZGRCbG9ja1Nl
bGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtMjAwMSw3ICsyMDA1LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9p
bnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBv
CiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRl
ZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRP
ZmZzZXQpKSk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250
cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlv
dXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9k
ZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjQ5OCw5ICsyNTA1LDExIEBAIGludCBSZW5kZXJCbG9j
azo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0
TGluZSwgTGluCiAgICAgICAgIC8vICh0aGUgY29udGVudCBpbnNpZGUgdGhlbSBtb3ZlcykuICBU
aGlzIG1hdGNoZXMgV2luSUUgYXMgd2VsbCwgd2hpY2gganVzdCBib3R0b20tYWxpZ25zIHRoZW0u
CiAgICAgICAgIC8vIFdlIGFsc28gZ2l2ZSB1cCBvbiBmaW5kaW5nIGEgYmFzZWxpbmUgaWYgd2Ug
aGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciwgb3IgaWYgd2UgYXJlIHNjcm9sbGVkCiAgICAgICAg
IC8vIHZlcnRpY2FsbHkgKGUuZy4sIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayB0aGF0IGhhcyBo
YWQgc2Nyb2xsVG9wIG1vdmVkKS4KLSAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXll
cigpICYmIChsYXllcigpLT5tYXJxdWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGlu
ZSA/IChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNl
dCgpLnkoKSAhPSAwKQotICAgICAgICAgICAgOiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKSAhPSAwKSkpKSB8fCAoaXNXcml0aW5n
TW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOwotICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNN
YXJxdWVlID0gc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgp
IDogbnVsbHB0cjsKKyAgICAgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFi
bGVMYXllcigpID8gKHNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IHNj
cm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkpIDogZmFsc2U7CisgICAgICAgIGJv
b2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllcigpID8gKHNjcm9sbGFi
bGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyKCktPnNj
cm9sbE9mZnNldCgpLngoKSkgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9
IChoYXNNYXJxdWVlIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBoYXNWZXJ0aWNh
bFNjcm9sbGJhciA6IGhhc0hvcml6b250YWxTY3JvbGxiYXIpKSB8fCAoaXNXcml0aW5nTW9kZVJv
b3QoKSAmJiAhaXNSdWJ5UnVuKCkpOworCiAgICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQ
b3MgPSBpZ25vcmVCYXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxp
bmUoZGlyZWN0aW9uKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0RlcHJlY2F0ZWRGbGV4aWJs
ZUJveCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CmluZGV4IGUyMTNhYWM3MWE5NDQ1ODczZTIxNjA0MTY0ZTQxNDQ1OGIwNmNhOTAuLmM1MWM1MGNl
NTdiZGFlMDAzNTRhZGQyOTQyZDFjY2U3NDhkYzM4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5o
IgpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmlu
c2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAo
IXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEg
aG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdp
ZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIo
KS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXll
cigpICYmIHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkt
Pm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkpCiAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGgg
PSAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA4
ZmE2ZGZiMzQ5ZTJmM2NjZGZjNzdiZTVkMTFjMjg5YzdlMDRmNTExLi43NTRiZjMzNzdmMDQ3ZmEy
YWMxNjQzYTFkNjA5YzQyNjUxZGRmMjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcApAQCAtNTgsOCArNTgsOCBAQAogI2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNs
dWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0
U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOSwxMSArMzE5LDExIEBAIHZvaWQgUmVuZGVyQm94Ojpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBhbmQgd2UgaGF2ZSBh
IGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRoYXQgdmFsdWUgaW50
byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgU2Nyb2xsUG9z
aXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGlm
IChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBv
bGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewor
ICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllcigp
LT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdT
dHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgICAg
ICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigp
LT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uKTsKICAgICB9CiAKICAgICAvLyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQg
d2l0aG91dCB0cmlnZ2VyaW5nIGxheW91dC4KQEAgLTU0Miw4ICs1NDIsOCBAQCBMYXlvdXRVbml0
IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Nyb2xs
V2lkdGgoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKQot
ICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKKyAgICBpZiAoaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUg
b3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJp
Z2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpIHsKQEAgLTU1NSw4ICs1NTUsOCBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0
aCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAg
aWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigp
LT5zY3JvbGxIZWlnaHQoKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0
KCk7CiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNo
ZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9k
ZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3Rl
YWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KQEAgLTU2NSwxMiArNTY1LDEyIEBAIGludCBS
ZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExl
ZnQoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8g
bGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOworICAgIHJldHVybiBoYXNPdmVyZmxv
d0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQ
b3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5z
Y3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCku
eSgpIDogMDsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxh
eW91dElmTmVlZGVkKCkKQEAgLTU3OSw3ICs1NzksNyBAQCB2b2lkIFJlbmRlckJveDo6cmVzZXRM
b2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQogICAgICAgICBzZXRMb2dpY2FsSGVp
Z2h0KDBfbHUpOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRl
ckxheWVyJiBsYXllcikKK3N0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVy
ZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCkBA
IC01ODksMjYgKzU4OSwyNiBAQCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJl
bmRlckxheWVyJiBsYXllcikKIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5l
d0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
IWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVy
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigp
KTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBj
bGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFi
bGVMYXllcigpKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3
TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0dXBXaGVl
bEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZUG9zaXRpb24o
bmV3VG9wLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxF
dmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsVG9ZUG9zaXRpb24obmV3VG9wLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9z
aXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNs
YW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93
Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9s
bGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRv
cigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRv
cigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXllcigpLT5zZXRTY3JvbGxQ
b3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAog
dm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODA4LDI0ICs4MDgs
MzAgQEAgYm9vbCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUo
Y29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVW
ZXJ0aWNhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0Ns
aXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAg
ICAgICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUo
KS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0Ns
aXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoc2Nyb2xsYWJsZUxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGJv
b2wgUmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewot
ICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNP
dmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92
ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byk7
CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCktPmhhc092ZXJsYXlT
Y3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5v
dmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0g
T3ZlcmZsb3c6OkF1dG87CiB9CiAKIGludCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKSBjb25zdAogewotICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkg
PyBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOworICAgIHJldHVybiBpbmNs
dWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxh
YmxlTGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDogMDsKIH0KIAogaW50IFJlbmRl
ckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCgpIDogMDsKKyAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJT
aXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Ny
b2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKQEAgLTgzNCwxMiArODQwLDEyIEBAIGludCBSZW5k
ZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCku
b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJh
cnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzVmVydGljYWxT
Y3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxh
YmxlTGF5ZXIoKS0+aGFzVmVydGljYWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYg
IWNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYm
IGxheWVyKCktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVChzY3Jv
bGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9
CiAKQEAgLTg0OCwxNSArODU0LDE0IEBAIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJh
ckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94OjpzY3JvbGxMYXllcihTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVy
KiBib3hMYXllciA9IGxheWVyKCk7Ci0gICAgaWYgKGJveExheWVyICYmIGJveExheWVyLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKLSAgICAgICAgaWYgKHN0
b3BFbGVtZW50KQotICAgICAgICAgICAgKnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOwotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBi
b3hMYXllciA9IHNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghYm94TGF5ZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWJveExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3Rv
cEVsZW1lbnQpCisgICAgICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxl
bWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYg
d2hlZWxFdmVudEFic29sdXRlUG9pbnQpCkBAIC04NzgsMTUgKzg4MywxNCBAQCBib29sIFJlbmRl
ckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LAogYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNh
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYm9vbCBzY3JvbGxl
ZCA9IGZhbHNlOwotICAgIAotICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAo
bCkgeworICAgIGF1dG8qIGxheWVyID0gc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKGxheWVy
KSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIC8vIE9uIE1hYyBvbmx5IHdlIHJlc2V0
IHRoZSBpbmxpbmUgZGlyZWN0aW9uIHBvc2l0aW9uIHdoZW4gZG9pbmcgYSBkb2N1bWVudCBzY3Jv
bGwgKGUuZy4sIGhpdHRpbmcgSG9tZS9FbmQpLgogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0g
U2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAgICAgIHNjcm9sbGVkID0gbC0+c2Nyb2xsKGxvZ2lj
YWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBTY3Jv
bGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIHNjcm9sbGVkID0gbGF5ZXIt
PnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAg
aWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgaWYgKGxheWVyLT5zY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCiAg
ICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBpZiAoc2Nyb2xs
ZWQpIHsKQEAgLTg5OSw5ICs5MDMsOSBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChT
Y3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogICAgIGlm
IChzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50ID09IGVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5p
bmdCbG9jaygpOwotICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0
dXJuIGItPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwg
c3RvcEVsZW1lbnQpOworICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygp
OworICAgIGlmIChibG9jayAmJiAhYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1
cm4gYmxvY2stPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
ciwgc3RvcEVsZW1lbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTMyLDcgKzkzNiw3
IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QK
IAogYm9vbCBSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT51c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uKQpAQCAtOTkxLDggKzk5NSw4IEBAIFJlbmRlckJveCogUmVuZGVyQm94OjpmaW5k
QXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIAogdm9pZCBSZW5kZXJCb3g6
OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgc291cmNlKQogewotICAgIGlmIChsYXllcigpKQot
ICAgICAgICBsYXllcigpLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291cmNlKTsKKyAgICBpZiAoc2Ny
b2xsYWJsZUxheWVyKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYW5TY3JvbGxGcm9t
UG9pbnQoc291cmNlKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxi
YXJzKCkgY29uc3QKQEAgLTEwMTcsMTEgKzEwMjEsOSBAQCBib29sIFJlbmRlckJveDo6bmVlZHNQ
cmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkgY29uc3QKIAogU2Nyb2xsUG9zaXRpb24gUmVu
ZGVyQm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0Ns
aXAoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkK
ICAgICAgICAgcmV0dXJuIHsgMCwgMCB9OwotCi0gICAgQVNTRVJUKGhhc0xheWVyKCkpOwotICAg
IHJldHVybiBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNh
Y2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdApAQCAtMTU2OSw3ICsxNTcxLDcgQEAgYm9v
bCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50
KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91
bmQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIGZvcmVncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVj
dCwgYmFja2dyb3VuZE9ic2N1cmF0aW9uVGVzdE1heERlcHRoKTsKQEAgLTE4ODgsMTAgKzE4OTAs
MTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0
UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBS
ZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9y
ZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9s
bGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7CisgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKSB7CiAgICAgICAgIGlm
IChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAg
ICBjbGlwUmVjdC5tb3ZlKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5
KSwgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgocmVsZXZhbmN5KSwgbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChy
ZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOworICAgICAgICBjbGlwUmVjdC5j
b250cmFjdChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5
KSwgc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkp
OwogICAgIH0KIAogICAgIHJldHVybiBjbGlwUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDVkZGZjMzExODQ3YmFmZDkz
ZjMzOTQ4YzExMjViZWVlOGMyODM5ODcuLmMwZGE3ZWExMTM0Zjk2NjAzNThjOTkyMTNkZDMzYTg2
ZmU1YTU2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcApAQCAtNDgsOSArNDgsOSBAQAogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxl
Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29s
dW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVSb3cuaCIKQEAgLTQ5MCw4ICs0OTAsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
b21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAg
ICAgICBGbG9hdFBvaW50IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yID0gY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigp
IC0KICAgICAgICAgICAgIEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0
KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5j
bG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRk
aW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5p
bmdCbG9jaykKLSAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGlu
Z0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAg
ICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBlbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGNvbnRh
aW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBw
aW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgY29u
dGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWlu
ZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0
cmFpbnRzLnNldENvbnRhaW5pbmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3Jv
bGxpbmdBbmNlc3Rvcik7CkBAIC01MDgsOCArNTA4LDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3
cG8KICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdMYXllcikgewogICAgICAgICBzdGlja3lMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciAtPSBGbG9hdFNpemUoZW5jbG9zaW5nQ2xp
cHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQo
KSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9z
aW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlw
cGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBzdGlja3lMb2NhdGlvblJl
bGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWlu
aW5nQmxvY2sgJiYgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBl
bmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7
CiAgICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMgbm90
IHRyYW5zZm9ybWVkLgogICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rvci5z
ZXRMb2NhdGlvbihzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBA
IC01NDgsMTEgKzU0OCwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnN0
cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRSZWN0
IGNvbnN0cmFpbmluZ1JlY3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFpbmVy
UXVhZChGbG9hdFJlY3QoY2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0gICAg
ICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5nQ2xp
cHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zm
c2V0OworICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgZmxvYXQgc2Nyb2xs
YmFyT2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVy
KCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKQotICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xp
cHBpbmdCb3gubGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSk7CisgICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigp
ICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNjcm9sbGFibGVMYXllcigpICYmIGVuY2xvc2luZ0Ns
aXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAg
ICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LnNjcm9sbGFi
bGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplKTsKIAogICAgICAgICBjb25zdHJhaW5pbmdSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQo
c2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJhck9mZnNldCwgc2Nyb2xsT2Zmc2V0LnkoKSkpOwog
ICAgICAgICByZXR1cm4gY29uc3RyYWluaW5nUmVjdDsKQEAgLTg0NCw4ICs4NDYsMTAgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY28KICAgICAgICAgCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFp
bnQgcmVjdCB0byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0
IHRoZSBlbmRzLgogICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNCb3guc2Ny
b2xsUG9zaXRpb24oKSk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0
ICsgbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKSArIGJSaWdodCk7Ci0gICAgICAgIHNjcm9sbGVkUGFp
bnRSZWN0LnNldEhlaWdodChib3JkZXJUb3AoKSArIGxheWVyKCktPnNjcm9sbEhlaWdodCgpICsg
Ym9yZGVyQm90dG9tKCkpOworICAgICAgICBhdXRvIHNjcm9sbFdpZHRoID0gc2Nyb2xsYWJsZUxh
eWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKSA6IDA7CisgICAgICAgIHNj
cm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgc2Nyb2xsV2lkdGggKyBiUmlnaHQpOwor
ICAgICAgICBhdXRvIHNjcm9sbEhlaWdodCA9IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJs
ZUxheWVyKCktPnNjcm9sbEhlaWdodCgpIDogMDsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Qu
c2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkpOwog
ICAgIH0KICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGJhY2tncm91bmRDbGlw
U3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCAxYWVkNDcxNWY0ZWMzM2Y0Y2M1N2M5NWU5YmQ4MzU4YjE2MDkzN2Ux
Li5iMDMzZjNlZTZkMzc0OGY3ZmE4ZTNmNTBjZTczOTUxNGIwZThhZTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NiwxNiArMjg2LDExIEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUmVjdHMm
IGNsaXBSZWN0cykKIAogI2VuZGlmCiAKLXN0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xs
aW5nU2NvcGUoKQotewotICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAw
OwotICAgIHJldHVybiArK2N1cnJlbnRTY29wZTsKLX0KLQogREVGSU5FX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXll
cihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAg
OiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZp
ZXcoKSkKK1JlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBy
ZW5kZXJlckxheWVyTW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBl
KQorICAgIDogbV9sYXllclR5cGUobGF5ZXJUeXBlKQorICAgICwgbV9pc1JlbmRlclZpZXdMYXll
cihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX2ZvcmNl
ZFN0YWNraW5nQ29udGV4dChyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNNZWRpYSgpKQogICAg
ICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5nQ29udGV4
dChmYWxzZSkKQEAgLTMwMywxOSArMjk4LDE1IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBt
X3pPcmRlckxpc3RzRGlydHkoZmFsc2UpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1
ZSkKICAgICAsIG1faGFkTmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQotICAgICwgbV9pblJlc2l6
ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwg
bV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJl
bmN5KGZhbHNlKQogICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAg
LCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVk
c05vcm1hbFJlcGFpbnQpCiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkK
ICAgICAsIG1faGFzVmlzaWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5k
YW50U3RhdHVzRGlydHkoZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNl
KQotICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4
ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFs
c2UpCiAgICAgLCBtXzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAg
LTMyOSwxNSArMzIwLDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faW5zaWRlU1ZHRm9y
ZWlnbk9iamVjdChmYWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAg
LCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRl
ZFJlYXNvbikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSkKLSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNl
KQotICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5B
QkxFRAogICAgICwgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAt
MzUyLDUzICszMzQsMjIgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICBzZXRJc05vcm1hbEZsb3dP
bmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CiAgICAgc2V0SXNDU1NTdGFja2luZ0NvbnRl
eHQoc2hvdWxkQmVDU1NTdGFja2luZ0NvbnRleHQoKSk7CiAKLSAgICBtX2lzU2VsZlBhaW50aW5n
TGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJW
aWV3TGF5ZXIoKSkKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3Jv
bGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIC8vIG1faXNTZWxmUGFpbnRp
bmdMYXllciBpcyBpbml0aWFsaXplZCBpbiBSZW5kZXJMYXllclNWRy9IVE1MLCBldmVuIHRob3Vn
aAorICAgIC8vIGl0IGJlbG9uZ3MgdG8gUmVuZGVyTGF5ZXIgLS0gd2UgY2Fubm90IGNhbGwKKyAg
ICAvLyAibV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigp
OyIKKyAgICAvLyBoZXJlLCBpbiB0aGUgY29uc3RydWN0b3IgLS0gc2luY2UgdGhlIFJlbmRlckxh
eWVyU1ZHL0hUTUwgY2xhc3NlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgeWV0LgogCiAgICAgaWYgKCFy
ZW5kZXJlcigpLmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVz
RGlydHkgPSBmYWxzZTsKICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCku
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAg
IC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhl
ciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIG1fc2Nyb2xsUG9zaXRp
b24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKCFt
X3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5z
ZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGVsZW1lbnQtPnNl
dFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogewotICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKLSAgICAg
ICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVk
KCk7Ci0KLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAg
ICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVy
KCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRp
b24obV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxT
Y3JvbGxiYXIpOwotICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxE
ZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwotCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAg
ICAgICAgcmVtb3ZlUmVmbGVjdGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAg
ICBjbGVhclJlc2l6ZXIoKTsKLQogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAgICBpZiAo
cGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZygpKSB7CkBAIC00MTcsNiArMzY4LDIwIEBAIFJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04ocmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhZmly
c3RDaGlsZCgpKTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllcjo6c2Ny
b2xsYWJsZUxheWVyKCkKK3sKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlz
KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2NvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSog
UmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0Cit7CisgICAgaWYgKGlzPGNvbnN0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxj
b25zdCBSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCiB2b2lkIFJlbmRlckxheWVyOjphZGRDaGlsZChSZW5kZXJMYXllciYgY2hpbGQsIFJlbmRl
ckxheWVyKiBiZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJMYXllciogcHJldlNpYmxpbmcgPSBi
ZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IGxhc3RDaGlsZCgp
OwpAQCAtOTM0LDcgKzg5OSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvbwogdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5
TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykKIHsKICAgICB1
cGRhdGVMYXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpOworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Ny
b2xsYWJsZUxheWVyKCk7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CiAKICAg
ICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0Fu
Y2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKQEAgLTk0Miw3ICs5MTAsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAs
IE9wdGlvblNldAogICAgIC8vIENsZWFyIG91ciBjYWNoZWQgY2xpcCByZWN0IGluZm9ybWF0aW9u
LgogICAgIGNsZWFyQ2xpcFJlY3RzKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDb250cm9scygp
KSB7CisgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJm
bG93Q29udHJvbHMoKSkgewogICAgICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290OwogICAg
ICAgICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IExheW91
dFNpemUodG9GbG9hdFNpemUoZ2VvbWV0cnlNYXAtPmFic29sdXRlUG9pbnQoRmxvYXRQb2ludCgp
KSkpOwpAQCAtOTUxLDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAg
ICAgICAvLyBhcyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3IgbWF5IGJlIHRydWUgZm9yIGFuIGFu
Y2VzdG9yIGxheWVyLgogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5j
ZXN0b3Iocm9vdCgpKTsKICAgICAgICAgfQotICAgICAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5wb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJv
b3QpKTsKICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKQEAg
LTEwMjgsMTMgKzk5Niw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgIGNoaWxk
LT51cGRhdGVMYXllclBvc2l0aW9ucyhnZW9tZXRyeU1hcCwgZmxhZ3MpOwogCiAgICAgLy8gV2l0
aCBhbGwgb3VyIGNoaWxkcmVuIHBvc2l0aW9uZWQsIG5vdyB1cGRhdGUgb3VyIG1hcnF1ZWUgaWYg
d2UgbmVlZCB0by4KLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3b3Vs
ZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRm
aWVsZHMuCi0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0
aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0g
dHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAgICAg
ICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
OwotICAgIH0KKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFy
cXVlZSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZU1hcnF1ZWUoKTsKIAogICAg
IGlmIChyZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5n
cygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKSB7CiAg
ICAgICAgIGJvb2wgaW50ZXJzZWN0c1ZpZXdwb3J0ID0gY29tcG9zaXRvcigpLmZpeGVkTGF5ZXJJ
bnRlcnNlY3RzVmlld3BvcnQoKnRoaXMpOwpAQCAtMTExNCw5MiArMTA3Nyw2IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNsZWFyUmVwYWludFJlY3RzKCkKICAgICByZW5kZXJlcigpLmNsZWFyUmVwYWlu
dExheW91dFJlY3RzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIo
KS52aWV3KCkubGF5ZXIoKSk7Ci0KLSAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwotCi0gICAgUmVuZGVyR2Vv
bWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQotewotICAgIFJlbmRlckdl
b21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIGlmICh0aGlzICE9IHJl
bmRlcmVyKCkudmlldygpLmxheWVyKCkpCi0gICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5n
c1RvQW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIpOwotCi0gICAgLy8gRklYTUU6IHdoeSBpcyBp
dCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRv
Ci0gICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rv
ciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KLSAgICB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
UmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKLSAg
ICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVwZGF0ZSBzbyB0aGF0IHRoZSBjaGVj
ayBiZWxvdyBpcyB2YWxpZC4KLSAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsK
LQotICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250ZW50IGFuZCBubyB2aXNpYmxlIGRl
c2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1dGluZwotICAgIC8vIG91ciByZWN0
YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3VyIHZpc2liaWxpdHkgY2hhbmdlcywg
d2UgYXJlIGV4cGVjdGVkIHRvCi0gICAgLy8gcmVjb21wdXRlIGFsbCBvdXIgcG9zaXRpb25zIGFu
eXdheS4KLSAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgIW1faGFzVmlzaWJsZUNv
bnRlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgcG9zaXRpb25DaGFuZ2VkID0gdXBk
YXRlTGF5ZXJQb3NpdGlvbigpOwotICAgIGlmIChwb3NpdGlvbkNoYW5nZWQpCi0gICAgICAgIGZs
YWdzLmFkZChIYXNDaGFuZ2VkQW5jZXN0b3IpOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55
KHsgSGFzQ2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9y
LCBJc092ZXJmbG93U2Nyb2xsIH0pKQotICAgICAgICBjbGVhckNsaXBSZWN0cygpOwotCi0gICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24oKSkK
LSAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpOwot
Ci0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIGZsYWdzLmFk
ZChIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsKLSAgICAKLSAgICBib29sIHNob3Vs
ZENvbXB1dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFpbnMoSGFzU2VlblZpZXdwb3J0Q29u
c3RyYWluZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNBbGwoeyBJc092ZXJmbG93U2Nyb2xs
LCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0pKSAmJiBpc1NlbGZQYWludGluZ0xh
eWVyKCk7Ci0gICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAhaXNWaXN1YWxseU5vbkVtcHR5KCk7
Ci0gICAgYm9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MgPSBnZW9tZXRyeU1hcCAmJiAoKHNo
b3VsZENvbXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFsbHlFbXB0eSkgfHwgZmlyc3RDaGls
ZCgpKTsKLSAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQotICAgICAgICBnZW9tZXRy
eU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7Ci0KLSAgICBpZiAo
c2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cykgewotICAgICAgICAvLyBXaGVuIHNjcm9sbGluZywg
d2UgZG9uJ3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2aXN1YWxseSBub24tZW1wdHkgbGF5
ZXJzLgotICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQotICAgICAgICAgICAgY2xlYXJSZXBh
aW50UmVjdHMoKTsKLSAgICAgICAgZWxzZSAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sgdGhlIHJl
cGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUgdHJlZS4KLSAgICAgICAgICAgIGNv
bXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCksIGdlb21l
dHJ5TWFwKTsKLSAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5w
bGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIC8vIFdoZW4gU2Nyb2xsVmlldydzIG1fcGFpbnRz
RW50aXJlQ29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5ZXIgYmFja2luZyBjaGFuZ2VzLCB0
aGUgcmVwYWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KLSAgICAgICAgLy8gdmlzdWFsIHRvIGxh
eW91dCBvdmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhlIGNhY2hlZCByZXBhaW50IHJlY3Rz
IGJlY29tZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUgcmVjb21wdXRlZCAoc2VlIHdlYmtp
dC5vcmcvYi8xODgxMjEpLgotICAgICAgICAvLyBDaGVjayB0aGF0IG91ciBjYWNoZWQgcmVjdHMg
YXJlIGNvcnJlY3QuCi0gICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0
UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3Qg
PT0gcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKSkpOwotICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVw
YWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX291
dGxpbmVCb3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZW5kZXJlcigp
LmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKFJlbmRlckxh
eWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGdl
b21ldHJ5TWFwLCBmbGFncyk7Ci0KLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgb3VyIHJlZmxlY3Rp
b24gYXMgc2Nyb2xsaW5nIGlzIGEgdHJhbnNsYXRpb24gd2hpY2ggZG9lcyBub3QgY2hhbmdlIHRo
ZSBzaXplKCkKLSAgICAvLyBvZiBhbiBvYmplY3QsIHRodXMgUmVuZGVyUmVwbGljYSB3aWxsIHN0
aWxsIHJlcGFpbnQgaXRzZWxmIHByb3Blcmx5IGFzIHRoZSBsYXllciBwb3NpdGlvbiB3YXMKLSAg
ICAvLyB1cGRhdGVkIGFib3ZlLgotCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICBib29s
IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsK
LSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFy
cXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAo
c2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQotICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGlu
Z3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKLQotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkuaW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpOwotfQotCiAjaWYgRU5BQkxFKENT
U19DT01QT1NJVElORykKIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQmxlbmRNb2RlKCkKQEAg
LTE2OTAsMzQgKzE1NjcsMTAgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgICAg
IGxvY2FsUG9pbnQgLT0gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCphbmNlc3RvcikudG9wTGVm
dExvY2F0aW9uT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gU3VidHJh
Y3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCi0gICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9u
ZWRQYXJlbnQ7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYg
KHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVy
KCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKLSAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5
ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Ny
b2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShw
b3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlz
PFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAg
ICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVk
UGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0g
b2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBw
b3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAgfSBlbHNlIGlm
IChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnRMYXll
ci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQg
LT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKLQotICAgICAgICBB
U1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1f
Ym94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
OwotICAgIH0KIAotICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsK
LSAgICAgICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9s
bGluZ1Njb3BlID09IG1fYm94U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgICAgICBtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKCFt
X2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1f
Ym94U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1f
Ym94U2Nyb2xsaW5nU2NvcGU7CisgICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBv
ZmZzZXQuCisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5k
VXBkYXRlU2Nyb2xsaW5nU2NvcGVzKGxvY2FsUG9pbnQpOwogCiAgICAgYm9vbCBwb3NpdGlvbk9y
T2Zmc2V0Q2hhbmdlZCA9IGZhbHNlOwogICAgIGlmIChyZW5kZXJlcigpLmlzSW5GbG93UG9zaXRp
b25lZCgpKSB7CkBAIC0xODM5LDg0ICsxNjkyLDI4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRl
ckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKLXsKLSAgICBhdXRvKiBvd25lckVsZW1l
bnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYg
KCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byogb3du
ZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIW93bmVyUmVu
ZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG93bmVyUmVuZGVy
ZXItPmVuY2xvc2luZ0xheWVyKCk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5n
Q29udGFpbmluZ0Jsb2NrTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBDcm9zc0ZyYW1l
Qm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykKK1JlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jv
c3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gbGF5
ZXIuZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCisgICAgaWYgKGF1dG8q
IGFuY2VzdG9yID0gZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCiAgICAg
ICAgIHJldHVybiBhbmNlc3RvcjsKIAogICAgIGlmIChjcm9zc0ZyYW1lQm91bmRhcmllcyA9PSBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIpOwotfQotCi1SZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykg
Y29uc3QKLXsKLSAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIpIHsKLSAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVu
ZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNj
cm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICB9OwotCi0gICAgaWYgKGluY2x1ZGVT
ZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9s
bGFibGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRo
aXMpOwotICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmlu
Z0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0
TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0Zy
YW1lQm91bmRhcmllcykpIHsKLSAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKm5l
eHRMYXllcikpCi0gICAgICAgICAgICByZXR1cm4gbmV4dExheWVyOwotICAgIH0KLQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJv
dW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBp
c0luc2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9n
cmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBl
eGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCi1ib29sIFJlbmRlckxheWVy
Ojppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK1JlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmlt
YXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKTsKLSNlbmRpZgorICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgYXV0byogb3duZXJS
ZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIW93bmVyUmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVw
ZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAot
ewotICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJz
T25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7CisgICAgcmV0dXJuIG93bmVyUmVu
ZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CkBAIC0yNDQ0LDMzMSArMjI0MSw2
IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5k
ZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252
ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JD
b2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZp
c2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNl
dHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2Jq
ZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NS
T0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkg
JiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVu
ZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7
Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFjY2Vs
ZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9m
IFdlYktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRv
dWNoRXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlmICghcmVuZGVyZXIoKS5l
bGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91
Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCi17Ci0g
ICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkp
OwotICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFs
c2U7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0KLS8vIEZJWE1FOiB0
aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxh
eWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29t
cG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KLQotLy8gRklY
TUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVu
ZGVyTGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBv
c2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKLX0KLQotc3Rh
dGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCi17
Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCi0gICAgLy8gaHR0
cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0
cy9icm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOwotCi0g
ICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKLSAg
ICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0
ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQotICAgICAg
ICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChz
dGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQotICAgIHJldHVybiBh
ZGp1c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxE
ZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3Rl
ZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhl
aWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQ
b3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBr
bm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2Ug
aXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3Rh
dGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91
c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAg
ICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAg
ICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9z
aXRpb247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNv
dXJjZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0
aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhl
aWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEu
c2V0SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERl
bHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9W
aXNpYmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZl
bHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQot
ewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBy
ZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQo
KSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCkt
PnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9s
bE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAg
ICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRB
cmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYg
dGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0
aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zm
c2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVt
YWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXll
cihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olll
cykpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5
KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdl
IHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBz
Y3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBX
aGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxl
ZC4KLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEp
OwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9
ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYg
d2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5n
IGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+
IHBvc2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZO
ZWVkZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbiht
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9s
bFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
IGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlv
biBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRp
b24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsK
LSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7Ci0g
ICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmlt
YXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgaWYgKGFuaW1h
dGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBj
bGFtcGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci19Ci0KLVNjcm9s
bE9mZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0
JiBzY3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJh
aW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIExPR19XSVRIX1NU
UkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlv
blVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICByZXR1cm4gc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9z
aXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0
JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNj
cm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBT
Y3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAgICBpZiAoY2xhbXBl
ZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAg
IHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYgKCFyZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7Ci0gICAgc2V0U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsK
LQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxP
ZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFt
cGluZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBl
KCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBTY3JvbGxP
ZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAgIGlmIChjdXJyZW50
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRp
dmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygp
OwotICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xs
T2Zmc2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBw
b3NpdGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICgh
Ym94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBz
dHJlYW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAi
IDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNj
cm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0gICAgU2Nyb2xsUG9z
aXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVl
ZSgpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29t
cHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCi0g
ICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgICAgIGNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYg
KGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlv
ciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAgICAgIGludCBtYXhP
ZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwot
ICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09m
ZnNldC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNh
cmV0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7
Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKLSAgICAg
ICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCi0gICAg
ICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0gICAgICAgICAgICBu
ZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0g
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAgIH0KLSNlbmRpZgot
ICAgIH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBj
dXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90
SW5BbmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBn
ZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2Yg
YSB1c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9i
YWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRz
LgotICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsK
LSAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAg
ICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRp
b247Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7Ci0KLSAgICAv
LyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMg
b25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KLSAgICAv
LyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8g
ZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KLSAgICBpZiAo
IXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkp
IHsKLSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1
c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0gICAgICAgIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAgICAgIHZpZXcuZnJh
bWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQotICAgICAgICBpZiAo
IW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0
aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxy
ZWFkeSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBs
YXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJM
YXllcnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0
aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRl
cgotICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAgICAgICAgIGlmICh1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TmVlZHNDb21w
b3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9z
aXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQg
KHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAgICAgICAgICAgLy8g
c28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQu
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVu
dCgpKQotICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVk
VXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhl
IGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0gICAgICAgIERlYnVn
UGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKLSAgICB9Ci0KLSAg
ICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWlu
dCgpOwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVy
IHNjcm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRl
KCk7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFz
UmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1f
cmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJl
cGFpbnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZl
bnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBhaW50Q29udGFpbmVy
KQotICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+
bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLSAgICBmcmFt
ZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVh
ZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRy
dWU7Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgc2V0TmVl
ZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERlc2NlbmRhbnRzTmVl
ZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgcmVxdWlyZXNS
ZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKLSAg
ICB9Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3Qu
Ci0gICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNp
bmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwotCi0gICAgLy8g
U2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KLSAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVt
ZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7Ci0K
LSAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlk
Q2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29u
dGVudHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwo
KnRoaXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Blcm1p
dFNjcm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3
JiBmcmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhwbGljaXRseSBm
b3JiaWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODEzLDMwICsyMjg1LDMzIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1
dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJl
Y3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIHBhcmVudExh
eWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6
Ok5vKTsKICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogCiAgICAgaWYgKGFs
bG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0
aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7
CisKICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0
aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAg
ICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4g
YnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwogICAgICAgICBBU1NFUlQoYm94KTsKICAgICAgICAgTGF5b3V0UmVjdCBsb2Nh
bEV4cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3Qo
YWJzb2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAoc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewogICAg
ICAgICAgICAgLy8gRm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwt
dGIgYm94LCB0aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSBy
ZWN0CiAgICAgICAgICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwg
YmFyLiBTbyB0aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNh
bWUgcG9zaXRpb24gdG9vLgotICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlv
dXRQb2ludCgtdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CisgICAgICAgICAgICBsb2Nh
bEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC1zY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoKSwgMCkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFJlY3QgbGF5
ZXJCb3VuZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdo
dCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKGxh
eWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwg
b3B0aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zm
c2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRl
ZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwotICAgICAgICBpZiAoY2xhbXBlZFNj
cm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0
dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAg
ICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPmNs
YW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNp
emUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgICAgICBpZiAo
Y2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpIHx8
IHNjcm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xs
QmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgICAgICBTY3JvbGxPZmZz
ZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAg
ICAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwog
ICAgICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzICYmIHVzZVNtb290aFNjcm9s
bGluZyhvcHRpb25zLmJlaGF2aW9yLCBib3gtPmVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAg
YW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAgc2V0U2Nyb2xsUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBT
Y3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRl
ZCk7CiAgICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVuY2UgPSBjbGFtcGVk
U2Nyb2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OwogICAgICAgICAgICAgbG9jYWxFeHBvc2VS
ZWN0Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOwogICAgICAgICAgICAgbmV3UmVjdCA9
IExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3Qo
bG9jYWxFeHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOwpAQCAtMjg1
NCw3ICsyMzI5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIG93bmVyRWxl
bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAgICAgICAgICAgICBTY3JpcHREaXNhbGxv
d2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLSAgICAgICAg
ICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVj
dChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICAgICAgICAgICAgICBMYXlvdXRS
ZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJl
YTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCBhYnNvbHV0ZVJlY3Qs
IGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCiAgICAgICAg
ICAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBvaW50KGV4cG9zZVJl
Y3QubG9jYXRpb24oKSkpOwpAQCAtMjg3MCw4ICsyMzQ1LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29s
IGluc2lkCiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZyA9PSBT
aG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1By
b3BhZ2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8q
IGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXll
cigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXll
ci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byogZW5jbG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xh
eWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAv
LyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIHBhcmVu
dCBmcmFtZSdzIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICBuZXdSZWN0ID0gZnJhbWVW
aWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2luZ0ludFJlY3QobmV3
UmVjdCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhN
RTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+IGlzIGluc2lkZSBw
b3NpdGlvbjpmaXhlZC4KQEAgLTI5MjgsMjQgKzI0MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpz
Y3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBp
bnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdSZWN0LCBp
bnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCkuaGFzQ29u
dGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRh
aW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0
IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGlu
ZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGlu
Z0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIo
KSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAg
ICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5n
VXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNl
IHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNj
cm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNjZW5k
YW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAg
ICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBk
YXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9F
eHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGV4
cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25Y
LCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVy
TGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xs
QWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAog
ewogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJWaWV3KCkgJiYgaW5zaWRlRml4ZWQpIHsK
QEAgLTMwMjMsMTE1NSArMjQ4Myw5NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0
VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheQogICAgICAg
ICAvLyBJZiB0aGUgcmVjdCBpcyBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCBkb24ndCBi
b3RoZXIgdHJ5aW5nIHRvIGNlbnRlci4gT3RoZXIgYWxpZ25tZW50cyB3aWxsIHdvcmsuCiAgICAg
ICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFZpc2libGVCZWhhdmlvcihhbGlnblkp
OwogICAgICAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGln
bkNlbnRlcikKLSAgICAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9y
OjpOb1Njcm9sbDsKLSAgICB9IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+IDApCi0gICAgICAg
IC8vIElmIHRoZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVzZSB0aGUgc3BlY2lm
aWVkIHBhcnRpYWwgYmVoYXZpb3IKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6
Z2V0UGFydGlhbEJlaGF2aW9yKGFsaWduWSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxZID0g
U2Nyb2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwotICAgIC8vIElmIHdl
J3JlIHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJl
Y3QgaXMgZnVydGhlciBkb3duCi0gICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3Qg
YmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20u
Ci0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Ns
b3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4
cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgc2Nyb2xs
WSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwotCi0gICAgLy8gR2l2
ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4KLSAgICBMYXlvdXRV
bml0IHk7Ci0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9T
Y3JvbGwpCi0gICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xs
WSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKLSAgICAgICAgeSA9
IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAo
c2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAg
ICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVj
dC5oZWlnaHQoKSkgLyAyOwotICAgIGVsc2UKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwot
Ci0gICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNp
emUoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uSW5XaW5kb3cpCi17Ci0gICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRp
b24gPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0
aW9uSW5XaW5kb3cpOwotICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50
RG9jdW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJl
dmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBT
Y3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmln
aW5TY3JvbGxpbmc6OlllcyB9KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkg
Y29uc3QKLXsKLSAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNh
dXNlIHRoZXkgbmV2ZXIgaGF2ZQotICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0
aGV5IGRvICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbwotICAgIC8vIHdlIHdh
bnQgdG8gYWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgotICAgIHJldHVybiAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRl
cmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0
U2l6ZSYgb2xkT2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwb3NzaWJs
ZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWlu
UmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRl
cmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRp
b25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPwotICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3Rp
bGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0gICAgRWxlbWVudCog
ZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93
bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIERvY3VtZW50JiBk
b2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQot
ICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXcoKS0+d2luZG93VG9Db250ZW50
cyhldnQucG9zaXRpb24oKSk7Ci0gICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50
KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5l
d09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zm
c2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zm
c2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICAKLSAg
ICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAv
IHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIExheW91
dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hy
dW5rVG8oY3VycmVudFNpemUpOwotICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXpp
bmcobWluaW11bVNpemUpOwotICAgIAotICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQg
PSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0Lmhl
aWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNl
dC53aWR0aCgpKTsKLSAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVk
T2xkT2Zmc2V0LndpZHRoKCkpOwotICAgIH0KLSAgICAKLSAgICBMYXlvdXRTaXplIGRpZmZlcmVu
Y2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5k
ZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKLQotICAgIFN0eWxlZEVsZW1lbnQqIHN0
eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50KTsKLSAgICBib29s
IGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94
U2l6aW5nOjpCb3JkZXJCb3g7Ci0KLSAgICBSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxl
KCkucmVzaXplKCk7Ci0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRpY2FsICYmIGRpZmZl
cmVuY2Uud2lkdGgoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
KmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0
aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6
b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVy
ZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAg
ICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgp
IC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVy
QW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9v
bUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgo
KSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVz
aXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlz
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFr
ZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxl
ZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJl
bmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwot
ICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3Rvciwg
Q1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNl
SGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6
IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJh
c2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChi
YXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwot
ICAgIH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJh
ZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVj
ZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zm
c2V0KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsK
LX0KLQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25z
dAotewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRp
b25Sb2xlOjpTY3JvbGxpbmcpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29u
dGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Ny
b2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAg
ICBJbnRTaXplIHNjcm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMo
KSAmJiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNj
cm9sbGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNp
YmxlU2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRp
b24oKSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uu
d2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3Bh
Y2UuaGVpZ2h0KCkpIH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91
bnQoKSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRl
cmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7
Ci0KLSAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3Zl
IHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9
IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJl
YWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3Jv
bGxPZmZzZXQueSgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0
LnkoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZz
ZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAg
ICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhl
aWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8
IDApCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxz
ZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFi
bGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0
aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0
aCgpKSk7Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUo
KTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRS
ZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJl
cigpLmlzQm94KCkpOwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsK
LX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxi
YXJSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAg
cmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5n
VmlldygmcmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJh
ciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3Qg
PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3Jv
bGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50
IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29u
c3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1v
dmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVu
ZGVyZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21D
b250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25z
dCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9S
ZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9s
bGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUg
UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwot
Ci0gICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6
Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgp
LCBzY3JvbGxIZWlnaHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRv
dGFsQ29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRo
aXMtPmNvbnRlbnRzU2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50
c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWln
aHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgp
KSk7Ci0KLSAgICByZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjph
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFz
b24pCi17Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChy
ZWFzb24pOwotCi0gICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpT
Y3JvbGxiYXJzQ2hhbmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVy
KCkpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNo
b3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXRO
ZWVkc0xheW91dCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVu
ZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkK
LXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5j
aHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBS
ZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZp
Y2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlv
biB1cGRhdGVkLgotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21l
Q2xpZW50OjpTY3JvbGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQot
Ci1ib29sIFJlbmRlckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxF
dmVudCgpOwotfQotCi1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5
ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3Jk
ZXIgYm94LgotICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBw
ZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsK
LQotICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+
aGVpZ2h0KCkgOiAwOwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/
IG1fdkJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9
IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxi
YXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJv
b2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xs
YmFyKG1faEJhci5nZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xs
YmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9y
aXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0K
LSAgICBJbnRTaXplIGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikg
ewotICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5l
ciBpcyBzcXVhcmUuCi0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAot
ICAgICAgICB9OwotICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQot
ICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5t
YXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJh
cnNBdm9pZENvcm5lcikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJP
blRoZUxlZnQpCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54
KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0K
LSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25U
aGVMZWZ0KQotICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFy
UmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3Ju
ZXJTaXplLmhlaWdodCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBi
YXJSZWN0OwotICAgIH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5l
clNpemUpIHsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsK
LSAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJT
aXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVy
KCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxi
YXJzQXZvaWRDb3JuZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0
KGNvcm5lclNpemUpOwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3Jv
bGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5z
Y3JvbGxDb3JuZXI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJU
aGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsK
LSAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNr
bmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNv
bnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2Nh
dGlvbigpKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwot
ICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5n
ZXQoKSkgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Ny
b2xsUmVjdCA9IHJlY3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBB
U1NFUlQoYm94KTsKLSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0
cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNj
cm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAg
IGVsc2UKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJh
ci5sb2NhdGlvbigpKTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0
OwotICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAg
IHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkg
ewotICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9s
bENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAg
ICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29s
IHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0
dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigp
KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNj
cm9sbGJhcigpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZv
clNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hh
ZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsK
LSAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVz
ZXJBZ2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5k
ZXJlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQot
UmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0g
ICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBh
Y3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBi
b29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJl
cikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFy
U3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5k
ZXJlcikuZWxlbWVudCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFy
OjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250
cm9sU2l6ZTo6UmVndWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCks
IG9yaWVudGF0aW9uKTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50
cygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0
b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdl
dC5yZWxlYXNlTm9uTnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xs
YmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3Jv
bGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8g
bV9oQmFyIDogbV92QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJl
bW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9s
bGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhh
c1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAg
ICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNp
dHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFu
ZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1
dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6
c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9
IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwot
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhv
cml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ug
b3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0
aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAg
bV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXIt
PnN0eWxlQ2hhbmdlZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3Jv
bGxiYXIpIHsKLSAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xs
YmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNp
dHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3Mo
KS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxF
bGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9s
bGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5k
aWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xs
YmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVh
OjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2Vu
ZGlmCi0gICAgfQotCi0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4g
Y2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVw
ZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAg
ICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBt
X3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4
Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyOwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgp
Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJv
eCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZUFuY2VzdG9yKCkKLXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExh
eWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVy
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5p
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURh
cmtBcHBlYXJhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBw
ZWFyYW5jZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBv
cnQgYmV5b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3Np
bmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVu
ZGVyQm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywg
KmRvd25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0
eWxlKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkg
Y29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0K
LWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAg
IHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Io
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRl
YnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVy
OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAn
eCcsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFz
QmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3Ag
ZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygp
KQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAg
IGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1
aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07
Ci0gICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAo
IW1fdkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwg
KG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGlu
ZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsK
LX0KLQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJh
cgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJh
ci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0K
LUludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4
WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9j
YWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZs
b3dDb250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9z
Y3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0
IEludFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIg
JiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsK
LSAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsK
LSAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7
Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5l
ci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVy
KQotICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQot
aW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRl
ckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRo
IGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsK
LX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VS
VChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAg
ICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3Rl
YWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhl
aWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92
ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JX
cml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwot
fQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93
UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQot
Ci1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3Qo
Ym94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUo
b3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxh
eW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxv
d1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChv
dmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRI
ZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0g
ICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgp
IC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSBy
b3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3Jv
bGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9w
T3ZlcmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAot
ewotICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Ny
b2xsc092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3co
KSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRv
SW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVu
c2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJl
bmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUu
b3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJm
bG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lk
OjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xs
YmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0
b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50
YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFy
T3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0
eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNj
cm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3Zl
cmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUg
c2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBp
ZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNW
ZXJ0aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9s
bGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1f
aEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpv
bnRhbFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFs
T3ZlcmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5k
ZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRF
bmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1
dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBh
ZGRlZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2Vk
ID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29s
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFy
V2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8
fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hv
cml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChi
b3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAg
dXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQo
KTsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJm
bG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
QXV0bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAg
ICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFs
U2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAg
ICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIo
KS5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3go
KSAmJiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4
aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3go
KSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5l
IHN0ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91
bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3Jv
bGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFy
LT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAg
fQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9J
bnQoYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJh
cjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5z
ZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9
Ci0KLSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRo
aXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9u
cykuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3Jv
bGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
ICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2Fz
ZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsK
LSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQg
YW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAg
IC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0
aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9m
ZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0
IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVu
dHJ5IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNz
dWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBv
biB0aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVu
dCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZv
ciBtb3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
Zyh0cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3Jv
bGxPZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZz
ZXQpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNj
cm9sbGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9
IHNjcm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
SW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewot
ICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0
TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0KLSAgICBpZiAo
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RMYXlvdXRD
b21wb3NpdGluZ1VwZGF0ZSgpOwotCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IElu
dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25t
ZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGw7CisgICAgfSBlbHNlIGlmIChpbnRlcnNlY3RIZWlnaHQg
PiAwKQorICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRpYWxseSB2aXNpYmxlLCB1
c2UgdGhlIHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9yCisgICAgICAgIHNjcm9sbFkgPSBTY3Jv
bGxBbGlnbm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihhbGlnblkpOworICAgIGVsc2UKKyAgICAg
ICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsK
KyAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5k
IHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgorICAgIC8vIHRoYW4gdGhlIHZpc2libGVS
ZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0
aCB0aGUgYm90dG9tLgorICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZp
b3I6OkFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFkoKSA+IHZpc2libGVSZWN0
Lm1heFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpCisg
ICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbTsK
IAotICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkg
Y29vcmRpbmF0ZS4KKyAgICBMYXlvdXRVbml0IHk7CisgICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xs
QWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwpCisgICAgICAgIHkgPSB2aXNpYmxlUmVjdC55
KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpB
bGlnbkJvdHRvbSkKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3Qu
aGVpZ2h0KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2
aW9yOjpBbGlnbkNlbnRlcikKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJl
Y3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOworICAgIGVsc2UKKyAgICAg
ICAgeSA9IGV4cG9zZVJlY3QueSgpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBM
YXlvdXRSZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOwogfQogCi1i
b29sIFJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAordm9pZCBSZW5k
ZXJMYXllcjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25JbldpbmRvdykKIHsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMg
YXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAgIEludFBvaW50IGN1
cnJlbnREb2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkud2lu
ZG93VG9Db250ZW50cyhwb3NpdGlvbkluV2luZG93KTsKKyAgICBzY3JvbGxSZWN0VG9WaXNpYmxl
KExheW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUoMSwgMSkpLCBm
YWxzZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxp
Z25Ub0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBT
aG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9v
bCBwYWludGluZ092ZXJsYXlDb250cm9scykKK1N0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNj
cmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBu
byBvdmVyZmxvdy4KLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBpbiBhIHNlY29uZCBw
YXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwgcGFpbnQKLSAgICAv
LyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRp
bmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKLSAgICAvLyB3aWxsIGJlIGZhbHNlLCBh
bmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRoZXJlIGFyZSBvdmVy
bGF5IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxs
IGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHRvIHJ1biwKLSAg
ICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4gdGhlIG1lYW50aW1l
LCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0gICAgLy8gc2Vjb25kIHBhc3MgZG9lc24n
dCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KLSAgICBp
ZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsK
LSAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0K
LSAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0
aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KLSAgICAgICAgaWYgKChtX2hCYXIgJiYg
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSW50UmVjdCBs
b2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVC
eSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RS
ZWN0KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZW5k
ZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAg
ICAgICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRl
cmVyKCkudmlldygpLmxheWVyKCk7Ci0KLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBD
U1Mgc2Nyb2xsYmFycyB0d2ljZS4KLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYg
IWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFBvaW50
IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKLSAgICBpZiAocGFpbnRpbmdPdmVy
bGF5Q29udHJvbHMpCi0gICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJs
YXlTY3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBp
ZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcg
bGF5b3V0LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxh
eW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0
aGF0Ci0gICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0K
LSAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmln
aHQgcGxhY2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVj
dCk7Ci0gICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAg
ICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotCi0gICAgaWYgKGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0
aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwg
Y29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVu
IGFsbCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWlu
dFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsK
LSAgICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRv
cCBvZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0
ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxh
eWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKLXsKLSAgICBJ
bnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlQnko
cGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQot
ICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29u
dHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKIAotICAgIGlmIChtX3Nj
cm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250
ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBt
b2RlIl9zKTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2Ug
aGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hh
dCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAg
ICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNS
ZWN0KTsKLX0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6ZHJhd1Bs
YXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3Ju
ZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYo
KSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsK
LSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwot
ICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVz
KCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVh
a1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxv
UmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXpl
KCk7CisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIC8vIE9oIGZvciBiZXR0ZXIg
U3RyaW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgorICAgICAgICBUZXh0U3RyZWFt
IHN0cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgIGNvbnRleHQu
c2F2ZSgpOwotICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkg
KyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNp
emVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKLSAg
ICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Ci0gICAgICAgIGlmIChy
ZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVD
b3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsK
LSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0
UmVjdCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXpl
ckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJS
ZXNpemVyU2l6ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
LSAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7Cisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQorTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6
ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFp
bnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJv
bFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXIt
PnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250
ZXh0LCByZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSBy
ZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2Vu
dC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRn
ZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1f
dkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsK
LSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAg
ICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSAr
IDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1Jl
Y3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlv
dXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dS
ZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXll
cjo6aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAogewotICAgIGlmICgh
Y2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpOworICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94
LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3Zl
cmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAotYm9vbCBS
ZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93TGVmdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2Fu
UmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0g
ICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAg
ICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0
IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4K
LSAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rpbmco
KSkgewotICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQ
b2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1f
aEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAg
ICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGlu
Z01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKIH0KIAot
Ym9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorTGF5b3V0VW5pdCBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9k
ZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiB2
b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91dFNpemUmIHN1YnBpeGVsT2Zmc2V0LCBP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUGFpbnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4dCogZXZl
bnRSZWdpb25Db250ZXh0KQpAQCAtNDE4OSwxNyArMjU5MSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCwKICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAK
LXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRC
ZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQot
ewotICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3Np
bmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRy
ZWVQYWludFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWlu
dExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7Ci0KLSAgICBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpj
bGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIHBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3Is
IGNvbnN0IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVyUmFkaXVzQ2xpcHBpbmdSdWxlIHJ1bGUp
CiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTQyMjIsNyArMjYxMyw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYKICAgICAgICAgLy8gYW55IGxheWVycyB3aXRoIG92ZXJmbG93LiBUaGUgY29uZGl0
aW9uIGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNlIGNsaXBzIGlzIHRoYXQgdGhlIG92ZXJm
bG93IG9iamVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8gY29udGFpbmluZyBibG9jayBjaGFpbiBz
byB3ZSBjaGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGxheWVyID0g
cnVsZSA9PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyA/IHRoaXMgOiBwYXJlbnQoKTsgbGF5
ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFpbnRCZWhh
dmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250
ZW50KSAmJiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIGlm
IChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxv
d1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSAmJiBsYXllci0+c2Ny
b2xsYWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmhh
c092ZXJmbG93Q2xpcCgpICYmIGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFk
aXVzKCkgJiYgYW5jZXN0b3JMYXllcklzSW5Db250YWluaW5nQmxvY2tDaGFpbigqbGF5ZXIpKSB7
CkBAIC00NDI0LDcgKzI4MTUsOCBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhl
bFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wmCiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6YXRpb24g
Zm9yIG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9zZQogICAg
IC8vIHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KLSAgICBib29sIGNvbnRlbnRzU2Ny
b2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgp
KTsKKyAgICBib29sIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0gIXNjcm9sbGFibGVM
YXllcigpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
KyAgICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpICYmIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nKSB8fCAocmVuZGVyZXIo
KS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBib29sIGlzWm9vbWluZyA9ICFwYWdlKCku
Y2hyb21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCk7CiAgICAgaWYgKHNj
cm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgfHwgaXNab29t
aW5nKSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMgPSBjb250ZXh0LnNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cygpOwpAQCAtNDcxOSw4ICszMTExLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJy
ZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9s
bGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhs
YXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAg
ICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAm
JiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdt
ZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogICAgICAgICBpZiAo
ZmlsdGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQgY29sbGVjdEZy
YWdtZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRvIHJlcHJlc2Vu
dCB0aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxODgsMTggKzM1ODAsNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0Nv
bnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQ
YWludGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJh
Z21lbnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2Nh
bFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgICAgIHBh
aW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2lu
dChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSAr
IGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAgICAgICBzbmFwcGVk
SW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAg
cmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91
bmRSZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RFdmVudFJlZ2lv
bkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRp
bmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikKIHsKICAgICBB
U1NFUlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsKQEAgLTUyMzMsNyAr
MzYxMyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAgICBhYnNvbHV0
ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRU
ZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNp
ZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhp
dFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU0NjQsOSArMzg0NCwxMSBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9v
dExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9v
dExheWVyKSk7CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50OwotICAgIGlmIChjYW5SZXNp
emUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0
TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOwotICAgICAgICByZXR1cm4gdGhpczsKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAg
ICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVy
LT5oaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRp
b24sIGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2Ug
cG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5ZXIuIENoZWNr
CkBAIC01NTM5LDM1ICszOTIxLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRz
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29u
c3QKLXsKLSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFn
bWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYg
cmVzaXplclJlY3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVm
dCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1p
blhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNp
emVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAg
ICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1h
eFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVy
biBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21C
b3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0g
ICAgfTsKLQotICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVy
RnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNv
cm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwg
cmVjdHMucmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRl
cnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5z
KGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5G
cmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVu
dC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJl
Y3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwg
Y29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6
T2Zmc2V0KQogewpAQCAtNjAwOCwzNiArNDM2MSw2IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6
OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAgICAgcmV0dXJu
IGNsaXBSZWN0OwogfQogCi12b2lkIFJlbmRlckxheWVyOjphZGRCbG9ja1NlbGVjdGlvbkdhcHNC
b3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQotewotICAgIG1fYmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKLXsKLSAgICBtX2Jsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKLSAgICBmb3IgKFJlbmRlckxheWVyKiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGNoaWxkLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKLXsKLSAgICBmb3Ig
KFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KCk7Ci0KLSAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
Ci0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSku
b3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdp
b25zIG5vdCBhY2NvdW50ZWQgZm9yLgotICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKLSAg
ICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlw
UmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2Nv
dW50ZWQgZm9yLgotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlbmRlcmVyKCku
cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0
c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91
dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgY2FjaGVk
Qm91bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBh
bmQgdGhlIHJvb3QuCkBAIC02MzM0LDIxICs0NjU3LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFz
Q29tcG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVybiBtX2JhY2tpbmcgJiYgbV9iYWNraW5n
LT5oYXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/
IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQot
Ci1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5
ZXI6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5n
ID8gbV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKLX0KLQogYm9v
bCBSZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9ybShPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4gcGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBib29sIHBhaW50c1RvV2luZG93ID0gIWlz
Q29tcG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRzSW50b1dpbmRvdygpOwpAQCAtNjM3OSwx
MSArNDY4Nyw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9u
U2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIE9wCiAgICAgcmV0dXJuIHBhaW50Rmxh
Z3MuY29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBo
YXNlKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3Vu
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRJc0tub3du
VG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAg
ICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVz
Y2VuZGFudCgpKQpAQCAtNjUwNyw4ICs0ODEwLDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3Vs
ZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXNOb3JtYWxGbG93T25seSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFy
cygpCi0gICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKQorICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgIGJvb2wgaGFzT3Zl
cmxheVNjcm9sbGJhcnMgPSBzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNP
dmVybGF5U2Nyb2xsYmFycygpOworICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyA9
IHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKTsKKworICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycworICAgICAgICB8fCBj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNUYWJsZVJv
dygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAgICB8fCByZW5kZXJl
cigpLmlzVmlkZW8oKQpAQCAtNjYyNSw3ICs0OTMyLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFz
VmlzaWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCk7CisgICAgcmV0
dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IChzY3JvbGxhYmxl
TGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0K
IAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVx
dWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2MzUsNyArNDk0Miw3IEBAIGJvb2wgUmVuZGVyTGF5
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNv
bnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCku
b3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5p
c1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHJl
bmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3Jv
bGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJl
cXVlc3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY2MCwzOCArNDk2Nyw2IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVl
c3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMo
KnJlcXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZs
b3cgYXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMg
aGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRv
IGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCku
b3ZlcmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJm
bG93WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFy
IHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9s
bGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpv
bnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBI
b3Jpem9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0g
Ym94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5
bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxi
YXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3Jv
bGxiYXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNj
cm9sbGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9s
bGJhcik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xs
YmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVu
IHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChz
ZWUgYnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJh
ciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRF
bmFibGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFy
ICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
ICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVu
YWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAg
ICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVy
TGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQogewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxG
bG93T25seSgpKTsKQEAgLTY3MTQsNiArNDk4OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxl
Q2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
CiAKICAgICAvLyBGSVhNRTogUmVuZGVyTGF5ZXIgYWxyZWFkeSBoYW5kbGVzIHZpc2liaWxpdHkg
Y2hhbmdlcyB0aHJvdWdoIG91ciB2aXNpYmlsaXR5IGRpcnR5IGJpdHMuIFRoaXMgbG9naWMgY291
bGQKICAgICAvLyBsaWtlbHkgYmUgZm9sZGVkIGFsb25nIHdpdGggdGhlIHJlc3QuCisgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgaWYgKG9s
ZFN0eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBvbGRTdHlsZS0+dmlz
aWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7CiAgICAgICAgIGlm
IChvbGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS51c2VkWkluZGV4
KCkgfHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjMsMTggKzQ5OTksMTUgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMg
aW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJp
bGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgc2Nyb2xsYWJsZUxh
eWVyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJlcigpLmlzSFRNTE1h
cnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVl
ZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAgICAgICBpZiAoIW1f
bWFycXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVl
ZT4odGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7Ci0gICAg
fSBlbHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7CisgICAg
aWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmNyZWF0ZU9y
RGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KIAotICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAvLyBPdmVybGF5IHNj
cm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAg
ICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0
ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NDcsMTUgKzUwMjAsMTIg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9y
ZWZsZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7CiAgICAgfQotICAg
IAotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0
aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9oQmFyKQotICAgICAg
ICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJh
ci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsK
LSAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpIHsK
KyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHlsZSgpOworICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHNj
cm9sbGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQogCiAgICAgdXBkYXRl
RGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02
Nzc2LDk4ICs1MDQ2LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93
KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJs
ZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0g
ZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0
VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRv
SGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBp
c1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAg
IAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29u
dGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkg
ewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAg
ICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAg
ICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRk
ZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAg
ICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAg
IGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAg
ICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVy
IGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0g
ICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2
ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJ
QUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRl
cmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIg
PSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5k
ZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAg
Y2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNv
cm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBv
ZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJl
cigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0g
ZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAo
IW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNl
dFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVu
dCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAg
ICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVu
ZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0
dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewot
ICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRl
clNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikp
OwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMg
cGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAg
ICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
cmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0g
bnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIo
KSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVy
KCkgOiBudWxscHRyOwpAQCAtNjk5OSw3ICs1MTc3LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBw
YXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChh
dXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAot
ICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4g
bGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVy
Ojppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03MjQ1LDEx
ICs1NDIzLDEzIEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKFRl
eHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBzdHJlYW0gPDwgIiAi
OwogCi0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7Ci0gICAgc3RyZWFt
IDw8ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOwor
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkg
eworICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLT5ib3hTY3JvbGxpbmdTY29wZSgp
OworICAgICAgICBzdHJlYW0gPDwgIiAiOworICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxh
eWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBzdHJlYW0gPDwgIiAiOworICAg
ICAgICBzdHJlYW0gPDwgIiAiOworICAgIH0KIAogICAgIG91dHB1dElkZW50KHN0cmVhbSwgZGVw
dGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGQ4MzczYWFl
ODE5ZDRlYjk5ZDZiMjdkY2NlNWVlZTA5NGZlZTliZjQuLmZlYWI5MWIzYjc5NjM5OTVjNjMxZTcx
MTIyZWQzZDVkOTc0YjhlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyUHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTQwLDIwICsxMzksMjggQEAgc3RydWN0IFNj
cm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKICAgICBTY3JvbGxCZWhhdmlvciBiZWhhdmlvciB7
IFNjcm9sbEJlaGF2aW9yOjpBdXRvIH07CiB9OwogCi11c2luZyBTY3JvbGxpbmdTY29wZSA9IHVp
bnQ2NF90OwotCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJM
YXllcik7Ci1jbGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7
CitjbGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4g
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRl
ckxheWVyKTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBm
cmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJM
YXllckJhY2tpbmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOworCisgICAgZW51bSBjbGFzcyBM
YXllclR5cGUgeworICAgICAgICBTdGF0aWMsCisgICAgICAgIFNjcm9sbGFibGUKKyAgICB9Owog
CiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAg
IHZpcnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBMYXllclR5cGUgbGF5ZXJUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclR5cGU7IH0KKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIHNj
cm9sbGFibGVMYXllcigpOworICAgIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xs
YWJsZUxheWVyKCkgY29uc3Q7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIENh
bGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51bGxl
ZCBvdXQuCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTIyMyw2ICsyMzAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoYm9vbCBmbGFnKSB7
IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQogI2VuZGlmCiAKK3Byb3RlY3Rl
ZDoKKyAgICBSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiwgTGF5ZXJUeXBlKTsK
KwogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBmbGFncyBwcm9wYWdhdGUgaW4gcGFpbnQgb3JkZXIg
KHotb3JkZXIgdHJlZSkuCiAgICAgZW51bSBjbGFzcyBDb21wb3NpdGluZyB7CkBAIC00MTEsOCAr
NDIxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNl
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSogbWFy
cXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBpc1Nl
bGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9
CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDExMyArNDQx
LDE0IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIExh
eW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxlU2l6
ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7
Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwot
Ci0gICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgaW50IHNjcm9sbEhlaWdodCgpIGNv
bnN0OwotCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQot
ICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWly
IG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBk
ZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJv
b2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Ny
b2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09m
ZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3Jv
bGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLQotICAgIHZvaWQgc2Nyb2xsVG9Y
UG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2
b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xs
OjpObyk7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYs
IFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFu
aW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLQotICAgIC8vIFRoZXNlIGFyZSBv
bmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBz
Y3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZv
aWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBl
bmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgotICAgIC8vIEZJWE1FOiBUaGlzIGNh
biByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2Fu
dCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCi0gICAgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRh
cmllcykgY29uc3Q7Ci0KLSAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlz
IGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zp
c2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBj
b25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgYm9vbCBzY3JvbGxzT3Zl
cmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3co
KSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJh
cjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lk
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3Jv
bGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9v
bCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFy
KCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25z
dCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0
IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9z
aXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0
aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJs
ZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29s
IGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURhcmtB
cHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAg
ICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wgcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24g
PSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWly
ZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0YXJ0
U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lk
IGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIHRydWUg
d2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29r
IGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KLSAgICBi
b29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRy
dWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBs
YXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93OyB9CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBp
bnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wgaGFzT3Zl
cmZsb3dDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJ
bnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRy
b2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7Ci0gICAgSW50
U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBj
b25zdDsKLQotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGlu
Z092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgdm9pZCBh
dXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKLSAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0
OwotICAgIHZvaWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExheW91
dFNpemUmKTsKLSAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNp
emVNb2RlOyB9Ci0gICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVN
b2RlID0gYjsgfQotCiAgICAgYm9vbCBpc1JlbmRlclZpZXdMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1faXNSZW5kZXJWaWV3TGF5ZXI7IH0KICAgICBib29sIGlzRm9yY2VkU3RhY2tpbmdDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZWRTdGFja2luZ0NvbnRleHQ7IH0KICAgICBib29sIGlz
T3Bwb3J0dW5pc3RpY1N0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNPcHBvcnR1
bmlzdGljU3RhY2tpbmdDb250ZXh0OyB9CkBAIC01NTUsOSArNDY0LDYgQEAgcHVibGljOgogICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7CiAgICAgdm9pZCB1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUs
IGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJE
b2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5ZXJJbkVuY2xvc2lu
Z1BhZ2luYXRpb25DaGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlvbkluY2x1c2lvbk1v
ZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVkZUNvbXBvc2l0ZWRQ
YWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxh
eWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC01NzksMTAgKzQ4NSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMo
Q2xpcFJlY3RzVHlwZSB0eXBlVG9DbGVhciA9IEFsbENsaXBSZWN0VHlwZXMpOwogICAgIHZvaWQg
Y2xlYXJDbGlwUmVjdHMoQ2xpcFJlY3RzVHlwZSB0eXBlVG9DbGVhciA9IEFsbENsaXBSZWN0VHlw
ZXMpOwogCi0gICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0
UmVjdCYpOwotICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKLSAgICB2
b2lkIHJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLQogICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgQVNTRVJUKCFtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkpIGhlcmUsIGJ1dCBzZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDQ0CiAgICAgLy8gZGl0dG8g
Zm9yIGhhc1Zpc2libGVEZXNjZW5kYW50KCksIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzEyNzcKICAgICBib29sIGhhc1Zpc2libGVDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNWaXNpYmxlQ29udGVudDsgfQpAQCAtNjM3LDYgKzUzOSw4IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlv
blR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29u
dGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUg
bGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJl
IGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNv
bnN0OwpAQCAtNjk4LDcgKzYwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsg
fSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6
OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0
VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhp
dFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRU
ZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBz
dHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3Qg
UmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwg
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dD
bGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODQs
MTEgKzY4Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExh
eW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9
CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsg
bV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7
IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5v
dGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4u
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTgsMjAgKzc1Niw5IEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhi
b29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhp
Y3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wg
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3lu
Y1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNl
c3RvcjsgfQogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wg
aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGlu
Z0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKLSAgICAvLyBM
YXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBj
b21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KLSAgICBP
cHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVy
biBtX2JveFNjcm9sbGluZ1Njb3BlOyB9Ci0gICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5n
U2NvcGU7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aFRyYW5zcGFyZW5jeShPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAo
aXNUcmFuc3BhcmVudCgpIHx8IGhhc0JsZW5kTW9kZSgpIHx8IChpc29sYXRlc0JsZW5kaW5nKCkg
JiYgIXJlbmRlcmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSkgJiYgKChwYWludEJl
aGF2aW9yICYgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKSB8fCAhaXND
b21wb3NpdGVkKCkpOwpAQCAtODg1LDExICs3NzIsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHF1
ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgYm9vbCBiYWNrZ3Jv
dW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0g
ICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAgICBib29s
IGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0
aEZpbHRlcnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JGaWx0
ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOCw4ICs4MDAsNiBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJM
YXllciogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNvbnN0OwogCi0gICAgYm9v
bCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCk7IH0KLQogICAgIHZvaWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCkgeyBTaW5nbGVQYWlu
dEZyZXF1ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIgfTsgfQogICAgIGJv
b2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRy
YWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzgxMCw3IEBAIHB1Ymxp
YzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQs
IFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29s
IGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAK
LSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArODkwLDYg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAg
IHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAg
ICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFp
bnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWlu
dEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDMwLDE2ICs5MDcsNiBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCos
IE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKIAotICAgIGVudW0gVXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewotICAgICAgICBJc092ZXJmbG93U2Nyb2xs
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIEhhc1NlZW5WaWV3cG9y
dENvbnN0cmFpbmVkQW5jZXN0b3IgICAgICA9IDEgPDwgMSwKLSAgICAgICAgSGFzU2VlbkFuY2Vz
dG9yV2l0aE92ZXJmbG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBIYXNDaGFuZ2Vk
QW5jZXN0b3IgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB2b2lk
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRp
b25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKLQotICAg
IFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25z
dDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUo
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNv
bnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA3Miw3ICs5MzksNiBAQCBw
cml2YXRlOgogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5
UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5k
ZXJlcik7CiAgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFp
bnRQaGFzZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0
KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBw
YWludGluZ1Jvb3RGb3JSZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNG
b3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYpOwogICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGlu
Z0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdS
b290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZyYWdt
ZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBh
aW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50VHJhbnNmb3JtZWRMYXllcklu
dG9GcmFnbWVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBP
cHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KTsKQEAgLTEwOTksNjQgKzk2NSwxNCBAQCBwcml2YXRl
OgogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RDb250
ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0
ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNpemVy
SW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
LCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXllciog
aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVy
LCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVs
bHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3Jv
dW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5b3V0
UmVjdCYpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAg
IHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAgIGJv
b2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92
ZXJmbG93KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0
OwogCiAgICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7Ci0KLSAgICAv
LyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0FjdGl2
ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0gICAg
SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5h
bDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHNl
dFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxpbmdO
b2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZpc2li
bGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFy
cywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUg
b3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxF
dmVudCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlv
bnMoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3go
Ym9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJz
T25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBj
b25zdCBmaW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBT
dHJpbmcmKSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAg
IHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgIHZv
aWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYK
LQotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlk
ZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xs
VG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNj
cm9sbGJhciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQo
Ym9vbCBoYXNPdmVyZmxvdyk7Ci0gICAgCiAgICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xsKCkg
Y29uc3Q7CiAKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50U3Rh
dHVzKCk7CkBAIC0xMTk2LDE0ICsxMDEyLDYgQEAgcHJpdmF0ZToKICAgICAvLyBDb252ZXJ0IGEg
cG9pbnQgaW4gYWJzb2x1dGUgY29vcmRzIGludG8gbGF5ZXIgY29vcmRzLCB0YWtpbmcgdHJhbnNm
b3JtcyBpbnRvIGFjY291bnQKICAgICBMYXlvdXRQb2ludCBhYnNvbHV0ZVRvQ29udGVudHMoY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0NvbnRy
b2xzKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
Ci0gICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIHZvaWQgdXBkYXRlUmVzaXplclN0
eWxlKCk7Ci0gICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3Jt
UmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJD
b3JuZXJSZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlUGFnaW5hdGlvbigpOwogCiAgICAgdm9pZCBz
ZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBiKSAgeyBtX2hhc0NvbXBvc2l0aW5nRGVz
Y2VuZGFudCA9IGI7IH0KQEAgLTEyMTcsMjAgKzEwMjUsNyBAQCBwcml2YXRlOgogICAgIExheW91
dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0
KCkgY29uc3Q7CiAKLSAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewotICAgICAgICBJ
bnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgICAgIEludFJlY3QgdmVydGljYWxTY3Jv
bGxiYXI7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyOwotICAgICAgICBJbnRSZWN0IHJl
c2l6ZXI7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyLmlzRW1wdHkoKSA/
IHNjcm9sbENvcm5lciA6IHJlc2l6ZXI7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIE92ZXJmbG93
Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OwotCi0gICAgYm9vbCBv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNv
bnN0OwotCisgICAgTGF5ZXJUeXBlIG1fbGF5ZXJUeXBlOwogICAgIE9wdGlvblNldDxDb21wb3Np
dGluZz4gbV9jb21wb3NpdGluZ0RpcnR5Qml0czsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1JlbmRl
clZpZXdMYXllciA6IDE7CkBAIC0xMjQ0LDEwICsxMDM5LDYgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fbm9ybWFsRmxvd0xpc3REaXJ0eTogMTsKICAgICBib29sIG1faGFkTmVnYXRpdmVaT3JkZXJM
aXN0IDogMTsKIAotICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1
cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBzdGFydCBh
bmQgc3RvcC4KLSAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKLQotICAgIGJvb2wgbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV9pc1NlbGZQYWludGluZ0xheWVyIDog
MTsKIAogICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGluZyBkZXNjZW5kYW50cywgd2UgZG9u
J3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcgcGFpbnRpbmcuIFRoaXMgY2FuIGxl
YWQgdG8KQEAgLTEyNTksMTQgKzEwNTAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50aW5nIHRoaXMgbGF5ZXIgb3IgYW55
IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0
aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlmIHdlIGFyZSBwYWludGluZyBpbnNp
ZGUgYSByZXBsaWNhLgotICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQgOiAxOwogICAgIHVu
c2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFpbnRTdGF0dXMKIAogICAgIGJvb2wg
bV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZUNv
bnRlbnQgOiAxOwogICAgIGJvb2wgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5IDogMTsK
ICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgOiAxOwotICAgIGJvb2wgbV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwogICAgIGJvb2wgbV9pc0ZpeGVkSW50ZXJzZWN0aW5nVmll
d3BvcnQgOiAxOwogICAgIGJvb2wgbV9iZWhhdmVzQXNGaXhlZCA6IDE7CiAKQEAgLTEyODcsMTcg
KzEwNzYsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGluZ1Jl
YXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBtX3Zp
ZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRDb25z
dHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0j
aWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3JlcXVp
cmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlzdE11
dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzgsMjUgKzExMTYsOCBAQCBwcml2YXRl
OgogICAgIC8vIFRoZSBsYXllcidzIHdpZHRoL2hlaWdodAogICAgIEludFNpemUgbV9sYXllclNp
emU7CiAKLSAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOwotICAgIE9wdGlvbmFs
PFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsKLQotICAgIC8vIFRo
ZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCi0gICAgSW50U2l6ZSBtX3Njcm9s
bFNpemU7Ci0KLSAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWly
IG9mIHNjcm9sbGJhcnMuCi0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOwotICAgIFJlZlB0
cjxTY3JvbGxiYXI+IG1fdkJhcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxDbGlwUmVjdHNDYWNo
ZT4gbV9jbGlwUmVjdHNDYWNoZTsKICAgICAKLSAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlT
Y3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxN
YXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7Ci0g
ICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xs
aW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCi0g
ICAgCiAgICAgLy8gQ2FjaGVkIG5vcm1hbCBmbG93IHZhbHVlcyBmb3IgYWJzb2x1dGUgcG9zaXRp
b25lZCBlbGVtZW50cyB3aXRoIHN0YXRpYyBsZWZ0L3RvcCB2YWx1ZXMuCiAgICAgTGF5b3V0VW5p
dCBtX3N0YXRpY0lubGluZVBvc2l0aW9uOwogICAgIExheW91dFVuaXQgbV9zdGF0aWNCbG9ja1Bv
c2l0aW9uOwpAQCAtMTM2NiwxMCArMTEyNyw2IEBAIHByaXZhdGU6CiAgICAgLy8gTWF5IHVsdGlt
YXRlbHkgYmUgZXh0ZW5kZWQgdG8gbWFueSByZXBsaWNhcyAod2l0aCB0aGVpciBvd24gcGFpbnQg
b3JkZXIpLgogICAgIFJlbmRlclB0cjxSZW5kZXJSZXBsaWNhPiBtX3JlZmxlY3Rpb247CiAKLSAg
ICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6
ZXIuCi0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOwot
ICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7Ci0KICAgICAvLyBQ
b2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8gYmUg
cGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3QgcGFnaW5hdGVkLgogICAgIFdlYWtQdHI8
UmVuZGVyTGF5ZXI+IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDUxOWQzNjEwNzgw
OGUzNjJmN2MwNDBmNDI3OGM4ODNhMmYzOTA2MWUuLmNkZjlhOWE2ZGQ0YjU1MGFjYzIxZDUyNmE0
MDJhODg1MWNlYTViMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC01MywxMyArNTMsMTQgQEAKICNpbmNsdWRlICJQZXJmb3JtYW5j
ZUxvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFn
bWVudGVkRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJS
ZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWEu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAg
LTI2OSw3ICsyNzAsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6d2lsbEJlRGVzdHJveWVk
KCkKICNlbmRpZgogCiAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuYmFja2luZygpID09IHRoaXMp
OwotICAgIGNvbXBvc2l0b3IoKS5yZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMobV9v
d25pbmdMYXllcik7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIGNvbXBvc2l0b3IoKS5yZW1vdmVGcm9tU2Ny
b2xsQ29vcmRpbmF0ZWRMYXllcnMoKnNjcm9sbGFibGVMYXllcik7CiAKICAgICBjbGVhckJhY2tp
bmdTaGFyaW5nTGF5ZXJzKCk7CiB9CkBAIC00MjEsMTEgKzQyMywxMSBAQCBzdGF0aWMgVGlsZWRC
YWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2Uo
Y29uc3QgUmVuZAogCiAgICAgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgdGlsZUNvdmVyYWdl
ID0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZpc2libGVBcmVhOwogICAgIGJvb2wgdXNlTWlu
aW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSA9IGZyYW1lVmlldy5pbkxpdmVSZXNpemUoKTsKLSAg
ICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUpIHsKLSAgICAgICAgaWYgKGxh
eWVyLmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICBpZiAoIXVzZU1pbmlt
YWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgJiYgbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAg
ICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkpCiAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpD
b3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CiAKLSAgICAgICAgaWYgKGxheWVyLmhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXllci5zY3JvbGxhYmxl
TGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRp
bGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmVydGljYWxTY3JvbGxpbmc7
CiAgICAgfQogICAgIHJldHVybiB0aWxlQ292ZXJhZ2U7CkBAIC0xMjMyLDggKzEyMzQsMTAgQEAg
TGF5b3V0UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVy
UmVjdChjb25zdCBSZW5kZXJMYXllcioKICAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCBhbmNl
c3RvckNvbXBvc2l0ZWRCb3VuZHMgPSBhbmNlc3RvckJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMo
KTsKICAgICAgICAgTGF5b3V0UmVjdCBzY3JvbGxDb250YWluZXJCb3ggPSBzY3JvbGxDb250YWlu
ZXJMYXllckJveChhbmNlc3RvclJlbmRlckJveCk7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBzY3Jv
bGxPZmZzZXQgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbE9mZnNldCgpOwotICAgICAgICBw
YXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IExheW91dFJlY3QoKHNjcm9sbENvbnRhaW5lckJveC5s
b2NhdGlvbigpIC0gdG9MYXlvdXRTaXplKGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5sb2NhdGlv
bigpKSAtIHRvTGF5b3V0U2l6ZShzY3JvbGxPZmZzZXQpKSwgc2Nyb2xsQ29udGFpbmVyQm94LnNp
emUoKSk7CisgICAgICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoY29t
cG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbE9m
ZnNldCA9IHRvTGF5b3V0U2l6ZShjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVMYXllcigp
LT5zY3JvbGxPZmZzZXQoKSk7CisgICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5
b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5j
ZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gc2Nyb2xsT2Zmc2V0KSwgc2Nyb2xs
Q29udGFpbmVyQm94LnNpemUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHBhcmVudEdyYXBoaWNz
TGF5ZXJSZWN0OwpAQCAtMTI4NSw3ICsxMjg5LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAg
ICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xh
eWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNPdmVy
Zmxvd1Njcm9sbCkgewotICAgICAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQg
PSBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgICAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRy
eS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCk7CiAKICAgICAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmln
aW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBsYXN0Q2xpcExheWVyUmVjdC5tb3Zl
QnkoLXNjcm9sbE9mZnNldCk7CkBAIC0xMzkwLDcgKzEzOTUsOSBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNl
c3RvcikKICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHBhcmVudExheWVyQm91bmRzLmxv
Y2F0aW9uKCkpKTsKICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0U2l6ZShyb3Vu
ZGVkSW50U2l6ZShMYXlvdXRTaXplKHNjcm9sbENvbnRhaW5lckJveC53aWR0aCgpLCBzY3JvbGxD
b250YWluZXJCb3guaGVpZ2h0KCkpKSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9m
ZnNldCA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgICAgIEFT
U0VSVChzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0
ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgdXBkYXRlU2Nyb2xs
T2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAKICAgICAgICAgRmxvYXRTaXplIG9sZFNjcm9sbGluZ0xh
eWVyT2Zmc2V0ID0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7
CkBAIC0xNDA0LDcgKzE0MTEsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2Vv
bWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKIAogICAgICAgICBi
b29sIHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkID0gb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgIT0g
bV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CiAKLSAgICAgICAg
SW50U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdM
YXllci5zY3JvbGxIZWlnaHQoKSk7CisgICAgICAgIEludFNpemUgc2Nyb2xsU2l6ZShzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0KCkp
OwogICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPSBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2l6
ZSgpIHx8IHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkKQogICAgICAgICAgICAgbV9zY3JvbGxlZENv
bnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCkBAIC0xNDg5LDE0ICsxNDk2LDE4IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhT
Y3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVTY3JvbGxPZmZzZXQoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCkKIHsKLSAgICBpZiAobV9v
d25pbmdMYXllci5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIHsKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigp
OworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
c2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIp
IHsKICAgICAgICAgLy8gSWYgc2Nyb2xsaW5nIGlzIGhhcHBlbmluZyBleHRlcm5hbGx5LCB3ZSBk
b24ndCB3YW50IHRvIHRvdWNoIHRoZSBsYXllciBib3VuZHMgb3JpZ2luIGhlcmUgYmVjYXVzZSB0
aGF0IHdpbGwgY2F1c2Ugaml0dGVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250
ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMpOwot
ICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbih0cnVlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91bmRzIG9y
aWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBzdWJsYXll
ci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBT
Y3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBtX293bmluZ0xheWVy
LnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CisgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGZhbHNlKTsKICAgICB9CiAKICAgICBBU1NFUlQobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnBv
c2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAtMTkxMSwxMiArMTkyMiwxNiBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzSG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9s
bGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKCFtX293
bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxhYmxl
TGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9s
bGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhciht
X293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKIH0K
IAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBj
b25zdApAQCAtMTkyNCwxMiArMTkzOSwxNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVx
dWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CiAgICAgaWYgKCFpczxSZW5kZXJCb3g+KG1f
b3duaW5nTGF5ZXIucmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1
dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Ny
b2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFi
bGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVj
dCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVydGljYWxT
Y3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVy
dGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAg
ICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNh
bFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAg
IHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKQEAgLTE5
NjUsMTAgKzE5ODQsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93
Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBsYXllcnNDaGFu
Z2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIsIG5lZWRz
U2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBpZiAoYXV0
byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3JvbGxpbmdD
b29yZGluYXRvcigpKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVM
YXllcigpKTsKKwogICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkK
LSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIEhvcml6b250YWxTY3JvbGxiYXIpOworICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCksIEhvcml6b250YWxT
Y3JvbGxiYXIpOwogICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCi0g
ICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJM
YXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAg
ICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRp
ZENoYW5nZSgqbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSwgVmVydGljYWxTY3JvbGxi
YXIpOwogICAgIH0KIAogICAgIHJldHVybiBsYXllcnNDaGFuZ2VkOwpAQCAtMTk3Niw3ICsxOTk3
LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXll
cnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmluZ0xh
eWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyIHx8ICFz
Y3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGJhcnMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gRklYTUU6IFNob3VsZCBkbyBkZXZpY2UtcGl4ZWwgc25hcHBpbmcuCkBAIC0xOTk4LDE2ICsy
MDIwLDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHNMYXllcnMoKQogICAgIH07CiAKICAgICAvLyBUaGVzZSByZWN0cyBhcmUgcmVsYXRpdmUgdG8g
dGhlIGJvcmRlckJveFJlY3QuCi0gICAgYXV0byByZWN0cyA9IG1fb3duaW5nTGF5ZXIub3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+b3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCps
YXllciwgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0KTsKLSAgICAg
ICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxi
YXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFs
YXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xs
YmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0
KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5
ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkg
JiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAgICBpZiAoYXV0byog
bGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CkBAIC0yMTY1LDcgKzIxODcsOCBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNT
Y3JvbGxpbmdMYXllcnMpCiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXRBbmNo
b3JQb2ludCh7IH0pOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5hZGRDaGlsZCgq
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbXBvc2l0
b3IoKS53aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhtX293bmluZ0xheWVyLCAq
dGhpcyk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsK
KyAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KCptX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLCAqdGhpcyk7CiAKICAgICAgICAgd2ls
bERlc3Ryb3lMYXllcihtX3Njcm9sbENvbnRhaW5lckxheWVyLmdldCgpKTsKICAgICAgICAgd2ls
bERlc3Ryb3lMYXllcihtX3Njcm9sbGVkQ29udGVudHNMYXllci5nZXQoKSk7CkBAIC0yMTc0LDkg
KzIxOTcsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVy
cyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQogICAgICAgICBHcmFwaGljc0xheWVyOjp1bnBh
cmVudEFuZENsZWFyKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyKTsKICAgICB9CiAKLSAgICBpZiAo
bV9zY3JvbGxDb250YWluZXJMYXllcikKLSAgICAgICAgY29tcG9zaXRvcigpLmRpZEFkZFNjcm9s
bGluZ0xheWVyKG1fb3duaW5nTGF5ZXIpOwotICAgIAorICAgIGlmIChtX3Njcm9sbENvbnRhaW5l
ckxheWVyKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigp
KTsKKyAgICAgICAgY29tcG9zaXRvcigpLmRpZEFkZFNjcm9sbGluZ0xheWVyKCptX293bmluZ0xh
eWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMjk4NSw4ICszMDEwLDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRz
TmVlZERpc3BsYXlJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKICAgICB9CiAKICAg
ICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIt
PmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpKTsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFw
cGVkUmVjdEZvclBhaW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9s
bGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9v
d25pbmdMYXllci5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVy
KTsKKyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIt
Pm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xs
YWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVy
ZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMDMyLDggKzMw
NTgsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXAKICAgICAgICAgaWYgKCZsYXllciA9PSAm
bV9vd25pbmdMYXllcikgewogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNv
bnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKLSAgICAgICAgICAgIGlmIChsYXll
ci5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0
KQotICAgICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWlu
dGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50
aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAgICAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVM
YXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQor
ICAgICAgICAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFp
bnRpbmdJbmZvLCBwYWludEZsYWdzIHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnOjpQYWlu
dGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBsYXllci5wYWludExheWVyV2l0aEVmZmVjdHMoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLCBwYWludEZsYWdzKTsKIApAQCAtMzMyMywxNyArMzM1MSwyMiBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyLCBHcmFwaAogICAgICAgICAgICAgcGFpbnREZWJ1Z092ZXJsYXlzKGdyYXBoaWNzTGF5ZXIs
IGNvbnRleHQpOwogCiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5
ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBB
U1NFUlQobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Ny
b2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxi
YXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFy
KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsK
KyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAg
ICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNh
bFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhp
Y3NMYXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVy
UmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVy
T3JSZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVy
KTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92ZXJmbG93
Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZSgtY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgTGF5b3V0UmVj
dCB0cmFuc2Zvcm1lZENsaXAgPSBMYXlvdXRSZWN0KGNsaXApOwogICAgICAgICB0cmFuc2Zvcm1l
ZENsaXAubW92ZUJ5KGNvcm5lclJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5
ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZEludFJlY3Qo
dHJhbnNmb3JtZWRDbGlwKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIucGFpbnRSZXNpemVyKGNv
bnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZEludFJl
Y3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFpbnRSZXNp
emVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgfQogI2lmbmRl
ZiBOREVCVUcKICAgICByZW5kZXJlcigpLnBhZ2UoKS5zZXRJc1BhaW50aW5nKGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAK
aW5kZXggYTJiNThlNjY2OTA2ODVmY2U2YjFhODgzNDljN2ZmM2NlNjg1MjI2YS4uNzVmMGJkZWU0
OWI3ZTVjMjhmYzhmNmQ0ZTc2NjdkYWZmMDFkNWI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTMxNTMsNyArMzE1Myw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9z
aXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5
ZXImIGxheWVyLCBSZXF1aXJlc0NvbXBvc2l0aW5nRGF0YSYgcXVlcnlEYXRhKSBjb25zdAogewot
ICAgIGlmICghbGF5ZXIuY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgIGlmICghbGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCkgfHwgIWxheWVyLnNjcm9sbGFibGVMYXllcigpLT5jYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChx
dWVyeURhdGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0zMjkz
LDcgKzMyOTMsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXNlQ29vcmRpbmF0ZWRT
Y3JvbGxpbmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYgbAogCiBzdGF0aWMgYm9vbCBpc1Nj
cm9sbGVkQnlPdmVyZmxvd1Njcm9sbExheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29u
c3QgUmVuZGVyTGF5ZXImIG92ZXJmbG93U2Nyb2xsTGF5ZXIpCiB7Ci0gICAgcmV0dXJuIGxheWVy
LmJveFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCk7CisgICAgQVNTRVJUKGxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBB
U1NFUlQob3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgcmV0dXJu
IGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5ib3hTY3JvbGxpbmdTY29wZSgpID09IG92ZXJmbG93
U2Nyb2xsTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsK
IH0KIAogc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5
ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgaW50ZXJtZWRp
YXRlTGF5ZXIsIGJvb2wmIHNhd0ludGVybWVkaWF0ZUxheWVyKQpAQCAtNDU2Nyw4ICs0NTY5LDEx
IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGlu
Z05vZGVGb3JWaWV3cG9ydENvbnN0cmFpbmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBhbmNlc3RvckxheWVyIG5lZWRzIHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hvdWxk
IGJlY29tZSBhIHJlZmVyZW5jZS4KLSAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIHJl
dHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7Cisg
ICAgaWYgKCFhbmNlc3RvckxheWVyKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KHsgfSwgTGF5b3V0U2l6ZShzY3JvbGxhYmxlTGF5ZXItPnZpc2libGVTaXplKCkpKTsKKyAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNjcm9s
bGFibGVSZWN0OwogICAgIGlmIChpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpAQCAt
NDU4OCwxMSArNDU5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Ny
b2xsaW5nTm9kZUxheWVycyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAgICAg
Zml4ZWRSb290QmFja2dyb3VuZExheWVyKCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNMYXll
cigpLAogICAgICAgICAgICAgZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
LCBmcmFtZVZpZXcubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxzZSB7
CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigp
OworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBz
Y3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBo
aWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwg
YmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyID8gc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSA6IG51bGxwdHIsCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBzY3Jv
bGxhYmxlTGF5ZXItPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHIgfSk7CiAg
ICAgfQogfQogCkBAIC00NjMwLDggKzQ2MzgsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUK
ICAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQog
ICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAq
c2Nyb2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5n
Tm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQp
Ci0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9s
bGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2Vz
ICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5w
YXJlbnROb2RlSUQpIHsKKyAgICAgICAgICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlTGF5ZXIo
KSk7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNj
cm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsKQEAgLTQ3NjcsMjAg
KzQ3NzcsMjEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3Vz
U2Nyb2xsaW5nTm9kZXMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byByZWxl
dmFudFNjcm9sbGluZ1Njb3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyKSB7CisgICAgYXV0byByZWxldmFudFNjcm9sbGluZ1Njb3Bl
ID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJiBsYXllcikgewogICAgICAgICBpZiAoJmxheWVyLnJlbmRlcmVyKCkgPT0gJnJlbmRl
cmVyKQogICAgICAgICAgICAgcmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7CiAgICAg
ICAgIHJldHVybiBsYXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAgfTsKIAotICAg
IGF1dG8gcm9vdFNjcm9sbGluZ1Njb3BlID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5zY3JvbGxh
YmxlTGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogCiAgICAgZm9yIChhdXRvJiBy
ZW5kZXJlciA6ICpzbG93UmVwYWludE9iamVjdHMpIHsKICAgICAgICAgYXV0byBsYXllciA9IHJl
bmRlcmVyLmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgIGlm
ICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGluZ1Nj
b3BlKHJlbmRlcmVyLCAqbGF5ZXIpOworICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0gcmVs
ZXZhbnRTY3JvbGxpbmdTY29wZShyZW5kZXJlciwgKmxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7
CiAgICAgICAgIGlmIChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xsaW5nU2NvcGUpIHsKICAg
ICAgICAgICAgIGF1dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0gYXN5bmNTY3JvbGxhYmxl
Q29udGFpbmVyTm9kZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFTU0VSVChlbmNsb3NpbmdT
Y3JvbGxpbmdOb2RlSUQpOwpAQCAtNDgwNCw3ICs0ODE1LDcgQEAgU2Nyb2xsYWJsZUFyZWEqIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Ny
b2xsaW4KICAgICBpZiAobm9kZUlEID09IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3JvbGxp
bmdOb2RlSUQoKSkKICAgICAgICAgcmV0dXJuICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAK
LSAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKTsK
KyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKS0+
c2Nyb2xsYWJsZUxheWVyKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxs
UmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRl
ckxheWVyQmFja2luZyYgYmFja2luZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA3YTg1YjI2OTZjNjhhYTQwZDQyODFmM2JjMjJj
NmJjZDZiODgwMDVhLi5iZmYyMTljNGI3OTExMTY3YjZjNzVhMWNmMGE4NjU4OGUxOWI2ODFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
CkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNs
aXBwaW5nU3RhY2suaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL09wdGlvblNldC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggMmM1OWE0ODQ2YWY4NDQ3NTVlZjczMTA0YWFm
NGEwODE1MWE4Y2IxZC4uMzg2MTNiMjJhNTI0YTY0Y2JiMDQyMTI1NWIzMDZiMDMyYzhlZGVjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LmNwcApAQCAtOTUsMTEgKzk1LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
ZGVzdHJveUxheWVyKCkKIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIo
KQogewogICAgIEFTU0VSVCghbV9sYXllcik7Ci0gICAgbV9sYXllciA9IG1ha2VVbmlxdWU8UmVu
ZGVyTGF5ZXI+KCp0aGlzKTsKKyAgICAvLyBGSVhNRTogSG9vayBpbiBvcHRpbWl6YXRpb24gdG8g
b25seSBjcmVhdGUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLCBpZiBuZWNlc3NhcnkuCisgICAgbV9s
YXllciA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPigqdGhpcyk7CiAgICAgc2V0
SGFzTGF5ZXIodHJ1ZSk7CiAgICAgbV9sYXllci0+aW5zZXJ0T25seVRoaXNMYXllcihSZW5kZXJM
YXllcjo6TGF5ZXJDaGFuZ2VUaW1pbmc6OlN0eWxlQ2hhbmdlKTsKIH0KIAorUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyID8gbV9sYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgOiBu
dWxscHRyOworfQorCiBib29sIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6Omhhc1NlbGZQYWludGlu
Z0xheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sYXllciAmJiBtX2xheWVyLT5pc1NlbGZQ
YWludGluZ0xheWVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQzNzcxM2RiNzJlYTIyYjYzMWZm
ZTJkYmE3Li42OTBjYWYyMzZmYWQwMTg5ZjBmY2MwYzljNjY3YWMwNGE2MTFiY2U1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKQEAg
LTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBLZXlmcmFtZUxpc3Q7
CiBjbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIAogc3Ry
dWN0IFJlcGFpbnRMYXlvdXRSZWN0cyB7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OyAv
LyBUaGlzIHJlY3QgaXMgY2xpcHBlZCBieSBlbmNsb3Npbmcgb2JqZWN0cyAoZS5nLiwgb3ZlcmZs
b3c6aGlkZGVuKS4KQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNTZWxm
UGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBsYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIHNjcm9s
bGFibGVMYXllcigpIGNvbnN0OwogCiAgICAgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzYxZGJmNzdkN2M4ZGYzZjQ4YjE5NzdhZGEw
Y2M1NDkyYThlOTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKQEAgLTAsMCArMSwyMDAxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBv
cnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29y
cG9yYXRpb24uCisgKgorICogT3RoZXIgY29udHJpYnV0b3JzOgorICogICBSb2JlcnQgTydDYWxs
YWhhbiA8cm9jK0Bjcy5jbXUuZWR1PgorICogICBEYXZpZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2
YXJkLmVkdT4KKyAqICAgQ2hyaXN0aWFuIEJpZXNpbmdlciA8Y2JpZXNpbmdlckB3ZWIuZGU+Cisg
KiAgIFJhbmRhbGwgSmVzdXAgPHJqZXN1cEB3Z2F0ZS5jb20+CisgKiAgIFJvbGFuZCBNYWlueiA8
cm9sYW5kLm1haW56QGluZm9ybWF0aWsubWVkLnVuaS1naWVzc2VuLmRlPgorICogICBKb3NoIFNv
cmVmIDx0aW1lbGVzc0BtYWMuY29tPgorICogICBCb3JpcyBaYmFyc2t5IDxiemJhcnNreUBtaXQu
ZWR1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0
aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6
Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcv
Y29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92
aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBv
ZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdv
CisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVy
cyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGlu
ZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUg
YW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25z
IHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICog
SWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1h
eSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BM
LCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQoreworICAgIHN0YXRpYyBT
Y3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOworICAgIHJldHVybiArK2N1cnJlbnRTY29w
ZTsKK30KKworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXll
clNjcm9sbGFibGUpOworCitSZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCisg
ICAgOiBSZW5kZXJMYXllcihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpM
YXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgLCBtX2luUmVzaXplTW9kZShmYWxzZSkKKyAgICAs
IG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCisgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91
dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQorI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgLCBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKKyNlbmRp
ZgorICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYK
KyAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQorICAg
ICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCisgICAgLCBtX3VwZGF0
aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQoreworICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgIGlmIChpc1JlbmRlclZpZXdMYXll
cigpKQorICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Nj
b3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUg
b25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNh
bGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVy
U2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygp
KQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3Jv
bGxQb3NpdGlvbik7CisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlv
bihJbnRQb2ludCgpKTsKKyAgICB9Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZTo6flJlbmRl
ckxheWVyU2Nyb2xsYWJsZSgpCit7CisgICAgaWYgKGluUmVzaXplTW9kZSgpKQorICAgICAgICBy
ZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsK
KworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlm
IChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcoKTsKKyNlbmRpZgorCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigp
LmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24pOworCisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Ny
b2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAg
IGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVz
dHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Cisg
ICAgY2xlYXJSZXNpemVyKCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2
aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
KyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJ
bnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNs
aWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb250
ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNj
cm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6
ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihj
b250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAo
IWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5z
ZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhl
aWdodCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOworfQorCitpbnQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJv
eCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3Rl
YWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLndp
ZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbEhlaWdodCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhp
cyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4K
KyAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOworfQorCitzdGF0aWMgaW5saW5lIGlu
dCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBUaGlz
IGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1vemls
bGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1s
Izg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRqdXN0
ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1c3Rl
ZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRq
dXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0g
MTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVkRGVs
dGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRv
dWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IElu
dFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEo
ZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJ
bnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3Np
dGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93
biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMg
b3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3RhdGlj
IEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91c2VQ
b3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAgICAg
ICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBl
bHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRp
b247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJj
ZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1Bh
blNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUg
aWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhlaWdo
dCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEuc2V0
SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRh
KGRlbHRhKSk7Cit9CisKKy8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNp
YmxlKCkgY29kZSBiZWxvdy4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVk
QXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyKCku
cGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBh
cmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAg
ICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsK
KyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNj
cm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAg
IC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5
ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Nj
cm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBp
ZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4K
KyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpZZXMpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1
cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisKKyAgICAgICAg
ICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVu
ZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBo
ZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRp
Y2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cg
Y2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUg
c2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5
KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxl
ZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklY
TUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkg
bG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnN0YXRpY19jYXN0PFJlbmRlckxheWVy
Kj4odGhpcykgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBy
ZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKKyAgICBzZXRTY3JvbGxCZWhhdmlvclN0
YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOworCisgICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZz
ZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZz
ZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQg
PyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVB
bmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwor
ICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAg
IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zm
c2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3Jv
bGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9s
bFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3Jv
bGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1h
dGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBj
bGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9u
YWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIG1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphcHBs
eVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNl
dChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFs
dWUoKSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0Owor
fQorCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAoreworICAgIGF1dG8gaXND
b25zaWRlcmVkU2Nyb2xsYWJsZSA9IFtdKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgeworICAg
ICAgICByZXR1cm4gaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSAmJiBkb3duY2FzdDxS
ZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpLmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxl
QXJlYSgpOworICAgIH07CisKKyAgICBpZiAoaW5jbHVkZVNlbGYgPT0gSW5jbHVkZVNlbGZPck5v
dDo6SW5jbHVkZVNlbGYgJiYgaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqdGhpcykpCisgICAgICAg
IHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+KHRoaXMpOworICAgIAor
ICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIo
Y3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7Cisg
ICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIpKSB7CisgICAgICAg
ICAgICBBU1NFUlQobmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YXZh
aWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29u
KQoreworICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVh
c29uKTsKKworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Ny
b2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigp
KSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91
bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVl
ZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3Jv
bGxzT3ZlcmZsb3coKSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNP
dmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVy
ZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Ny
b2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAg
IG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9
IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5n
Rm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21h
dGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRI
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxz
ZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAg
fQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIg
c2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9w
cG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJh
ci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHls
ZUNoYW5nZWQoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIg
PT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhh
c1Njcm9sbGJhcikgeworICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsRWxh
c3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0
aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNj
cm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAg
U2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsK
KyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7
CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIg
Y2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRv
IHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikK
KyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
KQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7Cisg
ICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1No
YWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFk
b3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290
LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJl
bmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0
ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CisgICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJl
bmRlcmVyKCkpKTsKKyAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9s
bGJhcihyZW5kZXJlcigpKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxS
ZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAg
ICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNj
cm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFk
ZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKHBhZ2Uo
KS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigp
KTsKKyAgICB9CisgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndp
ZGdldCk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBp
ZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlz
Q3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFy
LmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxi
YXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAgIHJl
dHVybiBzY3JvbGxhYmxlTGF5ZXI7CisKKyAgICByZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZSgpCit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRv
KiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2lu
Z0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAg
ICAgIGlmIChuZXh0TGF5ZXItPnNjcm9sbGFibGVMYXllcigpICYmIG5leHRMYXllci0+c2Nyb2xs
YWJsZUxheWVyKCktPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOworfQorCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTbmFwT2Zmc2V0
cygpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMu
CisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9z
aW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVy
Qm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNu
YXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVudD4o
ZW5jbG9zaW5nRWxlbWVudCgpKSwgKmJveCwgYm94LT5zdHlsZSgpKTsKK30KKyNlbmRpZgorCisK
KyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkK
K3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3Jv
bGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyOjpkaWRTdGFy
dFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZs
b3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAg
ICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMg
bm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNl
bGVjdGlvbiB1cGRhdGVkLgorICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQo
Q2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBib29sIGlz
VmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3Jv
bGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJm
bG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKKyAgICByZXR1cm4g
aXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNl
VG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNV
c2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisg
ICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJ
bkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3ZCYXIt
PndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25z
dAoreworICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMo
KQorICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5
ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lw
YXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9o
QmFyLT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc092ZXJm
bG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1f
c2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5v
bmU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1BvaW50SW5SZXNpemVDb250
cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFjYW5SZXNpemUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZC
YXIgJiYgIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRy
b2xSZWN0OworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpO
b25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRo
ZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRh
aW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJh
ci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygp
KSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2Fs
UG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21S
ZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0
byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7CisgICAgYXV0
byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3sKKyAgICAvLyBE
b24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgorICAgIGlmICghcmVuZGVy
ZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93
c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBz
Y3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBz
byB0aGF0IHRoZXkgd2lsbCBwYWludAorICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2Uu
IElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250
cm9scworICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSBy
b290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQg
bmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91
Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Ny
b2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRo
ZSAKKyAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRl
clRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgorICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFwYWludGluZ092ZXJsYXlDb250cm9scykgeworICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3Jv
bGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKKworICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3Nh
cnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5
ZXJzLgorICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsK
KyAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7CisgICAgICAgIGlm
ICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBlbmNs
b3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRpbmdSb290KQorICAg
ICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKTsKKworICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcGFpbnRpbmdSb290LT5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
VGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9s
bGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVy
bGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xs
YmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNz
YXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBi
dXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1
cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CisgICAg
Ly8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9zaXRpb25PdmVy
Zmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAgICAvLyBO
b3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2Us
IHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAg
aWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBtX3ZC
YXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9yU2Nyb2xs
Q29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBj
b3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4g
YWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAgIHBhaW50
U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwor
ICAgIAorICAgIC8vIFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9w
IG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIElu
dFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50
cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNv
cm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAorICAgIC8v
IHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJz
KCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNv
bnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRS
ZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGlmIChyZW5kZXJl
cigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBMYXlvdXRS
ZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKKyAgICByZXNpemVyQWJzUmVjdC5t
b3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhk
YW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBt
X3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNS
ZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJ
bWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJv
dW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJh
cnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBi
b3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJz
KCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJB
YnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVj
dDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIu
d2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7
CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRl
eHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCisv
LyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3Np
dGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAo
IWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0
cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNl
dCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKworI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28g
dXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQKKyAgICB1cGRhdGVT
bmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYm
ICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVz
ZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdl
IG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUg
bWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9mZnNldCBj
bGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdy
b25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0
aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVk
IHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3
YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4dCBmaWVs
ZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxl
bS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xs
T2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xh
bXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBz
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisgICAgfQor
CisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3JpZ2luYWxT
Y3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYgKGlzQ29t
cG9zaXRlZCgpKSB7CisgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgp
OworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAg
IH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHNldE5l
ZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisKKyAgICB1cGRhdGVTY3JvbGxTbmFw
U3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmNhblJlc2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVlZCBhIHNwZWNpYWwgY2Fz
ZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0aGV5IG5ldmVyIGhhdmUKKyAgICAvLyBoYXNPdmVyZmxv
d0NsaXAoKS4gSG93ZXZlciwgdGhleSBkbyAiaW1wbGljaXRseSIgY2xpcCB0aGVpciBjb250ZW50
cywgc28KKyAgICAvLyB3ZSB3YW50IHRvIGFsbG93IHJlc2l6aW5nIHRoZW0gYWxzby4KKyAgICBy
ZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS5pc1JlbmRl
cklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25l
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmZzZXQpCit7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9uIGdlbmVyYXRlZCBjb250ZW50IGJ1dCBp
cyBub3QgcmlnaHQgbm93LgorICAgIGlmICghaW5SZXNpemVNb2RlKCkgfHwgIWNhblJlc2l6ZSgp
IHx8ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklY
TUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXItPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSAh
PSByZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMuIERvIHRoZXkgbWF0dGVyIGhlcmU/Cisg
ICAgLy8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBiZSBiZXR0ZXIgdG8gZGVhbCB3aXRoIHRo
ZW0gZXhwbGljaXRseS4KKyAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50
KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KGVsZW1lbnQtPnJl
bmRlcmVyKCkpOworCisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3Nl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gcmVuZGVyZXIt
PnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworCisgICAgYXV0byBhYnNvbHV0ZVBvaW50ID0gZG9j
dW1lbnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2dC5wb3NpdGlvbigpKTsKKyAgICBhdXRv
IGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1dGVUb0NvbnRlbnRzKGFic29sdXRl
UG9pbnQpKTsKKworICAgIExheW91dFNpemUgbmV3T2Zmc2V0ID0gb2Zmc2V0RnJvbVJlc2l6ZUNv
cm5lcihsb2NhbFBvaW50KTsKKyAgICBuZXdPZmZzZXQuc2V0V2lkdGgobmV3T2Zmc2V0LndpZHRo
KCkgLyB6b29tRmFjdG9yKTsKKyAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KG5ld09mZnNldC5oZWln
aHQoKSAvIHpvb21GYWN0b3IpOworICAgIAorICAgIExheW91dFNpemUgY3VycmVudFNpemUgPSBM
YXlvdXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9vbUZhY3RvciwgcmVuZGVyZXItPmhlaWdo
dCgpIC8gem9vbUZhY3Rvcik7CisgICAgTGF5b3V0U2l6ZSBtaW5pbXVtU2l6ZSA9IGVsZW1lbnQt
Pm1pbmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtUbyhjdXJyZW50U2l6ZSk7CisgICAgZWxl
bWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7CisgICAgCisgICAg
TGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0LndpZHRo
KCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKKyAgICBp
ZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAg
IG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOworICAgICAgICBhZGp1c3Rl
ZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CisgICAgfQor
ICAgIAorICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChjdXJyZW50U2l6ZSArIG5ld09mZnNl
dCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1pbmltdW1TaXplKSAtIGN1cnJlbnRT
aXplOworCisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0eWxl
ZEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJl
ci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveDsKKworICAgIFJl
c2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsKKyAgICBpZiAocmVzaXpl
ICE9IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5jZS53aWR0aCgpKSB7CisgICAgICAgIGlm
IChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgIC8v
IE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAgICAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVm
dCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0
b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQg
YmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1
IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAgICAg
ICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQo
YmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Cisg
ICAgfQorCisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVyZW5j
ZS5oZWlnaHQoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVs
ZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUg
dGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZh
Y3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+
bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAg
ICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkg
LSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5k
UGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29t
RmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdo
dCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQorCisgICAgZG9jdW1lbnQudXBkYXRl
TGF5b3V0KCk7CisKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNv
IGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5k
ZXIgdGhlIGN1cnNvciBpbiB2aWV3LgorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJH
ZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAodGhpcyAhPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGlu
Z3NUb0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMg
aXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0
bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0
b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZp
ZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOworCisgICAgUmVu
ZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJl
Y3QmIGJvdW5kcykKK3sKKyAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNs
b3NpbmdJbnRSZWN0KGJvdW5kcykpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseUNsZWFy
QmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBmb3Ig
KFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY2hpbGQpOwor
ICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyQmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzKCkKK3sKKyAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJl
Y3QoKTsKKyAgICByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKHRoaXMp
OworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMo
UmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5
ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5
ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+cmVwYWludEJsb2NrU2VsZWN0aW9u
R2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVJlcGFpbnRCbG9j
a1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQoreworICAgIHJlY3Vyc2l2ZWx5UmVw
YWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZWN0IHJl
Y3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICByZWN0Lm1vdmVCeSgtc2Nyb2xs
UG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBu
dWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmIChy
ZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8v
IEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmICghcmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRS
b290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCisgICAg
ICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBl
bmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCks
IHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZv
LCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBtX2Nv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitHcmFwaGljc0xheWVy
KiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6
IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2Jh
Y2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOworfQorCisvLyBGSVhNRTog
dGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigpOwor
fQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJz
LgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zvckxh
eWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01h
eVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3co
KSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCitTdHJpbmcgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVuZGVy
TGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9u
IGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5v
dmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxi
YXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5
bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Ny
b2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZl
cyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92
ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxv
d1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBh
IHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAg
YW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJv
b2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAo
KGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxi
YXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Nj
cm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5l
ZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVy
dGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5z
dHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkg
b3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJl
IGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5l
ZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYg
bmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxv
d1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xs
KQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYm
IG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93
WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwp
CisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBB
U1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFy
cyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94LT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZs
b3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92
ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhl
biB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgaWYgKG1faEJhciAmJiBz
dHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9s
bGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cp
OworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0
eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhh
c1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZp
b3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciBy
ZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5o
YXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9WZXJ0
aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZs
b3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVy
dGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxT
Y3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhhc1Zl
cnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgdXBkYXRlU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKKworICAg
ICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRv
IHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewor
ICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAgICAg
IG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigp
LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9j
ayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFy
Q2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOworICAgICAgICAgICAgICAgIG1f
aW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQo
KTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5k
ZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4o
cGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7CisgICAg
fQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgor
ICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBh
Z2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7CisgICAgfQorICAgIGlm
IChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5j
bGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0
ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0
aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICB1
cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
fHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJl
Y3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJMYXllciogbGF5
ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQor
eworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1h
cCwgZmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoY2hpbGQsIGdlb21ldHJ5TWFwLCBmbGFncyk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCit7CisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNl
cyB3aGVyZQorICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRo
YXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgorICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRl
bnRGbGFncygpOworCisgICAgLy8gSWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRlbnQgYW5kIG5v
IHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5vIHBvaW50IHJlY29tcHV0aW5nCisgICAg
Ly8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0
eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KKyAgICAvLyByZWNvbXB1dGUgYWxsIG91ciBw
b3NpdGlvbnMgYW55d2F5LgorICAgIGlmICghbV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiAhbV9o
YXNWaXNpYmxlQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBwb3NpdGlvbkNo
YW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7CisgICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkK
KyAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNlc3Rvcik7CisKKyAgICBpZiAoZmxhZ3Mu
Y29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3IsIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFp
bmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkpCisgICAgICAgIGNsZWFyQ2xpcFJlY3Rz
KCk7CisKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQ
b3NpdGlvbigpKQorICAgICAgICBmbGFncy5hZGQoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRB
bmNlc3Rvcik7CisKKyAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAg
ICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXApOworICAgIAorICAg
IGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9IChmbGFncy5jb250YWlucyhIYXNTZWVu
Vmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBmbGFncy5jb250YWluc0FsbCh7IElzT3Zl
cmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgfSkpICYmIGlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBib29sIGlzVmlzdWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5
Tm9uRW1wdHkoKTsKKyAgICBib29sIHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5
TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8
fCBmaXJzdENoaWxkKCkpOworICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCisgICAg
ICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsK
KworICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzKSB7CisgICAgICAgIC8vIFdoZW4g
c2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFpbnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5v
bi1lbXB0eSBsYXllcnMuCisgICAgICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkpCisgICAgICAgICAg
ICBjbGVhclJlcGFpbnRSZWN0cygpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0
cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ugd2FsayBkb3duIHRoZSB0cmVlLgorICAg
ICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFp
bnQoKSwgZ2VvbWV0cnlNYXApOworICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3
J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZsaXBzIGR1ZSB0byBsYXllciBiYWNraW5n
IGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNpdGlvbnMgZnJvbQorICAgICAgICAvLyB2
aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVucyB0aGUgY2FjaGVkIHJl
cGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRoZXkgbmVlZCB0byBiZSByZWNvbXB1dGVk
IChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCisgICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIGNh
Y2hlZCByZWN0cyBhcmUgY29ycmVjdC4KKyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1Jl
cGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9y
ZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJl
bmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7CisgICAgICAgIEFTU0VSVCghcmVuZGVy
ZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRS
ZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigpLm91dGxpbmVCb3VuZHNGb3JSZXBhaW50
KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7CisgICAgfQorCisgICAgcmVjdXJz
aXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKHRoaXMsIGdlb21ldHJ5TWFwLCBm
bGFncyk7ICAgIAorCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNj
cm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgp
CisgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBh
aW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCisgICAgLy8gdXBk
YXRlZCBhYm92ZS4KKworICAgIGlmIChtX21hcnF1ZWUpIHsKKyAgICAgICAgYm9vbCBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOworICAgICAgICBtX21hcnF1ZWUtPnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgfQorCisgICAgaWYgKHNob3VsZFB1
c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNl
c3RvcihwYXJlbnQoKSk7CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmlu
dmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3Jv
bGxPZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5lZEJl
dHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQoreworICAgIGZv
ciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgeworICAgICAgICBpZiAo
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwgZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29u
dGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJw
aXhlbE9mZnNldCkpLAorICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dy
b3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBz
Y3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVy
biBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgp
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dDb250cm9s
cygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBpT1MsIHRo
ZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVybiAhY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QK
K3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7CisgICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVu
dCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVz
aXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9
IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29y
bmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhN
YXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVy
UmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICAgICAgfQorICAgICAg
ICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlD
b3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7CisgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAg
fTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJh
Z21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5l
clJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVj
dHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhp
dFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAgICAgICAgICAgIHBvaW50SW5GcmFn
bWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5s
YXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQo
b3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKKyAgICBtX3Njcm9sbFNpemUuc2V0
SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKKwor
ICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQo
KSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0g
cm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7CisgICAgc2V0U2Ny
b2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRv
cE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgm
c2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgIGxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICAvLyBJZiB3ZSBhcmUgbm90IHll
dCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCisg
ICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZC
YXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIExheW91dFJlY3QgcmVw
YWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01v
ZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50
UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUo
cmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVj
dGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUo
KSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUo
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsQ29ybmVyVmlzaWJs
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJu
ICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworSW50UmVjdCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QK
K3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3Jv
bGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVy
KCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Jl
bmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUoLXNjcm9sbGJh
ck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9pbnQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2lu
dCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBv
aW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmll
dygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIm
IHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIElu
dFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21D
b250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBw
b2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJv
bU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzQ29tcG9zaXRlZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05v
ZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZp
c2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZp
c2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Nyb2xsYmFy
U3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1
c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3Jv
bGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlz
aWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAs
IHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgo
MCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9Owor
fQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91bnQoKSBjb25z
dAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXJlbmRlcmVyKCkuc2V0
dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisKKyAgICAv
LyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8g
U2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBhdXRvIHJlYWNoYWJsZVNp
emUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlmIChzY3JvbGxPZmZzZXQu
eSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Cisg
ICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4g
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0g
dmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCisgICAg
ICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7CisgICAgZWxzZSBpZiAocmVh
Y2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndp
ZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxP
ZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7CisK
KyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIEludFNpemUoKTsKKyNlbmRp
ZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVu
dCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hvdWxkU3VzcGVuZFNjcm9s
bEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOworfQorCitJbnRSZWN0IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0lu
c2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29u
c3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdD
b29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2Vy
U2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Ny
b2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3Jv
bGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVy
QmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFk
Rm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNl
VGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
YXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6
OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAiICsgbWVzc2FnZSk7Cit9CisKKworI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
Z2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVu
ZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZW5kZXJlcigpLmRvY3VtZW50
KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgIW1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJl
bmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xs
UG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyAiIDw8
IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBz
Y3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAi
KSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBp
ZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBk
aW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZs
b3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkK
KyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMg
dHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4K
KyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9
IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAgICBpbnQg
c2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsWE9m
ZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxY
T2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQg
PD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngo
KSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdp
ZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKKyAgICAg
ICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7
CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBpZiAobV9zY3JvbGxQb3NpdGlv
biA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3Jv
bGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgLy8gRklYTUU6IE5v
dGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBv
c2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCisgICAgICAgIC8vIFRoZSBTY3Jv
bGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVh
ZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9t
ZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Njcm9s
bFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVy
ZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQg
bGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVk
IGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJz
LCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGlu
ZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlz
SW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRs
ZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmlu
aXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgp
OworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlv
bnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9u
IHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgorICAgICAgICAgICAgLy8g
cG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsg
b2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAgICAgLy8gaW4gdGhpcyBj
YXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNv
bXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRl
cy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7CisgICAgICAg
ICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBj
b21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciks
CisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRo
ZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFy
ZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVu
dC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0Fm
dGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Ny
b2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KKyAgICAg
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdp
b25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5m
cmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7
CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVy
KCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRv
IGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVw
YWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJl
cGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1
YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAg
IGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50
ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNl
TW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1v
dmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29s
IHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAg
ICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwo
KTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNv
bXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCBy
ZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWludCkKKyAgICAgICAg
cmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZv
clJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0
ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxl
bWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVu
dFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAg
IHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisKKyAgICB2aWV3LmZy
YW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CisgICAgZnJhbWUuZWRpdG9yKCku
cmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCit7CisgICAgaWYgKGNv
bXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgeworICAgICAgICAvLyBP
dXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3Vy
IGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28g
dXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5n
Q29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdM
YXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0
aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdl
cmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5j
ZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJz
YWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXll
cnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFNpemUgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIp
IGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisg
ICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRT
aXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOworCisgICAg
Ym9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3Rpbmco
KTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFt
ZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXIt
PnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsK
KworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRU
ZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJs
ZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Njcm9sbGFibGUpIHsKKyAgICAgICAgaWYg
KCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgYWRkZWRPclJlbW92
ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAgICBtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFkZGVkT3JSZW1vdmVkID0g
ZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAgICBpZiAoaXNTY3JvbGxh
YmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICByZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVy
YXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQorICAgICAgICAgICAgLy8g
YWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4K
KyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJl
bW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7CisgICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVj
dHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAg
ICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAg
IG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFy
Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIp
CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29ybmVy
KTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVSZWN0
KHJlY3RzLnJlc2l6ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVy
ID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byBjb3JuZXIgPSBy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJl
ci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFjb3JuZXIpIHsKKyAgICAgICAgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9sbENvcm5lcigpCit7Cisg
ICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Nyb2xsQ29y
bmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3JvbGxDb3JuZXIgPSBudWxscHRyOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlUmVzaXplclN0eWxlKCkKK3sK
KyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFy
KHJlbmRlcmVyKCkpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lk
OjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAg
aWYgKCFyZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVzaXplcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyID0gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBX
VEZNb3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBi
ZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZy
ZW5kZXJlcigpKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclJlc2l6ZXIoKQoreworICAgIGlm
ICghbV9yZXNpemVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQo
bnVsbHB0cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIFJlZlB0
cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJT
aXplOworICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+
PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5l
ckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVD
b3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6
ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29y
bmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVz
aXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJl
YVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKworICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgY29udGV4dC5zYXZlKCk7Cisg
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJl
c2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJS
ZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOworICAgICAgICBjb250
ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKKyAgICAgICAgaWYgKHJlc2l6ZUNvcm5l
ckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdl
LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOworICAgICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
IXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdl
UmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVj
dC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXpl
KSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIGNvbnRl
eHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKworUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFi
bGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3Jk
ZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBw
ZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsK
KworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+
aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/
IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9
IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CisgICAgICAgIHJldHVybiBzY3JvbGxi
YXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7CisgICAgfTsKKworICAgIGJv
b2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xs
YmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xs
YmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9y
aXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7CisK
KyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikg
eworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5l
ciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKKyAgICAgICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAor
ICAgICAgICB9OworICAgIH0KKworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKwor
ICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5t
YXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICAgICAgaWYgKHNjcm9sbGJh
cnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJP
blRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54
KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAgICB9CisK
KyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25U
aGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFy
UmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKworICAgICAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3Ju
ZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBi
YXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5l
clNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsK
KyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJT
aXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVy
KCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKKworICAgIGlmIChzY3JvbGxi
YXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0
KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVyKSB7CisgICAgICAgIGlmIChzY3Jv
bGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5z
Y3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJU
aGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsK
KyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNr
bmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29u
dHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMu
aG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9j
YWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29y
bmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dXBkYXRlTWFycXVlZSgpCit7CisgICAgaWYgKG1fbWFycXVlZSkgeworICAgICAgICAvLyBG
SVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3Jr
IHdpdGggYml0ZmllbGRzLgorICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9u
KCk7CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVh
dGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1M
TWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJx
dWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7CisgICAgICAgIGlmICgh
bV9tYXJxdWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJx
dWVlPih0aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAg
ICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBk
YXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIC8vIFN1
YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIFJlbmRlckxheWVyKiBwb3Np
dGlvbmVkUGFyZW50OworICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5k
ZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CisgICAgICAgIGlmIChhdXRvKiBwb3NpdGlv
bmVkUGFyZW50U2Nyb2xsYWJsZSA9IHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9sbGFibGVMYXllcigp
KSB7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91
dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgorICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBv
c2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlzSW5GbG93UG9z
aXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUt
PnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3du
Y2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigp
KS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNldDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxl
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdT
Y29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3Bl
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudExheWVyU2Nyb2xsYWJsZSA9IHBhcmVudExh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudExheWVyU2Ny
b2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAgICAgICBs
b2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnRMYXllclNjcm9sbGFibGUtPnNjcm9sbFBv
c2l0aW9uKCkpOworCisgICAgICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29w
ZSA9IHBhcmVudExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xh
eWVyID0gcGFyZW50TGF5ZXItPnBhcmVudCgpOworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBudWxscHRyOworICAgICAg
ICAgICAgd2hpbGUgKGVuY2xvc2luZ0xheWVyKSB7CisgICAgICAgICAgICAgICAgaWYgKChlbmNs
b3NpbmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbmNsb3NpbmdM
YXllciA9IGVuY2xvc2luZ0xheWVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7
CisgICAgICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IGVuY2xvc2luZ0xheWVyU2Ny
b2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkg
eworICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgICAgIG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIH0gZWxzZSBpZiAo
IW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0g
bV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0g
bV9ib3hTY3JvbGxpbmdTY29wZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVw
ZGF0ZVNjcm9sbGJhclN0eWxlKCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBz
d2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCisg
ICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAo
bV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTZjNzZiYjJiMzI3OWJhZGIwNmVkNmQ3NzE4MDcwNzQwMDQ2ZDIxNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaApA
QCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAxMiwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgYXJl
IENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4K
KyAqCisgKiBPdGhlciBjb250cmlidXRvcnM6CisgKiAgIFJvYmVydCBPJ0NhbGxhaGFuIDxyb2Mr
QGNzLmNtdS5lZHU+CisgKiAgIERhdmlkIEJhcm9uIDxkYmFyb25AZmFzLmhhcnZhcmQuZWR1Pgor
ICogICBDaHJpc3RpYW4gQmllc2luZ2VyIDxjYmllc2luZ2VyQHdlYi5kZT4KKyAqICAgUmFuZGFs
bCBKZXN1cCA8cmplc3VwQHdnYXRlLmNvbT4KKyAqICAgUm9sYW5kIE1haW56IDxyb2xhbmQubWFp
bnpAaW5mb3JtYXRpay5tZWQudW5pLWdpZXNzZW4uZGU+CisgKiAgIEpvc2ggU29yZWYgPHRpbWVs
ZXNzQG1hYy5jb20+CisgKiAgIEJvcmlzIFpiYXJza3kgPGJ6YmFyc2t5QG1pdC5lZHU+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxh
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9n
cGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFi
b3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vu
c2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5
b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91
ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFj
ZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQg
YnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8g
bm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3Vy
CisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwg
b3IgdGhlIEdQTC4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9s
bGFibGUpOworCit1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90OworCitjbGFzcyBSZW5k
ZXJMYXllclNjcm9sbGFibGUgZmluYWwKKyAgICA6IHB1YmxpYyBSZW5kZXJMYXllcgorICAgICwg
cHVibGljIFNjcm9sbGFibGVBcmVhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRI
X0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworcHVibGljOgorICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNr
aW5nOworCisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJMYXllclNjcm9sbGFibGUoKTsKKworICAg
IFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7
IH0KKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXpl
IGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0
OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgcGFuU2Nyb2xsRnJv
bVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3Ig
bGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5
UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xs
ZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Ny
b2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09m
ZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xh
bXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9
IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwg
U2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5p
bWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xs
OjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAgdm9p
ZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgs
IHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBz
Y3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisgICAg
dm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+
KTsKKyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKwor
ICAgIC8vIFJldHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIHRoYXQgaXMgc2Nyb2xs
YWJsZS4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJuIHRoZSBSZW5kZXJWaWV3J3MgbGF5
ZXIgd2hlbiBjYWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZyYW1lVmlldyBhcyBhIFNjcm9sbGFi
bGVBcmVhLgorICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKKworICAg
IHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFz
b24pIGZpbmFsOworCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29s
IGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJz
KCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQorICAgIHZvaWQgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
aG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKworICAgIGJvb2wgaG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRp
Y2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgLy8gU2Nyb2xs
YWJsZUFyZWEgb3ZlcnJpZGVzCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIq
IGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7
IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRz
KCkgZmluYWw7CisjZW5kaWYKKworICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAg
ICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7
CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Cisj
ZW5kaWYKKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3Vj
aCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxs
eSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpIGNvbnN0OworCisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Cisg
ICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhh
c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRy
b2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dD
b250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOworICAg
IEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2lu
dCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFp
bnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5l
cihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExh
eW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CisKKyAgICB2b2lkIHVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworCisgICAg
Ym9vbCBjYW5SZXNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJlc2l6ZShjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgYm9vbCBpblJlc2l6ZU1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2luUmVzaXplTW9kZTsgfQorICAgIHZvaWQgc2V0SW5SZXNpemVNb2Rl
KGJvb2wgYikgeyBtX2luUmVzaXplTW9kZSA9IGI7IH0KKworICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKworICAgIHZvaWQgYWRkQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lkIGNsZWFyQmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzKCk7CisgICAgdm9pZCByZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisK
KyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7
IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorICAgIHZvaWQgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5j
U2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBT
Y3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xs
ZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KKyAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29w
ZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3Bl
OyB9CisgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KKworICAgIGJvb2wg
c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OworCisgICAgYm9vbCBjb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlP
dmVybGF5U2Nyb2xsYmFyczsgfQorICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9CisKKyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigp
LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQorCisgICAgU3Ry
aW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAg
ICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgZW51bSBVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7CisgICAgICAgIElzT3ZlcmZsb3dTY3JvbGwg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAgSGFzU2VlblZpZXdwb3J0
Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNTZWVuQW5jZXN0
b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAxIDw8IDIsCisgICAgICAgIEhhc0NoYW5nZWRB
bmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICB9OworICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOworCisgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0
OworCisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYp
OworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhh
c1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgY29uc3Q7CisKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9p
bnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKKyAgICB2b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisK
KyAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKKyAgICBib29sIGlzUmVuZGVyTGF5ZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
YmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgdm9pZCBpbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7
CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKKyAgICBTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRSZWN0
IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Ny
b2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOworICAgIElu
dFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0hhbmRsaW5n
V2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFu
aW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Cisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRv
cigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShj
b25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQorICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwor
ICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisj
ZW5kaWYKKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBv
dmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgorICAgIHZvaWQg
c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsgIAorCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQo
Y29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHMoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsK
KyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1S
ZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNv
cm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKKyAgICAgICAg
SW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Ny
b2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsKKyAgICAgICAgSW50UmVjdCBy
ZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIXNjcm9sbENvcm5lci5pc0VtcHR5KCkg
PyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAgICB9CisgICAgfTsKKyAgICBPdmVyZmxv
d0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAgIGJvb2wg
b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBj
b25zdDsKKworI2lmIDAKK3ByaXZhdGU6CisgICAgYm9vbCB1cGRhdGVMYXllclBvc2l0aW9uKE9w
dGlvblNldDxSZW5kZXJMYXllcjo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogPSBudWxscHRy
KTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0
aW9uU2V0PFJlbmRlckxheWVyOjpVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKKworICAgIHZv
aWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQs
CisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBi
b29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5nSW5m
byYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzQ29udGV4dCYgdHJh
bnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3Bh
cmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBSZW5kZXJM
YXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRl
ck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworCisgICAgdm9pZCBwYWludExheWVy
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRp
b25TZXQ8UGFpbnRMYXllckZsYWc+KTsKKyAgICB2b2lkIHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJh
bnNmb3JtKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5n
SW5mbyYsIE9wdGlvblNldDxSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc+LCBjb25zdCBMYXlv
dXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFNpemUoKSk7CisKKyAgICBib29sIHNl
dHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wmIGRpZFF1
YW50aXplRm9udHMpOworI2VuZGlmCisKKyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWUoKTsKKyAgICB2
b2lkIGNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgdm9pZCBzdWJ0cmFjdFNj
cm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGluZ1Njb3BlcyhMYXlvdXRQb2ludCYgbG9jYWxQb2lu
dCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJTdHlsZSgpOworCitwcml2YXRlOgorICAgIC8v
IEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywg
c28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBzdGFydCBhbmQgc3RvcC4KKyAgICBib29s
IG1faW5SZXNpemVNb2RlIDogMTsKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDog
MTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29sIG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorCisgICAgYm9vbCBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7CisgICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uIDogMTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247CisgICAgT3B0
aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAg
Ly8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBJbnRTaXplIG1f
c2Nyb2xsU2l6ZTsKKworICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBh
IHBhaXIgb2Ygc2Nyb2xsYmFycy4KKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAg
UmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOworCisgICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5
U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFs
TWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwor
ICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9s
bGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+Lgor
CisgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCBy
ZXNpemVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5l
cjsKKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOworCisgICAg
SW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKK307CisKK30KKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGUpCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyJiBsYXllcikgeyBy
ZXR1cm4gbGF5ZXIubGF5ZXJUeXBlKCkgPT0gV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkxheWVyVHlw
ZTo6U2Nyb2xsYWJsZTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDdlOWYzODMyZDM2ZWZkMTkx
M2NmNzM5NzAxMWViYjNkMjE5NDhlMjQuLmU0NTZjNmM4YTU1ODMyMDRmNjNhZWZiNjhlOGJjMDMw
YjZkNzYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
QEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJl
bmRlclRleHQuaCIKQEAgLTg3OSwxMCArODc5LDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojpmb3Jj
ZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb24K
IFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgp
IGNvbnN0CiB7CiAgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwotICAgIGlmICgh
bGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRh
cmllczo6Tm8pOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2lu
Z1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94
Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpo
YXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5j
bG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCk7CisgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwor
ICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKIH0KIAogSW50UmVjdCBSZW5kZXJMaXN0
Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4IDc2ZTIzZTRkMDk5NmU2YmZiZTQw
YTY0NDExNjQ0NTlhYTY3ODBkOGIuLjFiYTVhNjAyMWU4ZDIxM2FiZDQyNGU3ZWVmNTIzODRiZjQw
MTkwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAg
LTQ5LDE0ICs0OSwxNCBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxN
YXJxdWVlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLVJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxh
eWVyKQorUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllclNjcm9sbGFibGUq
IGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAsIG1fdGltZXIoKnRoaXMsICZSZW5k
ZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1hcnF1ZWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmgKaW5kZXggMWM3ODg0OTVlMGU4ODU3NWU4MGJmOTMwOGEyZjQ5NGZiNGE2MjhkNS4u
MDg0YWQzMzc3NDg2ZGY5Y2U4MzI1NjY2Njg1NDUyYzQ3Yjk4MjMzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCkBAIC00OSwxMyArNDksMTMgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTsKIAogLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBhdXRvLXNjcm9sbGluZyBmb3Ig
PG1hcnF1ZWU+CiBjbGFzcyBSZW5kZXJNYXJxdWVlIGZpbmFsIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShSZW5kZXJNYXJxdWVlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5kZXJMYXllciopOworICAgIGV4cGxpY2l0
IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKik7CiAgICAgflJlbmRlck1hcnF1
ZWUoKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CkBAIC04MCw3ICs4MCw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKIAotICAgIFJlbmRlckxheWVyKiBt
X2xheWVyOworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9sYXllcjsKICAgICBUaW1lciBt
X3RpbWVyOwogICAgIGludCBtX2N1cnJlbnRMb29wIHsgMCB9OwogICAgIGludCBtX3RvdGFsTG9v
cHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggNzEx
M2Y1YzMyOTAwZWQ3NjRiMzZlNDQ3OWI5NjA3ZjA3NzliMTJmOC4uOTU3NTQxYTZiZTgxZjFjMGM2
Y2NkN2NhNDZmNWNiZjFjM2I2ZDlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaApAQCAtMTAwLDYgKzEwMCw3IEBAIGNsYXNzIFJlbmRlck9iamVjdCA6IHB1YmxpYyBD
YWNoZWRJbWFnZUNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlck9iamVjCiAgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyRWxl
bWVudDsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBz
aG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVu
IGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25z
dHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggNjI2MGE4MTU3OWY1ODRmNThjYzQwZjdjZTA5
MDc1YjliMDg2NWFmOC4uZWUyYWU2NjUyYTIyMmJiZDM4NWM4YjZkM2M4OTZkNjJkMjRjMDZlNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MDAsMTcgKzQwMCwyMiBAQCBi
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bAogICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayog
cmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJl
bmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7
CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICBy
ZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7
CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNj
cm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJl
bmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIo
KTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJl
Y3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIHJlbmRlcmVy
ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVu
ZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
ICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZTA1NjBkN2E1MmE5NTI2NGQ2
YTNkNTY4MmQ3OTM1Njk1YzIzZjYwYy4uY2JjODljZDM4MmJjYjlhM2UyZjdiMmYzNjc1YmVmZjEx
OWM2YjI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdE1hcmtlci5oIgpAQCAtNTk5LDE1ICs1OTksMTYgQEAgc3RhdGljIHZvaWQgd3JpdGVM
YXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlv
dXRSZWMKICAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8IGFkanVzdGVkQ2xpcFJlY3Q7CiAg
ICAgfQogCi0gICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAg
ICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLngoKSkKLSAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsWCAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLngoKTsKLSAgICAgICAgaWYgKGxheWVy
LnNjcm9sbE9mZnNldCgpLnkoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IGxh
eWVyLnNjcm9sbE9mZnNldCgpLnkoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYm
IHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IGxheWVyLnNj
cm9sbFdpZHRoKCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgbGF5ZXIu
c2Nyb2xsV2lkdGgoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9J
bnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBsYXllci5zY3JvbGxIZWln
aHQoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbGF5ZXIuc2Nyb2xs
SGVpZ2h0KCk7CisgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVy
ID0gKmxheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
LnNjcm9sbE9mZnNldCgpLngoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IHNj
cm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIg
PDwgc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgaWYgKGxheWVy
LnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRo
KCkpICE9IHNjcm9sbGFibGVMYXllci5zY3JvbGxXaWR0aCgpKQorICAgICAgICAgICAgdHMgPDwg
IiBzY3JvbGxXaWR0aCAiIDw8IHNjcm9sbGFibGVMYXllci5zY3JvbGxXaWR0aCgpOworICAgICAg
ICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+
Y2xpZW50SGVpZ2h0KCkpICE9IHNjcm9sbGFibGVMYXllci5zY3JvbGxIZWlnaHQoKSkKKyAgICAg
ICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLnNjcm9sbEhl
aWdodCgpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9s
bGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CiAgICAgICAgIGlmICghc2Nyb2xs
YmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IDE3MjQ4Y2Rh
MzRhYTZiNmE3MTk2ZjdmMDA2ZjIwODVmYTlhYjQyNmMuLjM0NzA2ZDY2ZWUwMDMzNTMwMWVhMDZk
MTAyNTQyMTU3NzM2NjhlYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJI
VE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgpAQCAtMzI5LDggKzMyOSw4IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAg
ICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJl
Y3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9CiAKLSAgICBpZiAoaGFz
TGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRS
ZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50
T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIGlmIChoYXNMYXllcigpICYmIHNjcm9sbGFi
bGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5jYW5SZXNpemUoKSkKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyKCktPnBhaW50UmVzaXplcihwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVk
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5mby5yZWN0KTsKIH0KIAogdm9p
ZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVybGFwcGVkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGMwNTNhNGRkYTIwMDhlZmQ3YTY2
ODhkMzQ0OGZmYmYzYmZjYmUxZjUuLjgyYjliZTRhNzBhZTk3ZDg1ZjZjOTFkMjQxM2NlNmJiZjc4
MGU3OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1NSw2ICsxNTUs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5o
IgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIK
QEAgLTE5MDYsNyArMTkwNyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2Nyb2xs
QnlTaW11bGF0aW5nV2hlZWxFdmVudChFbGVtZW50JiBlbGVtZW50LCBkb3ViCiAgICAgICAgIGlm
ICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAgICAgIHNjcm9s
bGFibGVBcmVhID0gYm94LmxheWVyKCk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LnNj
cm9sbGFibGVMYXllcigpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpA
QCAtMjkwMSw3ICsyOTAyLDcgQEAgRXhjZXB0aW9uT3I8U2Nyb2xsYWJsZUFyZWEqPiBJbnRlcm5h
bHM6OnNjcm9sbGFibGVBcmVhRm9yTm9kZShOb2RlKiBub2RlKSBjb25zdAogICAgICAgICBpZiAo
aXM8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVh
ID0gJmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAgICAg
ICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICB9IGVs
c2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYmY2OGE3MTQ1ZGE4OThlZDRlN2Nl
NzRlNjE1N2YwMGJkNzBmN2E2My4uYTRlNzYzYjQ1ODkyYjk5MGIzM2M2NjM4ZDlkMDJmNjkyMGI4
ZjcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1
cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVy
U2Nyb2xsYWJsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZp
ZXcuaD4KQEAgLTIwMzUsMTAgKzIwMzUsMTIgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3IoKTsKICAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2Nyb2xsRGVsdGEoLWRl
bHRhWCAqIHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2NhbGVGYWN0b3IpOwogCi0gICAgICAgIFJl
bmRlckxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxscHRyOworICAgICAgICBSZW5kZXJMYXll
clNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXllciA9IG51bGxwdHI7CiAgICAgICAgIGlmIChtX2dl
c3R1cmVUYXJnZXROb2RlICYmIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7CisgICAgICAgICAgICBpZiAoYXV0byog
bGF5ZXIgPSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVMYXllcigp
LT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYs
IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406545</attachid>
            <date>2020-08-13 14:54:15 -0700</date>
            <delta_ts>2020-08-13 16:05:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215443-20200813235413.patch</filename>
            <type>text/plain</type>
            <size>327308</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg5YTZiNjkyYjFlNzUy
MDQ2YjBhZDI5YjY0NTM1NDM3ODAxYzVhOC4uODI4ZWUxNzA2NjI5MDZhNTE4MTIwZjc4MTg2ZmY1
ZmYwNTM2ZDIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OSBAQAorMjAyMC0wOC0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBNb3Zl
IHNjcm9sbCAvIG92ZXJmbG93IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDQzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5
ZXIgaW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBN
b3ZlIGFsbCBzY3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGlu
dG8KKyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSBy
ZWR1Y2VzIHRoZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNs
ZWFucyB1cCB0aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNy
ZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNo
ZXMgd2lsbCBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1h
bmQsIGlmCisgICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2Fy
eS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVh
ZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6
CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6
OnJlbmRlck1hcnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJs
dXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAg
KiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbElu
RGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAg
ICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNj
cm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjplbmRBbmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVE
aWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0dXBXaGVlbEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNl
dFNjcm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3Ap
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9s
bGJhclNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
bG9naWNhbFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25U
b0JlT2JzY3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQ
b3NpdGlvbkNvbnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5k
ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6On5SZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxl
TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nRnJhbWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Z2V0UmVjdFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjphdXRvc2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2Ny
aXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1Rv
cCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
YWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRP
cmRlclRyZWVSZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpj
b21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZs
b3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dT
Y3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dT
Y3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBh
cmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNj
cm9sbGluZ1JvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0ZWRT
Y3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBh
blNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvWFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9Z
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRT
Y3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkU3RhcnRTY3JvbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21S
ZXNpemVDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblJlc2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxv
d1Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlSZXBhaW50Qmxv
Y2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGlu
ZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bGluZ01heVJldmVhbEJhY2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OnN0eWxlUmVxdWlyZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZp
bmVzQXV0b21hdGljU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRh
bE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRl
U2Nyb2xsRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omlz
QWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
VmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVj
dEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNw
ZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVz
dGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2Fn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3Jv
bGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9s
bENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
Y2xlYXJTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpjbGVhclJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50
ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZU1hcnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xs
aW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBk
YXRlU2Nyb2xsYmFyU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGUuaDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1
ZWU6OlJlbmRlck1hcnF1ZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0
KToKKwogMjAyMC0wOC0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBiYWQgbWVyZ2UgaW4gcjI2NTQ4OApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hh
bmdlTG9nCmluZGV4IGI5OGI3YWIzZTdiODBkMWNmNzRmMmUzZThhYmU5ZmM5OGM1NTA2MjMuLjk4
OTA3M2ZmNTI4MDcxZDYzNzJmNjEwZDQxMWNmOWE3NzRmNWI0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wOC0xMyAgTmlrb2xhcyBaaW1tZXJt
YW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBNb3ZlIHNjcm9sbCAvIG92
ZXJmbG93IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBSZW5k
ZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICAqIFdlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6IFVzZSBSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUxheWVyKCkuCisKIDIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3JlYXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZl
IHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggYTZjYTU0MTBjNDFhZmZlYjFiYjVlZDEwNmE2
YWQxOTNiM2JhZjM3OC4uYzJmNzNiYjJjOWRkN2UyYzcxOTljNDU1MDQxMDU0M2U4ZmI1MzE5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzkxLDYgKzEzOTEsNyBAQCBzZXQoV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
CiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCiAgICAgcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaAorICAgIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFi
bGUuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1Jl
bmRlck1lZGlhLmgKICAgICByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggMjdlMmQ2MzZhODFiZTIyNDkyNjg4OTJhN2NiYWNiN2Q0Y2I4MGVjYy4uN2Y5ZTQyZDE0ZWJi
MTA3NmFiNDNiM2M5YzE0NjI3NmIxZjk3OTI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMjcsNiAr
MjEyNyw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFi
bGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKIHJlbmRlcmluZy9S
ZW5kZXJMYXlvdXRTdGF0ZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA2ODczODJkOWI4YjE3YTY0NjMwZDYzNzRkYWU0MzRhZDliZTgzOTYwLi5hM2Q0NmU4ZmNlYjFi
MDU1OTAyZmIwNTQ1OGVjMWNkMGQwOGQwOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDksNiArMzA5LDcgQEAKIAkJMEY1
ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQjBCMEYxMkEyNjkwMDUx
RDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1ODBDRjkwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxMkRFOUIwMDUx
RDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjU4MENGRjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1
ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBMTE0OTY5MzkxMDBG
QjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCAqLzsgfTsKIAkJMEY1ODBGQUYxNDk4MDBE
NDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1h
dGlvblV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVj
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjdB
NTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU5MjQsNiArNTkyNSw4IEBA
CiAJCTBGNTgwQ0ZBMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBDRkIwRjEyREU5QjAw
NTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1ODBDRkMwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkExMTQ5NjkzOTEwMEZC
NUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdM
YXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAw
RkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBbmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI4NzYzLDYgKzI4NzY2LDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyog
UmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8q
IFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4
QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1ODBDRkMwRjEzQUI5
QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8sCisJCQkJMEY1ODBDRkIw
RjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovLAogCQkJCTJEOTA2
NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5
MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8sCiAJCQkJQkMz
M0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAqLywKQEAgLTMz
MTE2LDYgKzMzMTIxLDcgQEAKIAkJCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MENGRDBGMTJERTlCMDA1MUQ2
ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzQzI0NEZF
QUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRl
ckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFB
NDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKaW5kZXggM2M0NGVjODk4NGI2N2Y2Y2E5OGI3MDk3ZjQ3YzYwMjZkODU2NTQx
Ny4uYTJlZGJhNGE5NjQ4MzIxYzhkZGYxYTc3MjEwNjc0NWY3MTNiYzExMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTE2LDcgKzM5MTYsOCBAQCBTY3Jv
bGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJ
ZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3Jv
bGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gu
bGF5ZXIoKTsKKyAgICBBU1NFUlQoYm94LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4g
Ym94LnNjcm9sbGFibGVMYXllcigpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MjksNyArMzkz
MCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50
UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaXMg
cG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92ZXJm
bG93LgotICAgIGJveC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNTRVJU
KGJveC5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgYm94LnNjcm9sbGFibGVMYXllcigpLT5zY3Jv
bGxUb09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMwZTk1N2RiYTAxYzE3MTYyNDQ1MWVjNDQ0Y2QuLjg4
MDRhMTZiZWMxNGNkMDJmMDdhZWZhNjliZjliMTIwNmQyNmQzMWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNpbmNsdWRlICJQc2V1ZG9DbGFzc0NoYW5nZUludmFs
aWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50
ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgpA
QCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdM
ZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0ICog
cmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8sIHRo
aXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAg
cmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0
Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTMzMiw4ICsxMzMyLDggQEAgdm9pZCBF
bGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNsYW1wZWRUb3Ag
PSBjbGFtcFRvSW50ZWdlcihuZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29t
KCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGlu
ZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5p
bWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNsYW1wZWRU
b3AsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFu
aW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxh
eWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJM
YXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBy
ZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBkOTdlNjZmOGY4YWYw
NWZhMDI3NzZhMDA4NTBmNWY1NWFlODYxZjNmLi5kOGQ0NzdlMWM4YjAzZDllNzBiZTEyYTBiYTAx
YTQ2MWMyY2I4NGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtMjQxMiw5ICsyNDEyLDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVj
dGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKICAgICAg
ICAgICAgIGlmICghbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KSB7Ci0gICAgICAgICAgICAgICAg
bGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAg
ICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAg
ICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwg
eyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdp
blNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2Uo
KTsKICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQogICAgICAgICAgICAg
ICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVh
bGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKaW5kZXggMGFkZjdkMTY0ZTJl
NGUyYjBmYjExM2YwM2ExYmQzYTczYzI3MTI3NS4uMDQ4ZjA1MGY4MWE4NjFjMTQ0NzEwNDljZDYy
NTUzZGEwMGU5ODEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVl
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50
LmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KIApAQCAtMTc1LDcgKzE3NSw4IEBAIFJlbmRlck1hcnF1ZWUqIEhUTUxNYXJxdWVlRWxl
bWVudDo6cmVuZGVyTWFycXVlZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFy
ZW5kZXJlcigpLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+bWFycXVlZSgpOworICAgIEFTU0VS
VChyZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgcmV0dXJu
IHJlbmRlckJveE1vZGVsT2JqZWN0KCktPnNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWZiNmQ4YzU5MWQ3ZmZmZDQ0ZTFjNDQyNjc4
NmEzLi43MjIyNGY5NTEwYTk2OWY3ZDRhZGFhNDFjNjhiOTU3ODFlY2I5MGQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OCw3ICs0OCw3IEBACiAj
aW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBUZXh0RmllbGRJ
bnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAoIWlubmVyVGV4dFJlbmRlcmVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBpbm5lckxheWVyID0gaW5uZXJUZXh0UmVuZGVy
ZXItPmxheWVyKCk7CisgICAgYXV0byogaW5uZXJMYXllciA9IGlubmVyVGV4dFJlbmRlcmVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKTsKICAgICBpZiAoIWlubmVyTGF5ZXIpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGE2YTYyYWM5ZjZlZWNhNDUw
MWNkNDdhNWYwMGUwZTUxZmY3NjEzOTIuLmI1MDJlZGFhYTlkYTQ3OGM5ZDA3NzE4ZjY4MTM2YTY2
NTMwODhhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTc5LDcgKzc5
LDcgQEAKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3gu
aCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCkBAIC0zNDMsMTIgKzM0MywxNCBAQCBzdGF0aWMgYm9vbCBoYW5kbGVXaGVl
bEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChOb2RlKiBzdGFydE5vZGUsIGNvbnN0IFdo
ZQogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7CiAgICAgICAgIGlmIChSZW5kZXJM
YXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7CiAgICAgICAg
ICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQbGF0Zm9ybUV2
ZW50KCk7Ci0gICAgICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQ7Ci0gICAgICAgICAg
ICBpZiAocGxhdGZvcm1FdmVudCkgewotICAgICAgICAgICAgICAgIGF1dG8gY29waWVkRXZlbnQg
PSBwbGF0Zm9ybUV2ZW50LT5jb3B5V2l0aERlbHRhc0FuZFZlbG9jaXR5KGZpbHRlcmVkUGxhdGZv
cm1EZWx0YS53aWR0aCgpLCBmaWx0ZXJlZFBsYXRmb3JtRGVsdGEuaGVpZ2h0KCksIGZpbHRlcmVk
VmVsb2NpdHkpOwotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBib3hMYXll
ci0+aGFuZGxlV2hlZWxFdmVudChjb3BpZWRFdmVudCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gZGlkU2Nyb2xsSW5TY3JvbGxhYmxl
QXJlYSgqYm94TGF5ZXIsIHdoZWVsRXZlbnQpOworICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdX
YXNIYW5kbGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoYXV0byogYm94TGF5ZXJTY3JvbGxh
YmxlID0gYm94TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHBsYXRmb3JtRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9
IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9y
bURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRW
ZWxvY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBib3hM
YXllclNjcm9sbGFibGUtPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0g
ZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXJTY3JvbGxhYmxlLCB3aGVlbEV2ZW50
KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1dhc0hhbmRsZWQp
IHsKICAgICAgICAgICAgICAgICBzdG9wRWxlbWVudCA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmVs
ZW1lbnQoKTsKQEAgLTE1NjgsNyArMTU3MCw3IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZlbnRIYW5k
bGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29sIHNoCiAg
ICAgICAgIGJvb2wgaW5SZXNpemVyID0gZmFsc2U7CiAgICAgICAgIGlmIChyZW5kZXJlciAmJiBy
ZW5kZXJlci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFdpdGggcmlnaHQt
YWxpZ25lZCB0ZXh0IGluIGEgYm94LCB0aGUgcmVuZGVyZXIgaGVyZSBpcyB1c3VhbGx5IGEgUmVu
ZGVyVGV4dCwgd2hpY2ggcHJldmVudHMgc2hvd2luZyB0aGUgcmVzaXplIGN1cnNvcjogd2Via2l0
Lm9yZy9iLzIxMDkzNS4KLSAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRvd25jYXN0PFJl
bmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKSkgeworICAgICAgICAgICAg
aWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRl
cmVyKS5zY3JvbGxhYmxlTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxh
eWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9jYWxQ
b2ludCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluUmVzaXplcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigp
OwpAQCAtMTgxMiwxMiArMTgxNCwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQ
cmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1Nb3VzZQogCiAgICAg
UmVuZGVyTGF5ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJlbmRlcmVyKCkgPyBtX2NsaWNrTm9k
ZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IG51bGxwdHI7CiAgICAgYXV0byBsb2Nh
bFBvaW50ID0gcm91bmRlZEludFBvaW50KG1vdXNlRXZlbnQuaGl0VGVzdFJlc3VsdCgpLmxvY2Fs
UG9pbnQoKSk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9s
KGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJblJlc2l6ZU1vZGUodHJ1ZSk7Ci0g
ICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKLSAgICAgICAgbV9vZmZzZXRGcm9tUmVzaXpl
Q29ybmVyID0gbGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAg
ICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgOiBu
dWxscHRyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNv
bnRyb2wobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0SW5S
ZXNpemVNb2RlKHRydWUpOworICAgICAgICAgICAgbV9yZXNpemVMYXllciA9IHNjcm9sbGFibGVM
YXllcjsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IHNjcm9sbGFibGVM
YXllci0+b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIGlu
dmFsaWRhdGVDbGljaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQo
dHJ1ZSk7CkBAIC0xOTE4LDEwICsxOTIyLDEwIEBAIFNjcm9sbGFibGVBcmVhKiBFdmVudEhhbmRs
ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBp
ZiAoIWxheWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVy
KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5l
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENy
b3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKICAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxh
eWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxh
YmxlTGF5ZXI7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDYx
NzkwNWUwMWIxZGRmMGQxZTBjMWQ0ZWViODM0OGU3OWVhYmIyYTEuLjg3MTliYTAzNjU2YmE3ODc4
OTRiMzU1ZTFlNTAzNDQ1YTA5ZTIyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApA
QCAtODMsNyArODMsNyBAQCBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBQbGF0Zm9y
bVdoZWVsRXZlbnQ7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xh
c3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGU7CiBjbGFzcyBSZW5k
ZXJXaWRnZXQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKQEAgLTU1
MCw3ICs1NTAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3N2Z1BhbiB7IGZhbHNlIH07CiAK
LSAgICBSZW5kZXJMYXllciogbV9yZXNpemVMYXllciB7IG51bGxwdHIgfTsKKyAgICBSZW5kZXJM
YXllclNjcm9sbGFibGUqIG1fcmVzaXplTGF5ZXIgeyBudWxscHRyIH07CiAKICAgICBSZWZQdHI8
RWxlbWVudD4gbV9jYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQ7CiAgICAgYm9vbCBtX2V2ZW50
SGFuZGxlcldpbGxSZXNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudCB7IGZhbHNlIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggODMyYTBkNWZlOTViZGIzOTdlMWI4YWJmYmJh
ZWRiODgxNzk2ZjQ5Yy4uNGE1YWM5ZmEzN2IwNDE0OGUxYThkNTk5Yjg4MjgzYTI3YjNiMjRmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNzYsOSArNzYsOSBAQAogI2luY2x1ZGUg
IlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jv
b3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXJQYXJ0LmgiCkBAIC0yNTYxLDcgKzI1NjEsOCBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYgKCFsYXlvdXRDb250ZXh0KCku
aXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKSB7CiAg
ICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpKSB7
CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAgICAgICAgICAgIHJlbmRl
clZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgp
OworICAgICAgICAgICAgQVNTRVJUKHJlbmRlclZpZXctPnNjcm9sbGFibGVMYXllcigpKTsKKyAg
ICAgICAgICAgIHJlbmRlclZpZXctPnNjcm9sbGFibGVMYXllcigpLT51cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTM4MzMs
MTAgKzM4MzQsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIEZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8qIGxh
eWVyID0gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBpZiAoIWxheWVyKQor
ICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXll
cihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5v
KTsKKyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObyk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5n
Qm94KGJvb2wqKSBjb25zdApAQCAtNDMxMSw4ICs0MzEyLDEwIEBAIHZvaWQgRnJhbWVWaWV3Ojpw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9v
dExheWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJl
aGF2aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9y
aWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5Q
YWludFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0g
ICAgaWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2
ZW50UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxi
YXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkp
IHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRC
ZWhhdmlvciwgcmVuZGVyZXIpOworICAgIH0KIAogICAgIGRpZFBhaW50Q29udGVudHMoY29udGV4
dCwgZGlydHlSZWN0LCBwYWludGluZ1N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0
aWFsTmF2aWdhdGlvbi5jcHAKaW5kZXggNGQ4YjcyZjhlNWJjYjBlODMyZDNlYzNkZGMyZWU5Mjky
YjQ5ZmU4Ni4uZGIxYTRlYmRlZDJmYWRkMWZmZjBiNWJkYjJhOTgwMDQxZGZhZjhmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTQwLDcgKzQwLDcgQEAK
ICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklu
bGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzk0LDcgKzM5NCwxMSBAQCBib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRh
aW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAKLSAgICAgICAgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5n
TGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOworICAgICAgICBh
dXRvKiBlbmNsb3NpbmdMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xh
eWVyKCk7CisgICAgICAgIEFTU0VSVChlbmNsb3NpbmdMYXllcik7CisKKyAgICAgICAgaWYgKGF1
dG8qIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSA9IGVuY2xvc2luZ0xheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgICAgIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsQnlS
ZWN1cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggOWJiOGU5MmNhYWM1Y2Y1MzJi
NzliOTBlZWFiM2NmMjE1NDBhZmY0My4uZDE2MjZlYzNjMjdiMWZiNjNlZmI1M2E4MGYwMmU2Yzg2
ODA2ZWM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTgxOSwxNCArODE5
LDE2IEBAIHZvaWQgRnJhbWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRm9yTm9kZShj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24sIE5vZGUqCiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVu
ZGVyZXItPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckxheWVyJiBs
YXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigp
OworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5k
ZXJlcikuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBvbGRTY3JvbGxUeXBlID0gbGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKTsK
LSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBl
OjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKLSAgICBsYXllci5zY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3Jv
bGxUeXBlKG9sZFNjcm9sbFR5cGUpOworICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLT5j
dXJyZW50U2Nyb2xsVHlwZSgpOworICAgIGxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1Vz
ZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsK
KyAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKKyAg
ICBsYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAKLSAgICBsYXll
ci5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPwor
ICAgIGxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2Fs
bCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggYzA5MzBi
NjM0OTVlNzE4MTU5OTFhNDA2YTRkNjY1YTI3YmE3NzE0Yi4uZjg0M2U5ZTNmYzdmNWMzY2FhMTg2
NGU1ZWVmYzc4NTVlY2RhMTQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbQpAQCAtNTIsNyArNTIsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1FdmVudEZhY3Rv
cnlNYWMuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJSYW5nZS5oIgot
I2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2ltcG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2lt
cG9ydCAiUmVuZGVyV2lkZ2V0LmgiCkBAIC03ODIsNyArNzgyLDcgQEAgc3RhdGljIFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZvckJveChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8
UmVuZGVyTGlzdEJveD4oYm94KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RC
b3g+KCZib3gpOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAgIHJldHVybiBib3guc2Ny
b2xsYWJsZUxheWVyKCk7CiB9CiAgICAgCiBzdGF0aWMgQ29udGFpbmVyTm9kZSogZmluZEVuY2xv
c2luZ1Njcm9sbGFibGVDb250YWluZXIoQ29udGFpbmVyTm9kZSogbm9kZSwgY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hs
aWdodERhdGEuY3BwCmluZGV4IGU1YTQ3YjcwNzRkY2M5MzFkYjAwMzc3ODNhM2UyOWFmZDdmZGRl
NDMuLmFlZTUwYjA5YTkzMGRjMzk1NTMwNmZlYzE0NTBjYjc3YWRjNzAyNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJSYW5n
ZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBA
IC0yMDksNyArMjA5LDggQEAgdm9pZCBIaWdobGlnaHREYXRhOjpzZXRTZWxlY3Rpb24oY29uc3Qg
UmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2sKIAogdm9pZCBIaWdobGln
aHREYXRhOjpjbGVhclNlbGVjdGlvbigpCiB7Ci0gICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPnJl
cGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9s
bGFibGVMYXllcigpKTsKKyAgICBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCktPnJlcGFp
bnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKICAgICBzZXRTZWxlY3Rpb24oeyB9LCBIaWdobGlnaHRE
YXRhOjpSZXBhaW50TW9kZTo6TmV3TWludXNPbGQpOwogfQogCkBAIC0zMTksOCArMzIwLDEwIEBA
IHZvaWQgSGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmIG5l
d1NlbGVjdGlvbiwgUmVwYWludE1vZGUKICAgICAgICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxl
Y3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSk7
CiAgICAgfQogCi0gICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhp
bmcpCi0gICAgICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpOworICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2RlOjpOb3Ro
aW5nKSB7CisgICAgICAgIEFTU0VSVChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCkpOwor
ICAgICAgICBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzKCk7CisgICAgfQogCiAgICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBz
dGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2Fp
biBhbmQKICAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDZiNTNjYmE4NWM4ZTlkYzU5NzE1
YjYzOGNhZTU3NWY4MGU0OGY5NTQuLmE2N2NiMjJjMjNkMzNmMzM4YzhhMGE2NjRmZWI1OTJlMGY5
MDZjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNTgs
NyArNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1
ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgog
I2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC01NTMsNyArNTUzLDggQEAgdm9pZCBSZW5k
ZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rp
b24oKQogCiAgICAgZm9yIChhdXRvKiBibG9jayA6IGJsb2Nrc1RvVXBkYXRlKSB7CiAgICAgICAg
IEFTU0VSVChibG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkpOwotICAgICAgICBibG9jay0+bGF5ZXIo
KS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgICAgIGlmIChibG9jay0+c2Ny
b2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBibG9jay0+c2Nyb2xsYWJsZUxheWVyKCktPnVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogICAgICAgICBibG9jay0+Y2xlYXJMYXlvdXRP
dmVyZmxvdygpOwogICAgIH0KIH0KQEAgLTU4NCw4ICs1ODUsOCBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigpLT51cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkpCisgICAg
ICAgIHNjcm9sbGFibGVMYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0K
IAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKQEAgLTExMDksMTIgKzExMTAsMTUgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCkKICAgICBpZiAocHVzaGVkQ2xpcCkKICAgICAgICAgcG9wQ29udGVu
dHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogCisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gT3VyIHNjcm9s
bGJhciB3aWRnZXRzIHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8sIHNvIHRoYXQg
dGhleSB3b3JrIHByb3Blcmx5IHdpdGgKICAgICAvLyB6LWluZGV4LiBXZSBwYWludCBhZnRlciB3
ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Nyb2xsYmFycyB3
aWxsCiAgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4KICAgICBpZiAoKHBo
YXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9PSBQYWludFBoYXNl
OjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKQog
ICAgICAgICAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYm
IHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpICYmICFwYWludEluZm8ucGFp
bnRSb290QmFja2dyb3VuZE9ubHkoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50
T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKKyAgICAgICAgc2Nyb2xs
YWJsZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCBy
b3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50
SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTE0Njks
MTYgKzE0NzMsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIAogICAgICAgICBMYXlvdXRS
ZWN0IGdhcFJlY3RzQm91bmRzID0gc2VsZWN0aW9uR2FwcygqdGhpcywgcGFpbnRPZmZzZXQsIExh
eW91dFNpemUoKSwgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgY2FjaGUsICZwYWludElu
Zm8pOwogICAgICAgICBpZiAoIWdhcFJlY3RzQm91bmRzLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBsYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9z
aW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyKSB7CiAgICAgICAgICAgICAg
ICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KC1wYWludE9mZnNldCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFoYXNMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QgbG9jYWxC
b3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgICAgICAgICBmbGlwRm9yV3JpdGlu
Z01vZGUobG9jYWxCb3VuZHMpOwotICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcyA9
IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyksICZsYXllci0+cmVu
ZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGxheWVyLT5yZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnYXBS
ZWN0c0JvdW5kcy5tb3ZlQnkobGF5ZXItPnJlbmRlckJveCgpLT5zY3JvbGxQb3NpdGlvbigpKTsK
KyAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVh
ZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCAmbGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJlcigpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTY3Jv
bGxhYmxlLT5yZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBnYXBS
ZWN0c0JvdW5kcy5tb3ZlQnkobGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJCb3goKS0+c2Nyb2xsUG9z
aXRpb24oKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxheWVyLT5hZGRC
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOworICAgICAgICAgICAgICAg
IGxheWVyU2Nyb2xsYWJsZS0+YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGdhcFJlY3RzQm91
bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIwMDEsNyArMjAwNSwx
MCBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3Zl
cmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVy
IC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQo
bG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsK
IH0KIAogTm9kZSogUmVuZGVyQmxvY2s6Om5vZGVGb3JIaXRUZXN0KCkgY29uc3QKQEAgLTI0OTgs
OSArMjUwNSwxMSBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAodGhlIGNv
bnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdo
aWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAg
b24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9y
IGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVy
ZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAg
IGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8
IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxi
YXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAgICAgIDog
KGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQo
KS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsK
LSAgICAgICAgCisgICAgICAgIGJvb2wgaGFzTWFycXVlZSA9IHNjcm9sbGFibGVMYXllcigpID8g
c2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKSA6IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGFz
VmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IChzY3JvbGxhYmxlTGF5ZXIo
KS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueSgpKSA6IGZhbHNlOworICAgICAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBz
Y3JvbGxhYmxlTGF5ZXIoKSA/IChzY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpIHx8IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkpIDogZmFsc2U7Cisg
ICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAoaGFzTWFycXVlZSB8fCAoZGlyZWN0aW9uID09
IEhvcml6b250YWxMaW5lID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKKwogICAg
ICAgICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUgPyBPcHRpb25h
bDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7CiAgICAgICAgIAogICAg
ICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCBlMjEzYWFjNzFhOTQ0NTg3M2UyMTYw
NDE2NGU0MTQ0NThiMDZjYTkwLi5jNTFjNTBjZTU3YmRhZTAwMzU0YWRkMjk0MmQxY2NlNzQ4ZGMz
ODJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApA
QCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIFJl
bmRlckJsb2NrRmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYg
bWluTG9naWNhbFdpZHRoLAogCiAgICAgaWYgKCFzdHlsZSgpLmF1dG9XcmFwKCkgJiYgY2hpbGRy
ZW5JbmxpbmUoKSkgewogICAgICAgICAvLyBBIGhvcml6b250YWwgbWFycXVlZSB3aXRoIGlubGlu
ZSBjaGlsZHJlbiBoYXMgbm8gbWluaW11bSB3aWR0aC4KLSAgICAgICAgaWYgKGxheWVyKCkgJiYg
bGF5ZXIoKS0+bWFycXVlZSgpICYmIGxheWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkp
CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFy
cXVlZSgpICYmIHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpvbnRhbCgpKQog
ICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gMDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggOGZhNmRmYjM0OWUyZjNjY2RmYzc3YmU1ZDExYzI4
OWM3ZTA0ZjUxMS4uNzU0YmYzMzc3ZjA0N2ZhMmFjMTY0M2ExZDYwOWM0MjY1MWRkZjIzNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTU4LDggKzU4LDggQEAKICNp
bmNsdWRlICJSZW5kZXJHcmlkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC0zMTksMTEg
KzMxOSwxMSBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8gSWYgb3VyIHpvb20g
ZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExlZnQvVG9wLCB3ZSBu
ZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3IHpvb21lZCBjb29y
ZGluYXRlIHNwYWNlLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmIG9s
ZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZl
Wm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gbGF5ZXIo
KS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xs
YWJsZUxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBu
ZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKKyAgICAgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xs
UG9zaXRpb24gPSBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICAgICAg
ZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2NhbGUoem9vbVNj
YWxlRmFjdG9yKTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNldFBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgfQogCiAgICAgLy8gT3VyIG9w
YXF1ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBA
IC01NDIsOCArNTQyLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNsaWVudEhlaWdodCgpIGNv
bnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9s
bFdpZHRoKCk7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigp
KQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFdpZHRoKCk7CiAgICAg
Ly8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNoZXMgSUUuCiAg
ICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCiAgICAg
aWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CkBAIC01NTUsOCArNTU1LDgg
QEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94Ojpz
Y3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXll
cigpKQotICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgaWYgKGhh
c092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyKCktPnNjcm9sbEhlaWdodCgpOwogICAgIC8vIEZvciBvYmplY3RzIHdpdGgg
dmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRv
IHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMu
CkBAIC01NjUsMTIgKzU2NSwxMiBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25z
dAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgp
IDogMDsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkg
PyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOwogfQogCiBpbnQg
UmVuZGVyQm94OjpzY3JvbGxUb3AoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0Ns
aXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOworICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFi
bGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94
OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01NzksNyArNTc5
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxheW91dElmTmVl
ZGVkKCkKICAgICAgICAgc2V0TG9naWNhbEhlaWdodCgwX2x1KTsKIH0KIAotc3RhdGljIHZvaWQg
c2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCitzdGF0aWMgdm9pZCBz
ZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAg
ICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgpOwogICAgIGlmICghcGFnZS5p
c01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQpAQCAtNTg5LDI2ICs1ODksMjYgQEAgc3RhdGljIHZv
aWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCiAKIHZvaWQgUmVu
ZGVyQm94OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAg
ICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0
dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9z
aXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgc2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBh
bmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIo
KSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAg
IGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcs
IGFuaW1hdGVkKTsKKyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxhYmxlTGF5ZXIo
KSk7CisgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0
ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNl
dFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OworICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBz
Y3JvbGxhYmxlTGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUs
IGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3QKQEAgLTgwOCwyNCArODA4LDMwIEBAIGJvb2wgUmVuZGVyQm94OjpmaXhlZEVs
ZW1lbnRMYXlzT3V0UmVsYXRpdmVUb0ZyYW1lKGNvbnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3KSBj
CiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9
PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1
dG8pOworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigpLT5oYXNPdmVy
bGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0eWxl
KCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WSgp
ID09IE92ZXJmbG93OjpBdXRvOwogfQogCiBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250
YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICAm
JiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkg
fHwgIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNj
cm9sbGFibGVMYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvOwogfQogCiBpbnQgUmVu
ZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5j
bHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJX
aWR0aCgpIDogMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpICYm
IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoKSBjb25zdAogewotICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUo
KSA/IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CisgICAgcmV0dXJu
IGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpICYmIHNjcm9sbGFibGVMYXllcigpID8g
c2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CiB9CiAK
IGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CkBA
IC04MzQsMTIgKzg0MCwxMiBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dp
Y2FsV2lkdGgoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXll
cigpICYmIGxheWVyKCktPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlQo
c2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0K
IAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxv
d1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkg
ewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxh
eWVyKCktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NDgsMTUgKzg1NCwxNCBAQCBpbnQg
UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29s
IFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9w
RWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlm
IChib3hMYXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKSB7Ci0gICAgICAgIGlmIChzdG9wRWxlbWVudCkKLSAgICAgICAgICAgICpzdG9w
RWxlbWVudCA9IGVsZW1lbnQoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byogYm94TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXIoKTsK
KyAgICBpZiAoIWJveExheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFib3hM
YXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0b3BFbGVtZW50KQorICAgICAgICAqc3RvcEVsZW1l
bnQgPSBlbGVtZW50KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgUmVuZGVyQm94Ojpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCwgUmVuZGVyQm94
KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KQpAQCAt
ODc4LDE1ICs4ODMsMTQgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKIGJvb2wgUmVuZGVyQm94
Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BF
bGVtZW50KQogewogICAgIGJvb2wgc2Nyb2xsZWQgPSBmYWxzZTsKLSAgICAKLSAgICBSZW5kZXJM
YXllciogbCA9IGxheWVyKCk7Ci0gICAgaWYgKGwpIHsKKyAgICBhdXRvKiBsYXllciA9IHNjcm9s
bGFibGVMYXllcigpOworICAgIGlmIChsYXllcikgewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
ICAgICAvLyBPbiBNYWMgb25seSB3ZSByZXNldCB0aGUgaW5saW5lIGRpcmVjdGlvbiBwb3NpdGlv
biB3aGVuIGRvaW5nIGEgZG9jdW1lbnQgc2Nyb2xsIChlLmcuLCBoaXR0aW5nIEhvbWUvRW5kKS4K
ICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCi0gICAgICAgICAg
ICBzY3JvbGxlZCA9IGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxpbmVEaXJl
Y3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7Cisg
ICAgICAgICAgICBzY3JvbGxlZCA9IGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Ny
b2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0
eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11
bHRpcGxpZXIpOwogI2VuZGlmCi0gICAgICAgIGlmIChsLT5zY3JvbGwobG9naWNhbFRvUGh5c2lj
YWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAg
IGlmIChsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC04OTksOSArOTAzLDkgQEAgYm9v
bCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXQKICAgICBpZiAoc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50
ICYmICpzdG9wRWxlbWVudCA9PSBlbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoYiAmJiAhYi0+
aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBiLT5sb2dpY2FsU2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKKyAgICBSZW5kZXJCbG9j
ayogYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoYmxvY2sgJiYgIWJsb2NrLT5p
c1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sb2dpY2FsU2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTkzMiw3ICs5MzYsNyBAQCBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9n
cmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94Ojp1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBy
ZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94
OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKQEAgLTk5MSw4ICs5OTUsOCBA
QCBSZW5kZXJCb3gqIFJlbmRlckJveDo6ZmluZEF1dG9zY3JvbGxhYmxlKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHNv
dXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJv
bVBvaW50KHNvdXJjZSk7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CiB9CiAKIGJvb2wgUmVu
ZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CkBAIC0xMDE3LDExICsxMDIx
LDkgQEAgYm9vbCBSZW5kZXJCb3g6Om5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxjdWxhdGlvbigp
IGNvbnN0CiAKIFNjcm9sbFBvc2l0aW9uIFJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24oKSBjb25z
dAogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0Ns
aXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKLQot
ICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRp
b24oKTsKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CiB9
CiAKIExheW91dFNpemUgUmVuZGVyQm94OjpjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkgY29u
c3QKQEAgLTE1NjksNyArMTU3MSw3IEBAIGJvb2wgUmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3Vu
ZElzS25vd25Ub0JlT2JzY3VyZWQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmCiAgICAgaWYg
KCFnZXRCYWNrZ3JvdW5kUGFpbnRlZEV4dGVudChwYWludE9mZnNldCwgYmFja2dyb3VuZFJlY3Qp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigp
LT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgaWYgKHNjcm9sbGFibGVMYXll
cigpICYmIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBmb3JlZ3JvdW5kSXNLbm93blRv
QmVPcGFxdWVJblJlY3QoYmFja2dyb3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJhdGlvblRlc3RN
YXhEZXB0aCk7CkBAIC0xODg4LDEwICsxODkwLDEwIEBAIExheW91dFJlY3QgUmVuZGVyQm94Ojpv
dmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21l
CiAgICAgY2xpcFJlY3Quc2V0U2l6ZShjbGlwUmVjdC5zaXplKCkgLSBMYXlvdXRTaXplKGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsK
IAogICAgIC8vIFN1YnRyYWN0IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhlbS4KLSAgICBp
ZiAobGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3Jv
bGxhYmxlTGF5ZXIoKSkgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXllcigpLT52ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlwUmVjdC5jb250
cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxheWVyKCkt
Pmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAgICAgICBjbGlw
UmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFu
Y3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1cm4gY2xpcFJl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAppbmRleCA1ZGRmYzMxMTg0N2JhZmQ5M2YzMzk0OGMxMTI1YmVlZThjMjgzOTg3Li5jMGRh
N2VhMTEzNGY5NjYwMzU4Yzk5MjEzZGQzM2E4NmZlNWE1NjBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQ4LDkgKzQ4LDkg
QEAKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdt
ZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUu
aCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJU
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00OTAsOCArNDkwLDggQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWlu
dHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250YWluZXJMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9hdFNpemUoZW5j
bG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFk
ZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgp
ICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNs
b3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBjb250YWlu
ZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGlu
Z0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0Jv
eCAhPSBjb250YWluaW5nQmxvY2sgJiYgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCkpCisgICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxp
bmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5n
QW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5n
QW5jZXN0b3IpOwogICAgIH0KICAgICBjb25zdHJhaW50cy5zZXRDb250YWluaW5nQmxvY2tSZWN0
KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTA4LDggKzUw
OCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5n
TGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0
b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xv
c2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlw
cGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7
Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQot
ICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0g
ZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgmZW5j
bG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrICYmIGVuY2xvc2luZ0NsaXBwaW5n
TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxh
dGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xs
YWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpOwogICAgIH0KICAgICAvLyBGSVhNRTogRm9yIG5v
dywgYXNzdW1lIHRoYXQgfHRoaXN8IGlzIG5vdCB0cmFuc2Zvcm1lZC4KICAgICBzdGlja3lCb3hS
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5lY3N0b3Iuc2V0TG9jYXRpb24oc3RpY2t5TG9jYXRpb25SZWxh
dGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTQ4LDExICs1NDgsMTMgQEAgRmxvYXRSZWN0
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24o
KSBjb25zdAogCiAgICAgICAgIEZsb2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0ID0gZW5jbG9zaW5n
Q2xpcHBpbmdCb3gubG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGNsaXBSZWN0KSwgJnZp
ZXcoKSkuYm91bmRpbmdCb3goKTsKIAotICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldCA9
IEZsb2F0UG9pbnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOwor
ICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0
ID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNl
dCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChl
bmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHNj
cm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICBpZiAoZW5j
bG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zY3Jv
bGxhYmxlTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGly
ZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBl
bmNsb3NpbmdDbGlwcGluZ0JveC5zY3JvbGxhYmxlTGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJX
aWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWluaW5n
UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxiYXJP
ZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmluZ1Jl
Y3Q7CkBAIC04NDQsOCArODQ2LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAg
IAogICAgICAgICAvLyBBZGp1c3QgdGhlIHBhaW50IHJlY3QgdG8gcmVmbGVjdCBhIHNjcm9sbGVk
IGNvbnRlbnQgYm94IHdpdGggYm9yZGVycyBhdCB0aGUgZW5kcy4KICAgICAgICAgc2Nyb2xsZWRQ
YWludFJlY3QubW92ZUJ5KC10aGlzQm94LnNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICBzY3Jv
bGxlZFBhaW50UmVjdC5zZXRXaWR0aChiTGVmdCArIGxheWVyKCktPnNjcm9sbFdpZHRoKCkgKyBi
UmlnaHQpOwotICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQoYm9yZGVyVG9wKCkg
KyBsYXllcigpLT5zY3JvbGxIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgYXV0
byBzY3JvbGxXaWR0aCA9IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNj
cm9sbFdpZHRoKCkgOiAwOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRXaWR0aChiTGVm
dCArIHNjcm9sbFdpZHRoICsgYlJpZ2h0KTsKKyAgICAgICAgYXV0byBzY3JvbGxIZWlnaHQgPSBz
Y3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxIZWlnaHQoKSA6IDA7
CisgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldEhlaWdodChib3JkZXJUb3AoKSArIHNjcm9s
bEhlaWdodCArIGJvcmRlckJvdHRvbSgpKTsKICAgICB9CiAgICAgCiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIoY29udGV4dCwgZmFsc2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMWFlZDQ3MTVmNGVj
MzNmNGNjNTdjOTVlOWJkODM1OGIxNjA5MzdlMS4uYjAzM2YzZWU2ZDM3NDhmN2ZhOGUzZjUwY2U3
Mzk1MTRiMGU4YWU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC0yODYsMTYgKzI4NiwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgQ2xpcFJlY3RzJiBjbGlwUmVjdHMpCiAKICNlbmRpZgogCi1zdGF0
aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKLXsKLSAgICBzdGF0aWMgU2Ny
b2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKLSAgICByZXR1cm4gKytjdXJyZW50U2NvcGU7
Ci19Ci0KIERFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIp
OwogCi1SZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVu
ZGVyZXJMYXllck1vZGVsT2JqZWN0KQotICAgIDogbV9pc1JlbmRlclZpZXdMYXllcihyZW5kZXJl
ckxheWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCitSZW5kZXJMYXllcjo6UmVuZGVyTGF5
ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0LCBSZW5k
ZXJMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSkKKyAgICA6IG1fbGF5ZXJUeXBlKGxheWVyVHlw
ZSkKKyAgICAsIG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0Lmlz
UmVuZGVyVmlldygpKQogICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXJMYXll
ck1vZGVsT2JqZWN0LmlzTWVkaWEoKSkKICAgICAsIG1faXNOb3JtYWxGbG93T25seShmYWxzZSkK
ICAgICAsIG1faXNDU1NTdGFja2luZ0NvbnRleHQoZmFsc2UpCkBAIC0zMDMsMTkgKzI5OCwxNSBA
QCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVy
ZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV96T3JkZXJMaXN0c0RpcnR5KGZhbHNlKQogICAg
ICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUpCiAgICAgLCBtX2hhZE5lZ2F0aXZlWk9yZGVy
TGlzdChmYWxzZSkKLSAgICAsIG1faW5SZXNpemVNb2RlKGZhbHNlKQotICAgICwgbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkodHJ1ZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5k
YW50KGZhbHNlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eShm
YWxzZSkKICAgICAsIG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkKICAgICAsIG1fcGFpbnRpbmdJ
bnNpZGVSZWZsZWN0aW9uKGZhbHNlKQotICAgICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2Up
CiAgICAgLCBtX3JlcGFpbnRTdGF0dXMoTmVlZHNOb3JtYWxSZXBhaW50KQogICAgICwgbV92aXNp
YmxlQ29udGVudFN0YXR1c0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1Zpc2libGVDb250ZW50KGZh
bHNlKQogICAgICwgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5KGZhbHNlKQogICAgICwg
bV9oYXNWaXNpYmxlRGVzY2VuZGFudChmYWxzZSkKLSAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKGZhbHNlKQogICAgICwgbV9pc0ZpeGVkSW50ZXJzZWN0aW5nVmlld3BvcnQoZmFsc2Up
CiAgICAgLCBtX2JlaGF2ZXNBc0ZpeGVkKGZhbHNlKQogICAgICwgbV8zRFRyYW5zZm9ybWVkRGVz
Y2VuZGFudFN0YXR1c0RpcnR5KHRydWUpCkBAIC0zMjksMTUgKzMyMCw2IEBAIFJlbmRlckxheWVy
OjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxP
YmplY3QpCiAgICAgLCBtX2luc2lkZVNWR0ZvcmVpZ25PYmplY3QoZmFsc2UpCiAgICAgLCBtX2lu
ZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb246Ok5vbmUpKQogICAgICwgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29t
cG9zaXRlZFJlYXNvbihOb05vdENvbXBvc2l0ZWRSZWFzb24pCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICAsIG1fcmVnaXN0ZXJlZEFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX2Fk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV9yZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpCi0gICAgLCBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKLSAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24oZmFsc2UpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1fbGF5ZXJMaXN0TXV0YXRp
b25BbGxvd2VkKHRydWUpCiAjZW5kaWYKQEAgLTM1Miw1MyArMzM0LDIyIEBAIFJlbmRlckxheWVy
OjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxP
YmplY3QpCiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkp
OwogICAgIHNldElzQ1NTU3RhY2tpbmdDb250ZXh0KHNob3VsZEJlQ1NTU3RhY2tpbmdDb250ZXh0
KCkpOwogCi0gICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdM
YXllcigpOwotCi0gICAgaWYgKGlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAgIG1fYm94U2Ny
b2xsaW5nU2NvcGUgPSBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2Nv
cGUoKTsKKyAgICAvLyBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgaXMgaW5pdGlhbGl6ZWQgaW4gUmVu
ZGVyTGF5ZXJTVkcvSFRNTCwgZXZlbiB0aG91Z2gKKyAgICAvLyBpdCBiZWxvbmdzIHRvIFJlbmRl
ckxheWVyIC0tIHdlIGNhbm5vdCBjYWxsCisgICAgLy8gIm1faXNTZWxmUGFpbnRpbmdMYXllciA9
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsiCisgICAgLy8gaGVyZSwgaW4gdGhlIGNvbnN0
cnVjdG9yIC0tIHNpbmNlIHRoZSBSZW5kZXJMYXllclNWRy9IVE1MIGNsYXNzZXMgYXJlbid0IGlu
aXRpYWxpemVkIHlldC4KIAogICAgIGlmICghcmVuZGVyZXIoKS5maXJzdENoaWxkKCkpIHsKICAg
ICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7CiAgICAgICAgIG1faGFz
VmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2li
aWxpdHk6OlZpc2libGU7CiAgICAgfQotCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5k
ZXJlcigpLmVsZW1lbnQoKSkgewotICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkg
dGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxh
dGVkLgotICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9s
bFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkKLSAg
ICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9z
aXRpb24pOwotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oSW50
UG9pbnQoKSk7Ci0gICAgfQogfQogCiBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKIHsKLSAg
ICBpZiAoaW5SZXNpemVNb2RlKCkpCi0gICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5z
U2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0gICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVu
dC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotCi0gICAg
ZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0cm95U2Nyb2xs
YmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsK
LQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92ZVJlZmxlY3Rpb24oKTsKIAot
ICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0KICAgICBjbGVh
ckxheWVyRmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkg
ewpAQCAtNDE3LDYgKzM2OCwyMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHJlbmRlcmVyKCkucmVuZGVy
VHJlZUJlaW5nRGVzdHJveWVkKCkgfHwgIWZpcnN0Q2hpbGQoKSk7CiB9CiAKK1JlbmRlckxheWVy
U2Nyb2xsYWJsZSogUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcigpCit7CisgICAgaWYgKGlz
PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCitj
b25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIo
KSBjb25zdAoreworICAgIGlmIChpczxjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMp
KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Y29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0
aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6YWRkQ2hp
bGQoUmVuZGVyTGF5ZXImIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQpCiB7CiAgICAg
UmVuZGVyTGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJl
dmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKQEAgLTkzNCw3ICs4OTksMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlv
dXRpbmdTdWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigmZmxhZ3MpOwot
ICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgIGlmIChzY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+YXBwbHlQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICBn
ZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CkBAIC05
NDIsNyArOTEwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVu
ZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAvLyBDbGVhciBvdXIg
Y2FjaGVkIGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVhckNsaXBSZWN0cygpOwogCi0g
ICAgaWYgKGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIg
JiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAgICAgTGF5
b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAg
ICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5TWFw
LT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk1MSw3ICs5MTksNyBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFu
Y2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAgICAgIG9m
ZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAg
ICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21S
b290KSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xz
KHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVz
Y2VuZGFudERlcGVuZGVudEZsYWdzKCk7CkBAIC0xMDI4LDEzICs5OTYsOCBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlN
YXAsIE9wdGlvblNldAogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0
cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVk
LCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVl
ZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBi
dXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBk
YXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
PSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKHNjcm9sbGFibGVM
YXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT51cGRhdGVNYXJxdWVlKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkgewogICAgICAgICBib29sIGludGVyc2VjdHNWaWV3cG9y
dCA9IGNvbXBvc2l0b3IoKS5maXhlZExheWVySW50ZXJzZWN0c1ZpZXdwb3J0KCp0aGlzKTsKQEAg
LTExMTQsOTIgKzEwNzcsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhclJlcGFpbnRSZWN0cygp
CiAgICAgcmVuZGVyZXIoKS5jbGVhclJlcGFpbnRMYXlvdXRSZWN0cygpOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKQotewot
ICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpOwotCi0gICAgTE9H
KFNjcm9sbGluZywgIlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1l
bnRTY3JvbGwiKTsKLQotICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5z
Zm9ybXMpOwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFw
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJm
bG93U2Nyb2xsKCkKLXsKLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFu
c2Zvcm1zKTsKLSAgICBpZiAodGhpcyAhPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQotICAg
ICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRy
KTsKLQotICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3Rv
cnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwotICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1Nl
ZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVy
Zmxvd0NsaXAgZmxhZ3M/Ci0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2Vv
bWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1h
cCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiBmbGFncykK
LXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLCBidXQgdGhlcmUgYXJl
IHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCi0gICAgLy8gdGhlc2UgZmxhZ3MgYXJlIHN0aWxsIGRp
cnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMgdmFsaWQuCi0gICAgdXBkYXRl
RGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vIHZpc2li
bGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50cywgdGhlcmUgaXMgbm8gcG9pbnQg
cmVjb21wdXRpbmcKLSAgICAvLyBvdXIgcmVjdGFuZ2xlcyBhcyB0aGV5IHdpbGwgYmUgZW1wdHku
IElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBleHBlY3RlZCB0bwotICAgIC8vIHJl
Y29tcHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCi0gICAgaWYgKCFtX2hhc1Zpc2libGVE
ZXNjZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLSAgICBpZiAo
cG9zaXRpb25DaGFuZ2VkKQotICAgICAgICBmbGFncy5hZGQoSGFzQ2hhbmdlZEFuY2VzdG9yKTsK
LQotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0NoYW5nZWRBbmNlc3RvciwgSGFzU2Vl
blZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVyZmxvd1Njcm9sbCB9KSkKLSAgICAg
ICAgY2xlYXJDbGlwUmVjdHMoKTsKLQotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkuaGFzVmll
d3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCi0gICAgICAgIGZsYWdzLmFkZChIYXNTZWVuVmll
d3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93
Q2xpcCk7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRDb21wdXRlUmVwYWludFJlY3RzID0gKGZsYWdz
LmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpIHx8IGZsYWdzLmNv
bnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93
Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOwotICAgIGJvb2wgaXNWaXN1YWxseUVt
cHR5ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOwotICAgIGJvb2wgc2hvdWxkUHVzaEFuZFBvcE1h
cHBpbmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzICYmICFp
c1Zpc3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7Ci0gICAgaWYgKHNob3VsZFB1c2hBbmRQ
b3BNYXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3Io
dGhpcywgcGFyZW50KCkpOwotCi0gICAgaWYgKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMpIHsK
LSAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0IGNvbXB1dGUgcmVwYWludCByZWN0
cyBmb3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KLSAgICAgICAgaWYgKGlzVmlzdWFsbHlF
bXB0eSkKLSAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3RzKCk7Ci0gICAgICAgIGVsc2UgLy8g
RklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNvbnRhaW5lciBhcyB3ZSB3YWxrIGRv
d24gdGhlIHRyZWUuCi0gICAgICAgICAgICBjb21wdXRlUmVwYWludFJlY3RzKHJlbmRlcmVyKCku
Y29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7Ci0gICAgfSBlbHNlIGlmICghcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1XaWRnZXQoKSkgewotICAgICAgICAv
LyBXaGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNvbnRlbnRzIGZsYWcgZmxpcHMgZHVl
IHRvIGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFpbnQgYXJlYSB0cmFuc2l0aW9ucyBm
cm9tCi0gICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3ZlcmZsb3cuIFdoZW4gdGhpcyBoYXBw
ZW5zIHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUgaW52YWxpZCBhbmQgdGhleSBuZWVk
IHRvIGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2IvMTg4MTIxKS4KLSAgICAgICAgLy8g
Q2hlY2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3JyZWN0LgotICAgICAgICBBU1NFUlQo
IXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCkpKTsKLSAgICAg
ICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVy
KCkucmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94ID09IHJlbmRlcmVyKCkub3V0bGlu
ZUJvdW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCkpKTsKLSAg
ICB9Ci0gICAgCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1hcCwgZmxhZ3MpOwotCi0gICAgLy8g
V2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNjcm9sbGluZyBpcyBhIHRyYW5zbGF0
aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgpCi0gICAgLy8gb2YgYW4gb2JqZWN0
LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBh
cyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCi0gICAgLy8gdXBkYXRlZCBhYm92ZS4KLQotICAgIGlm
IChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigp
OwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVl
UG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKLSAg
ICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSk7Ci0KLSAg
ICByZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmludmFsaWRhdGVSZWN0c0ZvckFsbE1h
cmtlcnMoKTsKLX0KLQogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUJsZW5kTW9kZSgpCkBAIC0xNjkwLDM0ICsxNTY3LDEwIEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4qIGZsYWdzCiAgICAgICAgICAgICBsb2NhbFBvaW50IC09IGRvd25jYXN0PFJlbmRl
clRhYmxlUm93PigqYW5jZXN0b3IpLnRvcExlZnRMb2NhdGlvbk9mZnNldCgpOwogICAgICAgICB9
CiAgICAgfQotICAgIAotICAgIC8vIFN1YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0
LgotICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OwotICAgIGlmIChyZW5kZXJlcigp
LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5n
QW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7Ci0g
ICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNs
b3NpbmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCi0gICAgICAgIGlmIChwb3Np
dGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAg
bG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsUG9zaXRp
b24oKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIo
KS5pc0luRmxvd1Bvc2l0aW9uZWQoKSAmJiBpczxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJl
bnQtPnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25j
YXN0PFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7
Ci0gICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNldDsKLSAgICAgICAgfQotCi0gICAgICAg
IEFTU0VSVChwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOwotICAg
ICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3Jv
bGxpbmdTY29wZSgpOwotICAgIH0gZWxzZSBpZiAoYXV0byogcGFyZW50TGF5ZXIgPSBwYXJlbnQo
KSkgewotICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnQoKS0+c2Ny
b2xsUG9zaXRpb24oKSk7Ci0KLSAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5jb250ZW50c1Nj
cm9sbGluZ1Njb3BlKCkpOwotICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5
ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7Ci0gICAgICAgIGlmICghbV9jb250ZW50c1Njcm9s
bGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Nj
b3BlKQotICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGlu
Z1Njb3BlKCk7Ci0gICAgfSBlbHNlIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1f
Y29udGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQotICAgICAgICBt
X2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBtX2JveFNjcm9sbGluZ1Njb3BlOworICAgIC8vIFN1
YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGluZ1Njb3Blcyhsb2NhbFBv
aW50KTsKIAogICAgIGJvb2wgcG9zaXRpb25Pck9mZnNldENoYW5nZWQgPSBmYWxzZTsKICAgICBp
ZiAocmVuZGVyZXIoKS5pc0luRmxvd1Bvc2l0aW9uZWQoKSkgewpAQCAtMTgzOSw4NCArMTY5Miwy
OCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0xheWVySW5Db250YWluaW5n
QmxvY2tPcmRlcigpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZW5k
ZXJMYXllciogZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIpCi17Ci0gICAgYXV0byogb3duZXJFbGVtZW50ID0gbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVu
dCgpLm93bmVyRWxlbWVudCgpOwotICAgIGlmICghb3duZXJFbGVtZW50KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8qIG93bmVyUmVuZGVyZXIgPSBvd25lckVsZW1lbnQtPnJl
bmRlcmVyKCk7Ci0gICAgaWYgKCFvd25lclJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotfQotCi1z
dGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJl
bmRlckxheWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJp
ZXMpCitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewot
ICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5n
QmxvY2tPcmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5D
b250YWluaW5nQmxvY2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBp
ZiAoY3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxh
eWVyKGxheWVyKTsKLX0KLQotUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0Ci17Ci0gICAgYXV0byBpc0NvbnNpZGVy
ZWRTY3JvbGxhYmxlID0gW10oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSB7Ci0gICAgICAgIHJl
dHVybiBpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckJv
eD4obGF5ZXIucmVuZGVyZXIoKSkuY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7
Ci0gICAgfTsKLQotICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNs
dWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlzKSkKLSAgICAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKLSAgICAKLSAgICBmb3IgKGF1dG8qIG5l
eHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBjcm9zc0ZyYW1l
Qm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7Ci0gICAgICAgIGlm
IChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIpKQotICAgICAgICAgICAgcmV0dXJu
IG5leHRMYXllcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotSW50UmVjdCBS
ZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVk
KSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIGlmICghc2Ny
b2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAg
ICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNj
cm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAg
ICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKLSAg
ICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5
ZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNv
bnN0CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIo
KSBjb25zdAogewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXNjcm9sbHNP
dmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxB
bmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9s
bEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7Ci0jZW5kaWYKKyAgICBhdXRvKiBv
d25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CisgICAg
aWYgKCFvd25lckVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IGZhbHNlOwotfQorICAgIGF1dG8qIG93bmVyUmVuZGVyZXIgPSBvd25lckVsZW1lbnQtPnJlbmRl
cmVyKCk7CisgICAgaWYgKCFvd25lclJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotYm9vbCBSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9y
UGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5zZXR0
aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVz
dGluZygpOworICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQog
CiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5jZXN0b3Io
KSBjb25zdApAQCAtMjQ0NCwzMzEgKzIyNDEsNiBAQCBMYXlvdXRTaXplIFJlbmRlckxheWVyOjpv
ZmZzZXRGcm9tQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENvbAog
ICAgIHJldHVybiB0b0xheW91dFNpemUoY29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXll
ciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0Rm9yQ29sdW1ucykpOwogfQogCi1ib29sIFJlbmRlckxh
eWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICBib29sIGlzVmlz
aWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6Vmlz
aWJsZTsKLSAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxp
bmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93
KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKLSAgICByZXR1cm4gaXNW
aXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNlVG91
Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNVc2VB
Y2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLX0KLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotYm9vbCBSZW5kZXJMYXll
cjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQp
Ci17Ci0gICAgLy8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Ny
b2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCi0gICAgaWYgKGhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlcigpLmVs
ZW1lbnQoKSk7Ci0gICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcgPSB0cnVlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkg
fHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOwotfQotI2VuZGlmIC8vIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3Zl
IG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdAotewotICAgIHJldHVybiBpc0NvbXBvc2l0ZWQoKSAmJiBiYWNraW5nKCktPmhhc1Nj
cm9sbGluZ0xheWVyKCk7Ci19Ci0KLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIg
d2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQXN5bmNTY3JvbGxpbmco
KSBjb25zdAotewotICAgIHJldHVybiBjb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxp
bmdGb3JMYXllcigqdGhpcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xs
RGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQotewotICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1h
dGNoZXMgRmlyZWZveCdzLgotICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9z
b3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgotICAgIGNvbnN0
IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKLQotICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5u
aW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7Ci0gICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQotICAg
ICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3Fy
dChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOwotICAgIGVsc2UgaWYg
KGFkanVzdGVkRGVsdGEgPCAtMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0
PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWRE
ZWx0YSkpKSArIDE7Ci0KLSAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKLX0KLQotc3RhdGljIGlu
bGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCi17
Ci0gICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwg
YWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQotewot
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSByZW5kZXJlcigpLmZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpOwotICAgIAotICAgIC8vIFdl
IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9m
IHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9z
aXRpb24gaXMgaW5jb2hlcmVudAotICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9z
aXRpb247Ci0gICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCi0gICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24g
PSBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgICBwcmV2aW91c01vdXNl
UG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOwotCi0gICAgSW50U2l6ZSBkZWx0YSA9
IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2ludDsKLQotICAgIGlmIChhYnMoZGVs
dGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBj
ZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KLSAgICAgICAgZGVsdGEuc2V0V2lk
dGgoMCk7Ci0gICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5T
Y3JvbGxSYWRpdXMpCi0gICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKLQotICAgIHNjcm9sbEJ5
UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOwotfQotCi0vLyBGSVhNRTog
dW5pZnkgd2l0aCB0aGUgc2Nyb2xsUmVjdFRvVmlzaWJsZSgpIGNvZGUgYmVsb3cuCi12b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3Jv
bGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKLXsKLSAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7
Ci0gICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkpCi0gICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVD
bGFtcCA9ICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgp
OwotCi0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRC
eUxpbmVDbGFtcCkgewotICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Ny
b2xsT2Zmc2V0KCkgKyBkZWx0YTsKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zm
c2V0KTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAgICpzY3JvbGxlZEFy
ZWEgPSB0aGlzOwotCi0gICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9s
bCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQotICAgICAg
ICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9s
bE9mZnNldCgpOwotICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAm
JiByZW5kZXJlcigpLnBhcmVudCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lw
cyBzY3JvbGxhYmxlIGZyYW1lcy4KLSAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9s
bGVkQXJlYSk7Ci0KLSAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRo
YXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0Ci0gICAgICAg
IC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3Vt
ZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkK
LSAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdh
eSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8g
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIz
NwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKLXsKLSAgICBtX3Bvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphcHBs
eVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY3JvbGxUb09mZnNl
dChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFs
dWUoKSkpOwotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0Owot
fQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlv
bi55KCkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFt
cGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlv
bihpbnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24o
bV9zY3JvbGxQb3NpdGlvbi54KCksIHkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9u
LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9s
bFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xs
IGFuaW1hdGVkKQotewotICAgIGlmIChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQot
ICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0
aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotICAgIGVsc2UKLSAgICAgICAg
c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xs
VHlwZSwgY2xhbXBpbmcpOwotfQotCi1TY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OmNsYW1wU2Ny
b2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAotewotICAg
IHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGlt
dW1TY3JvbGxPZmZzZXQoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQ
b3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0jaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnRo
aXMgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7Ci0KLSAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9s
bFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGlmIChjdXJyZW50U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVB
bmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwot
Ci0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBz
Y3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xs
T2Zmc2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBl
ID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxU
eXBlKTsKLQotICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0
aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcp
KQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9m
ZnNldCwgY2xhbXBpbmcpOwotICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShw
cmV2aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNl
dFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgYXV0byBwcmV2aW91c1Nj
cm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBl
KHNjcm9sbFR5cGUpOwotCi0gICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1w
aW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0
KSA6IG9mZnNldDsKLSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Ny
b2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxB
bmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9
IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9P
ZmZzZXRXaXRoQW5pbWF0aW9uKG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBzZXRDdXJyZW50U2Ny
b2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xs
VG8gIiA8PCBwb3NpdGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlz
IHVzZXIgc2Nyb2xsICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNl
cikgPDwgIikiKTsKLQotICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247
Ci0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9y
IG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25z
RGlydHkpCi0gICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBj
b2RlIGlzIHRyeWluZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJl
bW92ZWQuCi0gICAgICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5k
VG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdP
ZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAg
ICAgaW50IHNjcm9sbFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNj
cm9sbFhPZmZzZXQgPiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
c2Nyb2xsWE9mZnNldCArPSBjYXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxY
T2Zmc2V0IDw9IGNhcmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQg
PSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3Np
dGlvbi54KCkgLSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0g
Y2FyZXRXaWR0aDsKLQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7
Ci0gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdP
ZmZzZXQpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xs
UG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkg
PT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hh
bmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBU
aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFp
biB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xs
UG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0
aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9
IHJlbmRlcmVyKCkudmlldygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3Vy
IGNoaWxkIGxheWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBp
bXBhY3RlZCBieSBhIHNjcm9sbCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5n
IGxheWVycywgYmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29t
cG9zaXRpbmcgYW5jZXN0b3IuCi0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRl
eHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRo
ZSBtaWRkbGUgb2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQg
aGFzIGZpbmlzaGVkLgotICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dT
Y3JvbGwoKTsKLQotICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0
UG9zaXRpb25zKCk7Ci0KLSAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7
Ci0gICAgICAgICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhp
Z2hlciBvbiB0aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAg
ICAgIC8vIHBvc2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVs
bCB3YWxrIG9mIHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGlu
IHRoaXMgY2FzZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVw
ZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBj
b21wbGV0ZXMuCi0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewot
ICAgICAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0g
ICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9u
IG9mIGEgY29tcG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHot
b3JkZXIpLAotICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsg
ZnJvbSB0aGUgcGFpbnQtb3JkZXIgcGFyZW50LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBw
YWludFBhcmVudCA9IHBhaW50T3JkZXJQYXJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFp
bnRQYXJlbnQtPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2
ZXJzYWwoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lv
bnMsIHNjcm9sbGluZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24u
Ci0gICAgICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5k
ZW50UmVnaW9ucygpOwotICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRl
cmVyKCkuZnJhbWUoKSk7Ci0gICAgfQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5m
cmFtZSgpOwotICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBy
ZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBu
ZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVj
dEZvclJlcGFpbnQgPSByZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVy
ZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0
UXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50
KTsKLSAgICBpZiAocmVwYWludENvbnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1v
dmVFdmVudCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZh
a2VNb3VzZU1vdmVFdmVudCk7Ci0gICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtl
TW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0g
ICAgYm9vbCByZXF1aXJlc1JlcGFpbnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgp
OwotICAgICAgICBzZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJh
dmVyc2FsKCk7Ci0gICAgICAgIHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBh
aW50T25Db21wb3NpdGVkU2Nyb2xsKCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBh
IGZ1bGwgcmVwYWludCBvZiBvdXIgb2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0g
ICAgICAgIHJlbmRlcmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IHJlY3RGb3JSZXBhaW50KTsKLQotICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9s
bC1yZWxhdGVkIERPTSBldmVudHMuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJl
cigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Ny
b2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQot
ICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAg
dmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVk
aXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xsKCp0aGlzKTsKLX0KLQogc3RhdGljIGlubGluZSBi
b29sIGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2Uq
IGZyYW1lRWxlbWVudEJhc2UsIEZyYW1lVmlldyYgZnJhbWVWaWV3KQogewogICAgIC8vIElmIHNj
cm9sbGJhcnMgYXJlbid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgpA
QCAtMjgxMywzMCArMjI4NSwzMyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNp
YmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogCiAgICAgTGF5
b3V0UmVjdCBuZXdSZWN0ID0gYWJzb2x1dGVSZWN0OwogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3
ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0gICAgYXV0byogcGFyZW50TGF5ZXIg
PSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKKyAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9j
a0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiAgICAgYm9vbCBhdXRvc2Nyb2xsTm90
SW5Qcm9ncmVzcyA9ICFyZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9s
bEluUHJvZ3Jlc3MoKTsKIAogICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkpIHsKKyAgICAg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CisgICAg
ICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCiAgICAgICAgIC8vIERvbid0IHNjcm9sbCB0
byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Vi
a2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCiAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVz
IGZyb20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4K
ICAgICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICAgICAgQVNTRVJUKGJv
eCk7CiAgICAgICAgIExheW91dFJlY3QgbG9jYWxFeHBvc2VSZWN0KGJveC0+YWJzb2x1dGVUb0xv
Y2FsUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGFic29sdXRlUmVjdCkpKS5ib3VuZGluZ0JveCgp
KTsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0
bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24g
dGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAgICAgICAgICAgLy8gc3RhcnRzIGZy
b20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VS
ZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAg
IGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2lu
dCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKICAgICAg
ICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xp
ZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAgICAgICAgIExheW91dFJlY3QgcmV2
ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0LCBp
bnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgICAgICBT
Y3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9s
bE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9u
KCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkg
fHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6
Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xs
T2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5jbGFtcFNjcm9sbE9mZnNldChzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3Qp
LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3Jv
bGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlv
bikgeworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmlt
YXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAgICAgIGlmIChhdXRvc2Nyb2xsTm90
SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhhdmlvciwgYm94LT5l
bGVtZW50KCkpKQogICAgICAgICAgICAgICAgIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Olll
czsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNl
dChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogICAgICAgICAgICAgSW50U2l6ZSBzY3Jv
bGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNl
dDsKICAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJl
bmNlKTsKICAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zv
cm1zKS5ib3VuZGluZ0JveCgpKTsKQEAgLTI4NTQsNyArMjMyOSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBi
b29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2Ug
bmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCiAg
ICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0
RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9
IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVj
dCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNp
YmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJl
Y3QpOwogICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhwb3NlUmVjdCA9IGdldFJlY3RUb0V4
cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgs
IG9wdGlvbnMuYWxpZ25ZKTsKIAogICAgICAgICAgICAgICAgIEludFBvaW50IHNjcm9sbFBvc2l0
aW9uKHJvdW5kZWRJbnRQb2ludChleHBvc2VSZWN0LmxvY2F0aW9uKCkpKTsKQEAgLTI4NzAsOCAr
MjM0NSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExh
eW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAgICAgIGZyYW1l
Vmlldy5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQsIGFuaW1hdGVkKTsKIAogICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3VsZEFs
bG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmcgPT0gU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGlu
Zzo6WWVzIHx8IGZyYW1lVmlldy5zYWZlVG9Qcm9wYWdhdGVTY3JvbGxUb1BhcmVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXllciA9IG93bmVyRWxlbWVu
dC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudExheWVyID0gZW5jbG9zaW5nTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVt
ZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFi
bGVMYXllcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudExheWVyID0gc2Ny
b2xsYWJsZUxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6
SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmVjdCBpbnRvIHRoZSBj
b29yZGluYXRlIHNwYWNlIG9mIHRoZSBwYXJlbnQgZnJhbWUncyBkb2N1bWVudC4KICAgICAgICAg
ICAgICAgICAgICAgbmV3UmVjdCA9IGZyYW1lVmlldy5jb250ZW50c1RvQ29udGFpbmluZ1ZpZXdD
b250ZW50cyhlbmNsb3NpbmdJbnRSZWN0KG5ld1JlY3QpKTsKICAgICAgICAgICAgICAgICAgICAg
aW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8gRklYTUU6IGlkZWFsbHkgbmVlZCB0byBkZXRlcm1pbmUg
aWYgdGhpcyA8aWZyYW1lPiBpcyBpbnNpZGUgcG9zaXRpb246Zml4ZWQuCkBAIC0yOTI4LDI0ICsy
NDA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlv
dXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50TGF5ZXItPnNj
cm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMpOwogfQogCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKLXsK
LSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7Ci0g
ICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWlu
IGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAvLyByZXBvc2l0
aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0gICAgICAg
IGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgp
LT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICh1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVD
b21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9s
bCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBw
b3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAgICAgICAgY29t
cG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJh
cmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21w
b3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGlu
Z0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotTGF5b3V0
UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZpeGVkLCBj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGln
blkpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uc3Qg
TGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9zZVJlY3QsIGJv
b2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3Jv
bGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9
IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwogICAgIGlmIChyZW5kZXJlcigpLmlzUmVu
ZGVyVmlldygpICYmIGluc2lkZUZpeGVkKSB7CkBAIC0zMDIzLDExNTUgKzI0ODMsOTcgQEAgTGF5
b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZp
c2libGVSZWN0LCBjb25zdCBMYXkKICAgICAgICAgLy8gSWYgdGhlIHJlY3QgaXMgYmlnZ2VyIHRo
YW4gdGhlIHZpc2libGUgYXJlYSwgZG9uJ3QgYm90aGVyIHRyeWluZyB0byBjZW50ZXIuIE90aGVy
IGFsaWdubWVudHMgd2lsbCB3b3JrLgogICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50
OjpnZXRWaXNpYmxlQmVoYXZpb3IoYWxpZ25ZKTsKICAgICAgICAgaWYgKHNjcm9sbFkgPT0gU2Ny
b2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25DZW50ZXIpCi0gICAgICAgICAgICBzY3JvbGxZ
ID0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGw7Ci0gICAgfSBlbHNlIGlmIChp
bnRlcnNlY3RIZWlnaHQgPiAwKQotICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRp
YWxseSB2aXNpYmxlLCB1c2UgdGhlIHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9yCi0gICAgICAg
IHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihhbGlnblkpOwot
ICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVo
YXZpb3IoYWxpZ25ZKTsKLSAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNs
b3Nlc3QgZWRnZSwgYW5kIHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgotICAgIC8vIHRo
YW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEs
IHRoZW4gYWxpZ24gd2l0aCB0aGUgYm90dG9tLgotICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFs
aWdubWVudDo6QmVoYXZpb3I6OkFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFko
KSA+IHZpc2libGVSZWN0Lm1heFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJl
Y3QuaGVpZ2h0KCkpCi0gICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9y
OjpBbGlnbkJvdHRvbTsKLQotICAgIC8vIEdpdmVuIHRoZSBZIGJlaGF2aW9yLCBjb21wdXRlIHRo
ZSBZIGNvb3JkaW5hdGUuCi0gICAgTGF5b3V0VW5pdCB5OwotICAgIGlmIChzY3JvbGxZID09IFNj
cm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsKQotICAgICAgICB5ID0gdmlzaWJsZVJl
Y3QueSgpOwotICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlv
cjo6QWxpZ25Cb3R0b20pCi0gICAgICAgIHkgPSBleHBvc2VSZWN0Lm1heFkoKSAtIHZpc2libGVS
ZWN0LmhlaWdodCgpOwotICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpC
ZWhhdmlvcjo6QWxpZ25DZW50ZXIpCi0gICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBv
c2VSZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKLSAgICBlbHNlCi0g
ICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKLQotICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91
dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbkluV2luZG93KQotewotICAgIElu
dFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCkud2luZG93VG9Db250ZW50cyhwb3NpdGlvbkluV2luZG93KTsKLSAgICBzY3JvbGxSZWN0
VG9WaXNpYmxlKExheW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUo
MSwgMSkpLCBmYWxzZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlm
TmVlZGVkLCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OmNhblJlc2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gV2UgbmVlZCBhIHNw
ZWNpYWwgY2FzZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0aGV5IG5ldmVyIGhhdmUKLSAgICAvLyBo
YXNPdmVyZmxvd0NsaXAoKS4gSG93ZXZlciwgdGhleSBkbyAiaW1wbGljaXRseSIgY2xpcCB0aGVp
ciBjb250ZW50cywgc28KLSAgICAvLyB3ZSB3YW50IHRvIGFsbG93IHJlc2l6aW5nIHRoZW0gYWxz
by4KLSAgICByZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIo
KS5pc1JlbmRlcklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVz
aXplOjpOb25lOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZnNldCkKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgcG9zc2libGUgb24gZ2VuZXJhdGVkIGNvbnRlbnQgYnV0IGlz
IG5vdCByaWdodCBub3cuCi0gICAgaWYgKCFpblJlc2l6ZU1vZGUoKSB8fCAhY2FuUmVzaXplKCkg
fHwgIXJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhN
RTogVGhlIG9ubHkgY2FzZSB3aGVyZSByZW5kZXJlci0+ZWxlbWVudCgpLT5yZW5kZXJlcigpICE9
IHJlbmRlcmVyIGlzIHdpdGggY29udGludWF0aW9ucy4gRG8gdGhleSBtYXR0ZXIgaGVyZT8KLSAg
ICAvLyBJZiB0aGV5IGRvIGl0IHdvdWxkIHN0aWxsIGJlIGJldHRlciB0byBkZWFsIHdpdGggdGhl
bSBleHBsaWNpdGx5LgotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KTsKLSAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oZWxlbWVudC0+cmVu
ZGVyZXIoKSk7Ci0KLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgp
OwotICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkubW91c2VQcmVzc2Vk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSByZW5kZXJlci0+
c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICBhdXRvIGFic29sdXRlUG9pbnQgPSBkb2N1
bWVudC52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZ0LnBvc2l0aW9uKCkpOwotICAgIGF1dG8g
bG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChhYnNvbHV0ZVRvQ29udGVudHMoYWJzb2x1dGVQ
b2ludCkpOwotCi0gICAgTGF5b3V0U2l6ZSBuZXdPZmZzZXQgPSBvZmZzZXRGcm9tUmVzaXplQ29y
bmVyKGxvY2FsUG9pbnQpOwotICAgIG5ld09mZnNldC5zZXRXaWR0aChuZXdPZmZzZXQud2lkdGgo
KSAvIHpvb21GYWN0b3IpOwotICAgIG5ld09mZnNldC5zZXRIZWlnaHQobmV3T2Zmc2V0LmhlaWdo
dCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgCi0gICAgTGF5b3V0U2l6ZSBjdXJyZW50U2l6ZSA9IExh
eW91dFNpemUocmVuZGVyZXItPndpZHRoKCkgLyB6b29tRmFjdG9yLCByZW5kZXJlci0+aGVpZ2h0
KCkgLyB6b29tRmFjdG9yKTsKLSAgICBMYXlvdXRTaXplIG1pbmltdW1TaXplID0gZWxlbWVudC0+
bWluaW11bVNpemVGb3JSZXNpemluZygpLnNocnVua1RvKGN1cnJlbnRTaXplKTsKLSAgICBlbGVt
ZW50LT5zZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKG1pbmltdW1TaXplKTsKLSAgICAKLSAgICBM
YXlvdXRTaXplIGFkanVzdGVkT2xkT2Zmc2V0ID0gTGF5b3V0U2l6ZShvbGRPZmZzZXQud2lkdGgo
KSAvIHpvb21GYWN0b3IsIG9sZE9mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIGlm
IChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAg
bmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQud2lkdGgoKSk7Ci0gICAgICAgIGFkanVzdGVk
T2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9sZE9mZnNldC53aWR0aCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgTGF5b3V0U2l6ZSBkaWZmZXJlbmNlID0gKGN1cnJlbnRTaXplICsgbmV3T2Zmc2V0
IC0gYWRqdXN0ZWRPbGRPZmZzZXQpLmV4cGFuZGVkVG8obWluaW11bVNpemUpIC0gY3VycmVudFNp
emU7Ci0KLSAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVk
RWxlbWVudD4oZWxlbWVudCk7Ci0gICAgYm9vbCBpc0JveFNpemluZ0JvcmRlciA9IHJlbmRlcmVy
LT5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Qm9yZGVyQm94OwotCi0gICAgUmVz
aXplIHJlc2l6ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnJlc2l6ZSgpOwotICAgIGlmIChyZXNpemUg
IT0gUmVzaXplOjpWZXJ0aWNhbCAmJiBkaWZmZXJlbmNlLndpZHRoKCkpIHsKLSAgICAgICAgaWYg
KGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8g
TWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0
LCByZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5TWFyZ2luUmlnaHQsIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3Rv
ciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBi
YXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUg
OiByZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAg
IGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChi
YXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAg
ICB9Ci0KLSAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNl
LmhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxl
bWVudCkpIHsKLSAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0
aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTQ3PikuCi0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFj
dG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5t
YXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAg
ICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAt
IChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQ
YWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21G
YWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0
KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBkb2N1bWVudC51cGRhdGVM
YXlvdXQoKTsKLQotICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28g
YXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRl
ciB0aGUgY3Vyc29yIGluIHZpZXcuCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9m
ZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQ
b3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJM
YXllcjo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRlZCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05v
ZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKLX0KLQotSW50
UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRl
bnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRl
bnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAg
ICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IElu
Y2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1
c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgp
OwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNp
emUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxl
U2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNp
emUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVt
U2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0
cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJs
ZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0
KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9m
ZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwot
Ci0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRo
KHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAm
JiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRo
KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFi
bGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7
Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9s
bGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVy
UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9s
bENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNj
cm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0
IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQot
Ci1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3Qp
IGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVu
dFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAg
IHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBz
Y3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21S
ZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9p
bnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25z
dAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBv
aW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAg
cmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkK
LSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9J
bnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7
Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRT
aXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlm
ICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1Np
emUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCku
d2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQot
ICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWln
aHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6
ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjph
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0g
QXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1
ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJl
bmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlk
RW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZs
b3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgp
Ci17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2Ug
dGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgot
Ci1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93
bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGlu
Z1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZl
bnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92
ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBj
b25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRv
JiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNj
cm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0Jv
eFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAg
YXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
cikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNj
cm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNj
cm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wg
aGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhciht
X3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9
IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhh
dmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsK
LSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVS
ZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Ny
b2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJT
aXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVy
Zmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1
dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJh
clJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJh
clJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNp
emUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNj
cm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBh
dXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Qu
c2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAg
ICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
cmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNv
cm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRD
b3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJv
dHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9
OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1
bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZl
UmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9
IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVu
ZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29u
c3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJh
ciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAg
ICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJl
IG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBh
aW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIg
PT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRS
ZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldy
aXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUo
cmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Nj
cm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVj
dCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFu
Z2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5p
c0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZl
cnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5l
bGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50
LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+
bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9
IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0
dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7
Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5k
ZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRv
d25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBk
aWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChw
YWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1h
dG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0
b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxk
KCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRp
b24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9t
U2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
LCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAg
ICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3Zl
cmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhh
c0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Nj
cm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFy
KEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAg
ICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVu
ZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0Vu
YWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9u
ZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3Jv
bGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9y
IGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUg
YW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxl
LgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAg
aWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17
Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZs
b3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFi
bGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVs
YXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95
aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRv
IGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidz
IHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQot
U2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAm
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRv
KiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcykp
IHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17
Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAg
aWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxl
bWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBi
b3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZz
ZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5jbG9z
aW5nRWxlbWVudCgpKSwgKmJveCwgYm94LT5zdHlsZSgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3Zl
cmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAg
aWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGlu
Z05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChh
dXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAg
cmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Nj
cm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRp
bmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6Omxv
Z01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAot
ewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2Fn
ZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17
Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJM
YXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJj
YXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAg
aWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0i
X3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxl
bmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwot
Ci0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBp
c29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAg
ICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24u
Ci0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpi
YWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAg
IH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXll
cjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3Zl
cmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigp
ICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+
c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFu
Y3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dD
b250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChy
ZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxk
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRG
cm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAotewotICAg
IGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAg
IGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhN
YXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5
bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsK
LSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikgewot
ICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAg
ICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwotICAg
IH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0
KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENv
cm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxD
b3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFt
ZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgo
KSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGlt
ZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBz
bmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICBy
ZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xs
SGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRo
aXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMu
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVu
ZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAg
ICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6
b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1
cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3Zl
cmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwot
ICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwot
ICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92
ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Umln
aHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94
LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dS
ZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJv
eCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3Jv
bGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0
KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0
b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93
ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBp
ZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICBz
Y3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBp
bnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94
LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxl
TGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1faGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92
ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAg
IHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVy
Zmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJl
dHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgo
KSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAot
ewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNj
cm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwot
fQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVy
ZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIg
PyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFz
dHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cg
PT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0K
LXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cg
b3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xs
YmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92
ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFy
VGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJm
bG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAv
LyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3
ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRh
bE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNW
ZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8g
SWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVu
YWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJh
cihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hC
YXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYm
IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9s
bGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsK
LQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBv
dXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1
dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJh
cldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hv
cml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2Vk
ID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVy
dGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRv
SG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdl
ZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhh
dmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9u
dGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhB
dXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1Zl
cnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0K
LSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCku
c3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxl
KCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9p
bk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91
dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJr
T25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIo
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5zY3Jv
bGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNh
bFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9j
ayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZW5k
ZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJl
bnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVk
TWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0
aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0g
ICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsK
LSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7
Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
LCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwg
bV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAg
IGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0g
ICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBw
YWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1f
c2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFT
ZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2Rl
IChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJv
eCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVu
c2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zm
c2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5n
ZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2
NAotICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0jZW5kaWYKLQotICAgIGlmICghYm94LT5pc0hU
TUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSkgewotICAgICAgICAvLyBM
YXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJ
biB0aGlzIGNhc2Ugd2UgbmVlZAotICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0
cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KLSAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBl
bmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCi0gICAgICAgIC8vIFRoaXMg
Y29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBw
b2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKLSAgICAgICAgLy8g
b2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUg
PHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgICAgICBzY3Jv
bGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKLQotICAg
IGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7Ci0K
LSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dl
b21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9u
VXBkYXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkK
LSAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKLQotICAgIHVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpvdmVyZmxvd0Nv
bnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Ci17Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxv
Y2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnNjcm9sbENv
cm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsOworICAg
IH0gZWxzZSBpZiAoaW50ZXJzZWN0SGVpZ2h0ID4gMCkKKyAgICAgICAgLy8gSWYgdGhlIHJlY3Rh
bmdsZSBpcyBwYXJ0aWFsbHkgdmlzaWJsZSwgdXNlIHRoZSBzcGVjaWZpZWQgcGFydGlhbCBiZWhh
dmlvcgorICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRQYXJ0aWFsQmVoYXZp
b3IoYWxpZ25ZKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6
OmdldEhpZGRlbkJlaGF2aW9yKGFsaWduWSk7CisgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGFs
aWduIHRvIHRoZSBjbG9zZXN0IGVkZ2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVyIGRv
d24KKyAgICAvLyB0aGFuIHRoZSB2aXNpYmxlUmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0aGUg
dmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdpdGggdGhlIGJvdHRvbS4KKyAgICBpZiAoc2Nyb2xs
WSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhw
b3NlUmVjdC5tYXhZKCkgPiB2aXNpYmxlUmVjdC5tYXhZKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQo
KSA8IHZpc2libGVSZWN0LmhlaWdodCgpKQorICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25t
ZW50OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b207CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRl
cnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEdpdmVuIHRo
ZSBZIGJlaGF2aW9yLCBjb21wdXRlIHRoZSBZIGNvb3JkaW5hdGUuCisgICAgTGF5b3V0VW5pdCB5
OworICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xs
KQorICAgICAgICB5ID0gdmlzaWJsZVJlY3QueSgpOworICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0g
U2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b20pCisgICAgICAgIHkgPSBleHBv
c2VSZWN0Lm1heFkoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpOworICAgIGVsc2UgaWYgKHNjcm9s
bFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25DZW50ZXIpCisgICAgICAgIHkg
PSBleHBvc2VSZWN0LnkoKSArIChleHBvc2VSZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVp
Z2h0KCkpIC8gMjsKKyAgICBlbHNlCisgICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKIAotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCh4LCB5KSwg
dmlzaWJsZVJlY3Quc2l6ZSgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3QKK3ZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50
UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgot
ICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBJbnRQb2ludCBjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLndpbmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRv
dyk7CisgICAgc2Nyb2xsUmVjdFRvVmlzaWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBv
c2l0aW9uLCBMYXlvdXRTaXplKDEsIDEpKSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6
UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGlu
Zzo6WWVzIH0pOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCitT
dHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIC8vIERv
bid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3dz
T3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPdmVybGF5IHNj
cm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNv
IHRoYXQgdGhleSB3aWxsIHBhaW50Ci0gICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4g
SWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzCi0gICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJv
b3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBu
ZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3Vn
aCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCi0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3Jv
bGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhl
IAotICAgIC8vIHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVy
VHJlZSB0byBnZXQgaXQgcmlnaHQuCi0gICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYg
IXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9s
bGJhck9mZnNldCA9IHBhaW50T2Zmc2V0OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2Fy
eSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXll
cnMuCi0gICAgICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
KSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0Owot
ICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYg
KCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xv
c2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAg
ICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOwotCi0gICAg
ICAgIHBhaW50aW5nUm9vdC0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJl
ZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYg
KHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRP
ZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAgLy8g
TW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92
ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAgIC8v
IHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkg
d2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBv
c2l0aW9uZWQgZWxlbWVudHMpLgotICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNp
emUoYWRqdXN0ZWRQYWludE9mZnNldCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0
aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAgIGlm
IChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBtX2hC
YXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBk
YW1hZ2VSZWN0KTsKLQotICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAgICBy
ZXR1cm47CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJS
ZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwg
TG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwog
Ci0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUg
YSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAv
LyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0
ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6
ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAg
cGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwot
fQorICAgIGlmICh0cmFuc2Zvcm0oKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJh
bnNmb3JtIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0gICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVy
UmVjdCgpOwotICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIWFic1Jl
Y3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChoYXNG
aWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKIAotICAg
IGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0
ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGhh
c0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9w
IGZpbHRlciJfcyk7CiAKLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7CiAKLSAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5j
ZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2VlIHdoYXQgaXMgYmVoaW5kIGl0LgotICAgIGlmICghaGFz
T3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFp
bnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7Ci19CisgICAgaWYgKGlzb2xhdGVzQmxl
bmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQotewot
ICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvcm5l
clJlc2l6ZXJTaXplOwotICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSA+PSAyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJl
c2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFy
ZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFn
ZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0g
cmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2Nh
bGUoMC41Zik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElt
YWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5l
ckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNp
emUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
eworICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRl
Z3JhdGlvbi4KKyAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCAi
ICIgPDwgKmJhY2tpbmcoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2Uo
KSk7CiAgICAgfQogCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFu
c2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwg
cmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3Ju
ZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXpl
KC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAg
ICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkg
LSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3Vt
ZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6
ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCkKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QK
IHsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpOwotCi0gICAgTGF5b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7Ci0g
ICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIXJlc2l6ZXJB
YnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVJl
c2l6ZXJTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Jl
c2l6ZXIpIHsKLSAgICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50
T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBk
cmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3QpOwotCi0gICAg
Ly8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhl
cmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCi0gICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNs
dWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCi0gICAgaWYgKCFo
YXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNv
bnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Ci0gICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29y
bmVyID0gcmVzaXplckFic1JlY3Q7Ci0gICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91
dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkg
KyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4g
eyAyMTcsIDIxNywgMjE3IH0pOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygx
LjBmKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2spOwotICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5l
cikpOwotICAgIH0KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVj
dC55KCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50
UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
Qm90dG9tKCkgY29uc3QKIHsKLSAgICBpZiAoIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250
YWlucyhsb2NhbFBvaW50KTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAg
IExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAg
IGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJm
bG93UmVjdC5tYXhZKCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0Nv
bnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQp
CitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAogewotICAgIGlm
ICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBJ
bnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OwotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVz
aXplKCkgIT0gUmVzaXplOjpOb25lKSB7Ci0gICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRh
aW5zKGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3Mg
aXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCi0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNo
b3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
c2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNp
cGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xs
YmFyKG1faEJhci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJv
eCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0
KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0
dXJuIG92ZXJmbG93UmVjdC54KCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllcikKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBj
b25zdAogewotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7
CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4g
b3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBM
YXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50
QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50
TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9s
aWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQxODksMTcg
KzI1OTEsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3Zl
cmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJs
YXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRl
ck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKLXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5m
byBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRC
ZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVy
KGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNj
cm9sbGJhcnMpOwotCi0gICAgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxz
ZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQ
YWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJv
cmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxlKQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjIy
LDcgKzI2MTMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXll
cnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNvbmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0
aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBvdmVyZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAg
IC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAg
ICBmb3IgKFJlbmRlckxheWVyKiBsYXllciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJS
YWRpdXMgPyB0aGlzIDogcGFyZW50KCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkg
ewotICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6
Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWlu
dEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiBsYXllci0+c2Ny
b2xsYWJsZUxheWVyKCkgJiYgbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT51c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAg
ICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVu
ZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29u
dGFpbmluZ0Jsb2NrQ2hhaW4oKmxheWVyKSkgewpAQCAtNDQyNCw3ICsyODE1LDggQEAgYm9vbCBS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBib29sJgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRp
c2FibGUgc3VicGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFt
ZXMgb25jZSB3ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0
aHJlYWQuCi0gICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRl
cmVyKCkuZnJhbWUoKS5vd25lckVsZW1lbnQoKSk7CisgICAgYm9vbCBkb2VzTm90VXNlQ29tcG9z
aXRlZFNjcm9sbGluZyA9ICFzY3JvbGxhYmxlTGF5ZXIoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkt
PnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFp
bnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBkb2VzTm90VXNlQ29tcG9z
aXRlZFNjcm9sbGluZykgfHwgKHJlbmRlcmVyKCkuZnJhbWUoKS5vd25lckVsZW1lbnQoKSk7CiAg
ICAgYm9vbCBpc1pvb21pbmcgPSAhcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmhhc1N0YWJsZVBh
Z2VTY2FsZUZhY3RvcigpOwogICAgIGlmIChzY3JvbGxpbmdPbk1haW5UaHJlYWQgfHwgY29udGVu
dHNTY3JvbGxCeVBhaW50aW5nIHx8IGlzWm9vbWluZykgewogICAgICAgICBkaWRRdWFudGl6ZUZv
bnRzID0gY29udGV4dC5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKTsKQEAgLTQ3MTksOCAr
MzExMSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgICAgICBwYWludExpc3Qo
cG9zaXRpdmVaT3JkZXJMYXllcnMoKSwgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50RmxhZ3MpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdP
dmVybGF5U2Nyb2xsYmFycyAmJiBoYXNTY3JvbGxiYXJzKCkpCi0gICAgICAgICAgICBwYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mbyk7CisgICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9s
bGJhcnMgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9s
bGJhcnMoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYWludE92ZXJmbG93Q29u
dHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mbyk7CiAKICAgICAgICAgaWYgKGZpbHRlckNvbnRleHQpIHsKICAgICAgICAgICAg
IC8vIFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RGcmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGly
dHlSZWN0IHdhcyByZXNldCB0byByZXByZXNlbnQgdGhlIGZpbHRlciBib3VuZHMuCkBAIC01MTg4
LDE4ICszNTgwLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZENsaXBwaW5nTWFza0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXIKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXll
ckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQotewotICAgIGZvciAoY29u
c3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgewotICAgICAgICBpZiAoZnJhZ21l
bnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQu
YmFja2dyb3VuZFJlY3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwg
cm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRp
b24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9m
ZnNldCkpLAotICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJl
Y3QucmVjdCgpKSwgdHJ1ZSk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgfQotfQotCiB2b2lkIFJl
bmRlckxheWVyOjpjb2xsZWN0RXZlbnRSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IpCiB7CiAgICAgQVNTRVJUKGxvY2FsUGFpbnRpbmdJbmZvLmV2ZW50
UmVnaW9uQ29udGV4dCk7CkBAIC01MjMzLDcgKzM2MTMsNyBAQCBib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mCiAgICAgICAgICAgICAgICAgYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3Quc2NhbGUoc2Nh
bGVGYWN0b3IpOwogICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KGFic29sdXRlTGF5
b3V0Vmlld3BvcnRSZWN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBoaXRUZXN0QXJl
YS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRS
ZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKKyAgICAgICAgICAgIGhpdFRlc3RB
cmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVu
dFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKICAg
ICB9CiAKICAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywg
bnVsbHB0ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgaGl0VGVzdExvY2F0aW9uLCBm
YWxzZSk7CkBAIC01NDY0LDkgKzM4NDQsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAg
ICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9pbnQg
bG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewotICAg
ICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsK
LSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRo
aXMtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmNh
blJlc2l6ZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhs
YXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgeworICAgICAgICAg
ICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYWxQb2ludCk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5leHQg
d2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRl
ck9iamVjdHMgb2YgdGhlIGxheWVyLiBDaGVjawpAQCAtNTUzOSwzNSArMzkyMSw2IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxh
eWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91
dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKGxheWVyRnJhZ21lbnRz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBib3JkZXJCb3hS
ZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5ib3Jk
ZXJCb3hSZWN0KCkpOwotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
LQotICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJh
Z21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7Ci0gICAgICAgIGlmIChz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgICAg
IEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29y
bmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJu
IEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJv
dHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJl
Y3Quc2l6ZSgpIH07Ci0gICAgICAgIH0KLSAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9t
UmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpOwotICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1h
eFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXpl
KCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gbGF5
ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgTGF5
ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgYXV0
byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50
UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOwotICAgICAgICBpZiAo
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJl
c2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50
KCkpKSB7Ci0gICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRl
c3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRM
YXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250
YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwKICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsKQEAgLTYwMDgsMzYgKzQzNjEs
NiBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNl
ZWRzQm91bmRzKSBjb25zdAogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5k
cykKLXsKLSAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRS
ZWN0KGJvdW5kcykpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhckJsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kcygpCi17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMgPSBJbnRSZWN0
KCk7Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+Y2xlYXJCbG9ja1Nl
bGVjdGlvbkdhcHNCb3VuZHMoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2FwcygpCi17Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGls
ZC0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCi0gICAgaWYgKG1fYmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVj
dCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNj
cm9sbFBvc2l0aW9uKCkpOwotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYm
ICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICByZWN0LmludGVyc2VjdChkb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQo
KSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBp
ZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikp
OyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAoIXJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0K
IGJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3Qm
IGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJM
YXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3Qg
T3B0aW9uYWw8TGF5b3V0UmVjdD4mIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAogewogICAgIC8v
IEFsd2F5cyBleGFtaW5lIHRoZSBjYW52YXMgYW5kIHRoZSByb290LgpAQCAtNjMzNCwyMSArNDY1
Nyw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9iYWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBo
aWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25z
dAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6
OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tp
bmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19
Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFu
c2Zvcm0oT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAg
ICAgYm9vbCBwYWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBh
aW50c0ludG9XaW5kb3coKTsKQEAgLTYzNzksMTEgKzQ2ODcsNiBAQCBib29sIFJlbmRlckxheWVy
OjpzaG91bGRBcHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2
aW9yLCBPcAogICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQ
YWludGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6
OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3Jv
bGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJl
bmRlckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1MDcsOCArNDgxMCwx
MiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QK
ICAgICBpZiAoIWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICByZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBjYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxh
YmxlTGF5ZXIoKTsKKyAgICBib29sIGhhc092ZXJsYXlTY3JvbGxiYXJzID0gc2Nyb2xsYWJsZUxh
eWVyICYmIHNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICBib29s
IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgPSBzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJs
ZUxheWVyLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisKKyAgICByZXR1cm4gaGFzT3Zl
cmxheVNjcm9sbGJhcnMKKyAgICAgICAgfHwgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZwogICAg
ICAgICB8fCByZW5kZXJlcigpLmlzVGFibGVSb3coKQogICAgICAgICB8fCByZW5kZXJlcigpLmlz
Q2FudmFzKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1ZpZGVvKCkKQEAgLTY2MjUsNyArNDkz
Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0
CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgaGFz
T3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQoKSB8fCAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkt
Pmhhc092ZXJmbG93Q29udHJvbHMoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFs
bHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CkBAIC02NjM1
LDcgKzQ5NDIsNyBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRl
ZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRl
bnQoKSB8fCAhcmVuZGVyZXIoKS5zdHlsZSgpLm9wYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IGhhc092ZXJm
bG93Q29udHJvbHMoKSkgeworICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8
fCAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc092ZXJmbG93Q29u
dHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKQEAgLTY2NjAsMzggKzQ5NjcsNiBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5
Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVy
biBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVt
c2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZs
b3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92
ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRv
aW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8g
a2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0g
ICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgp
ICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Nj
cm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVp
cmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJv
b2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKCho
YXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihi
b3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJh
cihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24tb3Zl
cmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBt
YXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwg
d2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJh
ciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92
ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpT
Y3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZC
YXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3Zl
cmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNj
cm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05v
cm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CkBAIC02NzE0LDYgKzQ5ODks
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVy
IGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0
eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBh
bG9uZyB3aXRoIHRoZSByZXN0LgorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNj
cm9sbGFibGVMYXllcigpOwogICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICBib29sIHZpc2li
aWxpdHlDaGFuZ2VkID0gb2xkU3R5bGUtPnZpc2liaWxpdHkoKSAhPSByZW5kZXJlcigpLnN0eWxl
KCkudmlzaWJpbGl0eSgpOwogICAgICAgICBpZiAob2xkU3R5bGUtPnVzZWRaSW5kZXgoKSAhPSBy
ZW5kZXJlcigpLnN0eWxlKCkudXNlZFpJbmRleCgpIHx8IHZpc2liaWxpdHlDaGFuZ2VkKSB7CkBA
IC02NzIzLDE4ICs0OTk5LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgICAgIH0K
IAogICAgICAgICAvLyBWaXNpYmlsaXR5IGlzIGlucHV0IHRvIGNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKS4KLSAgICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgY29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICAgICAgaWYgKHZpc2li
aWxpdHlDaGFuZ2VkICYmIHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAK
LSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgp
Lm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigp
LmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1
ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUt
PnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAg
ICBtX21hcnF1ZWUgPSBudWxscHRyOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpIHsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5jcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpOworICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9s
ZFN0eWxlKTsKKyAgICB9CiAKLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShv
bGRTdHlsZSk7CiAgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIGNhbiBtYWtlIHRoaXMgbGF5ZXIg
c2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAgICAgLy8gdG8gcmVjb21wdXRlIHRoZSBiaXQgb25j
ZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRhdGVkLgogICAgIHVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7CkBAIC02NzQ3LDE1ICs1MDIwLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fcmVmbGVjdGlvbi0+c2V0U3R5bGUoY3JlYXRlUmVm
bGVjdGlvblN0eWxlKCkpOwogICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRl
Y3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJz
YSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAg
ICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIAotICAg
IHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisK
KyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKSB7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU2Nyb2xsYmFyU3R5bGUoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3Jv
bGxDb3JuZXJTdHlsZSgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVJlc2l6ZXJT
dHlsZSgpOworICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwog
ICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwpAQCAtNjc3Niw5OCArNTA0Niw2IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKLXsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmll
dyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0gICAgYm9vbCBpc1Zpc2libGVU
b0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLSAgICBpZiAoSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVu
dCgpKQotICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYg
b3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLQotICAgIGJvb2wgaXNT
Y3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OwotICAgIGJvb2wg
YWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwot
ICAgIAotICAgIGlmIChpc1Njcm9sbGFibGUpIHsKLSAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRT
Y3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcu
YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKSB7Ci0gICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92
ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9IGZhbHNlOwotICAgIH0KLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGlm
IChhZGRlZE9yUmVtb3ZlZCkgewotICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2Ug
b25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBz
Y3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQotICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJl
bW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KLSAgICAgICAgICAgIHVu
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgICAgICB9Ci0g
ICAgfQotI2Vsc2UKLSAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKLXsKLSAg
ICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJl
bmRlcmVyKCkpOwotICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNj
cm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQot
ICAgIGlmICghY29ybmVyKSB7Ci0gICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1f
c2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVy
ZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKLSAgICAgICAgLy8gRklYTUU6IEEg
cmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIt
PnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVh
clNjcm9sbENvcm5lcigpCi17Ci0gICAgaWYgKCFtX3Njcm9sbENvcm5lcikKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9zY3Jv
bGxDb3JuZXIgPSBudWxscHRyOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZXNpemVy
U3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJG
b3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxl
KHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxw
dHI7Ci0KLSAgICBpZiAoIXJlc2l6ZXIpIHsKLSAgICAgICAgY2xlYXJSZXNpemVyKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzaXplcikgewotICAgICAgICBtX3Jl
c2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRv
Y3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKLSAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVy
ZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9yZXNpemVyLT5z
ZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHls
ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJl
c2l6ZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXNpemVyKCkKLXsKLSAgICBp
ZiAoIW1fcmVzaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzaXplci0+c2V0UGFyZW50
KG51bGxwdHIpOwotICAgIG1fcmVzaXplciA9IG51bGxwdHI7Ci19Ci0KIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6cmVmbGVjdGlvbkxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZWZs
ZWN0aW9uID8gbV9yZWZsZWN0aW9uLT5sYXllcigpIDogbnVsbHB0cjsKQEAgLTY5OTksNyArNTE3
Nyw3IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0IFJl
bmRlckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFyZW50ID0gbGF5ZXIucGFyZW50KCkp
CiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5k
ZXJMYXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5
ZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVudFJlc3BlY3RpbmdQYXJl
bnRGcmFtZXMoKSBjb25zdApAQCAtNzI0NSwxMSArNTQyMywxMyBAQCBzdGF0aWMgdm9pZCBvdXRw
dXRQYWludE9yZGVyVHJlZVJlY3Vyc2l2ZShUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFdlYkNv
cmU6OlJlbgogCiAgICAgc3RyZWFtIDw8ICIgIjsKIAotICAgIHN0cmVhbSA8PCBsYXllci5ib3hT
Y3JvbGxpbmdTY29wZSgpOwotICAgIHN0cmVhbSA8PCAiICI7Ci0gICAgc3RyZWFtIDw8IGxheWVy
LmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgc3RyZWFtIDw8IHNjcm9sbGFi
bGVMYXllci0+Ym94U2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIjsKKyAg
ICAgICAgc3RyZWFtIDw8IHNjcm9sbGFibGVMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
OwogCi0gICAgc3RyZWFtIDw8ICIgIjsKKyAgICAgICAgc3RyZWFtIDw8ICIgIjsKKyAgICB9CiAK
ICAgICBvdXRwdXRJZGVudChzdHJlYW0sIGRlcHRoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaAppbmRleCBkODM3M2FhZTgxOWQ0ZWI5OWQ2YjI3ZGNjZTVlZWUwOTRmZWU5
YmY0Li4wNDQxZGRhYjcyZDJhZWViODZjMjU0NGZlMDI1YzIwODU2NDk3ZWE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUg
IlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclB0ci5oIgogI2luY2x1ZGUgIlNjcm9sbEJl
aGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlIDxtZW1vcnk+
CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAg
LTE0MCwyMCArMTM5LDI5IEBAIHN0cnVjdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyB7CiAg
ICAgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IgeyBTY3JvbGxCZWhhdmlvcjo6QXV0byB9OwogfTsK
IAotdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKLQogREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVyTGF5ZXIgZmlu
YWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAgICAgZnJpZW5k
IGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVy
czsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZyaWVuZCBjbGFz
cyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTsKKworICAgIGVudW0gY2xhc3MgTGF5ZXJUeXBlIHsKKyAgICAgICAgU3RhdGljLAor
ICAgICAgICBTY3JvbGxhYmxlCisgICAgfTsKIAogICAgIGV4cGxpY2l0IFJlbmRlckxheWVyKFJl
bmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllcigpOwogCisg
ICAgTGF5ZXJUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUeXBlOyB9CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXll
cigpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Ny
b2xsYWJsZUxheWVyKCkgY29uc3Q7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51
bGxlZCBvdXQuCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTIyMyw2ICsyMzEsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoYm9vbCBmbGFn
KSB7IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQogI2VuZGlmCiAKK3Byb3Rl
Y3RlZDoKKyAgICBSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiwgTGF5ZXJUeXBl
KTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBmbGFncyBwcm9wYWdhdGUgaW4gcGFpbnQgb3Jk
ZXIgKHotb3JkZXIgdHJlZSkuCiAgICAgZW51bSBjbGFzcyBDb21wb3NpdGluZyB7CkBAIC00MTEs
OCArNDIyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSog
bWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBp
c1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVy
OyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDExMyAr
NDQyLDE0IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxl
U2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmlu
YWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFs
OwotCi0gICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgaW50IHNjcm9sbEhlaWdodCgp
IGNvbnN0OwotCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
LQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRo
ZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXpl
JiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAg
IGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwg
U2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxU
b09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBT
Y3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLQotICAgIHZvaWQgc2Nyb2xs
VG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAg
ICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Ny
b2xsOjpObyk7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlv
biYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQs
IEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLQotICAgIC8vIFRoZXNlIGFy
ZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkg
eyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAg
IHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNl
dChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9s
bENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbmVhcmVz
dCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgotICAgIC8vIEZJWE1FOiBUaGlz
IGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkg
d2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCi0gICAgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91
bmRhcmllcykgY29uc3Q7Ci0KLSAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChB
dmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3Qi
IGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RU
b1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVk
LCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgYm9vbCBzY3JvbGxz
T3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZs
b3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29u
c3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1f
dkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2
b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4g
Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lT
Y3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAg
Ym9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xs
YmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBj
b25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xs
UG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBv
c2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xs
YWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBi
b29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURh
cmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
LSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wg
cmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVp
cmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRp
b24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVx
dWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0
YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2
b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIHRy
dWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBs
b29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KLSAg
ICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKICAgICAvLyBSZXR1cm5z
IHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJl
cyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93OyB9CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAg
ICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wgaGFz
T3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJv
bChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxvd0Nv
bnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7Ci0gICAg
SW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50
KSBjb25zdDsKLQotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWlu
dGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVy
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgdm9p
ZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKLSAgICBib29sIGNhblJlc2l6ZSgpIGNv
bnN0OwotICAgIHZvaWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExh
eW91dFNpemUmKTsKLSAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5S
ZXNpemVNb2RlOyB9Ci0gICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNp
emVNb2RlID0gYjsgfQotCiAgICAgYm9vbCBpc1JlbmRlclZpZXdMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZW5kZXJWaWV3TGF5ZXI7IH0KICAgICBib29sIGlzRm9yY2VkU3RhY2tpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZWRTdGFja2luZ0NvbnRleHQ7IH0KICAgICBib29s
IGlzT3Bwb3J0dW5pc3RpY1N0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNPcHBv
cnR1bmlzdGljU3RhY2tpbmdDb250ZXh0OyB9CkBAIC01NTUsOSArNDY1LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7CiAgICAgdm9p
ZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRy
ZWUsIGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5ZXJJbkVuY2xv
c2luZ1BhZ2luYXRpb25DaGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlvbkluY2x1c2lv
bk1vZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVkZUNvbXBvc2l0
ZWRQYWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC01NzksMTAgKzQ4
Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFu
dHMoQ2xpcFJlY3RzVHlwZSB0eXBlVG9DbGVhciA9IEFsbENsaXBSZWN0VHlwZXMpOwogICAgIHZv
aWQgY2xlYXJDbGlwUmVjdHMoQ2xpcFJlY3RzVHlwZSB0eXBlVG9DbGVhciA9IEFsbENsaXBSZWN0
VHlwZXMpOwogCi0gICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5
b3V0UmVjdCYpOwotICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKLSAg
ICB2b2lkIHJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLQogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgQVNTRVJUKCFtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkpIGhlcmUsIGJ1dCBzZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDQ0CiAgICAgLy8gZGl0
dG8gZm9yIGhhc1Zpc2libGVEZXNjZW5kYW50KCksIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNzcKICAgICBib29sIGhhc1Zpc2libGVDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9oYXNWaXNpYmxlQ29udGVudDsgfQpAQCAtNjM3LDYgKzU0MCw4IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3Np
dGlvblR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllcklu
Q29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5n
Q29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBU
aGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIg
YXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygp
IGNvbnN0OwpAQCAtNjk4LDcgKzYwMyw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0
KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9
IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wg
aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29s
IGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBI
aXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJl
aGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAg
ICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29u
c3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlw
ZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZs
b3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03
ODQsMTEgKzY4OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9u
KExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9u
OyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24p
IHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25z
dCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQg
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8v
IE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQg
aW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTgsMjAgKzc1Nyw5IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2lu
Zyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVy
KiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3Jh
cGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNB
c3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcjsgfQogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJv
b2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKLSAgICAv
LyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29t
ZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KLSAg
ICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJl
dHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9Ci0gICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+
IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGU7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aFRyYW5zcGFyZW5jeShPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biAoaXNUcmFuc3BhcmVudCgpIHx8IGhhc0JsZW5kTW9kZSgpIHx8IChpc29sYXRlc0JsZW5kaW5n
KCkgJiYgIXJlbmRlcmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSkgJiYgKChwYWlu
dEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKSB8fCAh
aXNDb21wb3NpdGVkKCkpOwpAQCAtODg1LDExICs3NzMsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhl
IHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgYm9vbCBiYWNr
Z3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0Owog
Ci0gICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRDb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAgIGJvb2wgcGFpbnRz
V2l0aEZpbHRlcnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JG
aWx0ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOCw4ICs4MDEsNiBAQCBwdWJsaWM6CiAKICAgICBSZW5k
ZXJMYXllciogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNvbnN0OwogCi0gICAg
Ym9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCk7IH0KLQogICAgIHZvaWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCkgeyBTaW5nbGVQ
YWludEZyZXF1ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIgfTsgfQogICAg
IGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5j
eVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzgxMSw3IEBAIHB1
YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFp
bnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBi
b29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7
CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmlu
ZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArODkx
LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAot
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwot
CiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJl
cGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVw
YWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDMwLDE2ICs5MDgsNiBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1h
cCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKIAotICAgIGVudW0gVXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewotICAgICAgICBJc092ZXJmbG93U2Ny
b2xsICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIEhhc1NlZW5WaWV3
cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgICAgICA9IDEgPDwgMSwKLSAgICAgICAgSGFzU2VlbkFu
Y2VzdG9yV2l0aE92ZXJmbG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBIYXNDaGFu
Z2VkQW5jZXN0b3IgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBP
cHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKLQot
ICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBj
b25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRy
ZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUp
IGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA3Miw3ICs5NDAsNiBA
QCBwcml2YXRlOgogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERp
cnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYs
IE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlcik7CiAgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2Uo
UGFpbnRQaGFzZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2Jq
ZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0
KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJv
bHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYpOwogICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRz
KGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWlu
dGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRp
bmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3Qq
IHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50VHJhbnNmb3JtZWRMYXll
ckludG9GcmFnbWVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KTsKQEAgLTEwOTksNjQgKzk2NiwxNCBAQCBwcml2
YXRlOgogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RD
b250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RG
aWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXll
ciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExh
eWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0g
bnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNr
Z3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5
b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwot
ICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAg
IGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNv
bnN0OwogCiAgICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7Ci0KLSAg
ICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29u
c3QgZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0g
ICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IElu
dFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBm
aW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lk
IHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxp
bmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZp
c2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xs
YmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNp
emUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25N
b3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hl
ZWxFdmVudCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1h
dGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wg
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
KSBjb25zdCBmaW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25z
dCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
ICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAg
IHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5k
aWYKLQotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVy
cmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Ny
b2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0
IFNjcm9sbGJhciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFT
ZXQoYm9vbCBoYXNPdmVyZmxvdyk7Ci0gICAgCiAgICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xs
KCkgY29uc3Q7CiAKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50
U3RhdHVzKCk7CkBAIC0xMTk2LDE0ICsxMDEzLDYgQEAgcHJpdmF0ZToKICAgICAvLyBDb252ZXJ0
IGEgcG9pbnQgaW4gYWJzb2x1dGUgY29vcmRzIGludG8gbGF5ZXIgY29vcmRzLCB0YWtpbmcgdHJh
bnNmb3JtcyBpbnRvIGFjY291bnQKICAgICBMYXlvdXRQb2ludCBhYnNvbHV0ZVRvQ29udGVudHMo
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxl
KCk7Ci0gICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIHZvaWQgdXBkYXRlUmVzaXpl
clN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKLQotICAgIHZvaWQgZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6
ZXJDb3JuZXJSZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlUGFnaW5hdGlvbigpOwogCiAgICAgdm9p
ZCBzZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBiKSAgeyBtX2hhc0NvbXBvc2l0aW5n
RGVzY2VuZGFudCA9IGI7IH0KQEAgLTEyMTcsMjAgKzEwMjYsNyBAQCBwcml2YXRlOgogICAgIExh
eW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1Jp
Z2h0KCkgY29uc3Q7CiAKLSAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewotICAgICAg
ICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgICAgIEludFJlY3QgdmVydGljYWxT
Y3JvbGxiYXI7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyOwotICAgICAgICBJbnRSZWN0
IHJlc2l6ZXI7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyLmlzRW1wdHko
KSA/IHNjcm9sbENvcm5lciA6IHJlc2l6ZXI7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIE92ZXJm
bG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OwotCi0gICAgYm9v
bCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0OwotCisgICAgTGF5ZXJUeXBlIG1fbGF5ZXJUeXBlOwogICAgIE9wdGlvblNldDxDb21w
b3NpdGluZz4gbV9jb21wb3NpdGluZ0RpcnR5Qml0czsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1Jl
bmRlclZpZXdMYXllciA6IDE7CkBAIC0xMjQ0LDEwICsxMDQwLDYgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fbm9ybWFsRmxvd0xpc3REaXJ0eTogMTsKICAgICBib29sIG1faGFkTmVnYXRpdmVaT3Jk
ZXJMaXN0IDogMTsKIAotICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVyIGlz
IGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBzdGFy
dCBhbmQgc3RvcC4KLSAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKLQotICAgIGJvb2wgbV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV9pc1NlbGZQYWludGluZ0xheWVy
IDogMTsKIAogICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGluZyBkZXNjZW5kYW50cywgd2Ug
ZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcgcGFpbnRpbmcuIFRoaXMgY2Fu
IGxlYWQgdG8KQEAgLTEyNTksMTQgKzEwNTEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50aW5nIHRoaXMgbGF5ZXIgb3Ig
YW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1fcGFpbnRpbmdJbnNpZGVSZWZs
ZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlmIHdlIGFyZSBwYWludGluZyBp
bnNpZGUgYSByZXBsaWNhLgotICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQgOiAxOwogICAg
IHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFpbnRTdGF0dXMKIAogICAgIGJv
b2wgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJs
ZUNvbnRlbnQgOiAxOwogICAgIGJvb2wgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5IDog
MTsKICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgOiAxOwotICAgIGJvb2wgbV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwogICAgIGJvb2wgbV9pc0ZpeGVkSW50ZXJzZWN0aW5n
Vmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9iZWhhdmVzQXNGaXhlZCA6IDE7CiAKQEAgLTEyODcs
MTcgKzEwNzcsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGlu
Z1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBt
X3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRD
b25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVl
ZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlz
dE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzgsMjUgKzExMTcsOCBAQCBwcml2
YXRlOgogICAgIC8vIFRoZSBsYXllcidzIHdpZHRoL2hlaWdodAogICAgIEludFNpemUgbV9sYXll
clNpemU7CiAKLSAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOwotICAgIE9wdGlv
bmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsKLQotICAgIC8v
IFRoZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCi0gICAgSW50U2l6ZSBtX3Nj
cm9sbFNpemU7Ci0KLSAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBw
YWlyIG9mIHNjcm9sbGJhcnMuCi0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOwotICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxDbGlwUmVjdHND
YWNoZT4gbV9jbGlwUmVjdHNDYWNoZTsKICAgICAKLSAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJs
YXlTY3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdy
YWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7
Ci0gICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Ny
b2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4u
Ci0gICAgCiAgICAgLy8gQ2FjaGVkIG5vcm1hbCBmbG93IHZhbHVlcyBmb3IgYWJzb2x1dGUgcG9z
aXRpb25lZCBlbGVtZW50cyB3aXRoIHN0YXRpYyBsZWZ0L3RvcCB2YWx1ZXMuCiAgICAgTGF5b3V0
VW5pdCBtX3N0YXRpY0lubGluZVBvc2l0aW9uOwogICAgIExheW91dFVuaXQgbV9zdGF0aWNCbG9j
a1Bvc2l0aW9uOwpAQCAtMTM2NiwxMCArMTEyOCw2IEBAIHByaXZhdGU6CiAgICAgLy8gTWF5IHVs
dGltYXRlbHkgYmUgZXh0ZW5kZWQgdG8gbWFueSByZXBsaWNhcyAod2l0aCB0aGVpciBvd24gcGFp
bnQgb3JkZXIpLgogICAgIFJlbmRlclB0cjxSZW5kZXJSZXBsaWNhPiBtX3JlZmxlY3Rpb247CiAK
LSAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJl
c2l6ZXIuCi0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVy
OwotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7Ci0KICAgICAv
LyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8g
YmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3QgcGFnaW5hdGVkLgogICAgIFdlYWtQ
dHI8UmVuZGVyTGF5ZXI+IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDUxOWQzNjEw
NzgwOGUzNjJmN2MwNDBmNDI3OGM4ODNhMmYzOTA2MWUuLmNkZjlhOWE2ZGQ0YjU1MGFjYzIxZDUy
NmE0MDJhODg1MWNlYTViMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC01MywxMyArNTMsMTQgQEAKICNpbmNsdWRlICJQZXJmb3Jt
YW5jZUxvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1
ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJG
cmFnbWVudGVkRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRl
ICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVk
aWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
QEAgLTI2OSw3ICsyNzAsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6d2lsbEJlRGVzdHJv
eWVkKCkKICNlbmRpZgogCiAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuYmFja2luZygpID09IHRo
aXMpOwotICAgIGNvbXBvc2l0b3IoKS5yZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMo
bV9vd25pbmdMYXllcik7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIGNvbXBvc2l0b3IoKS5yZW1vdmVGcm9t
U2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoKnNjcm9sbGFibGVMYXllcik7CiAKICAgICBjbGVhckJh
Y2tpbmdTaGFyaW5nTGF5ZXJzKCk7CiB9CkBAIC00MjEsMTEgKzQyMywxMSBAQCBzdGF0aWMgVGls
ZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJh
Z2UoY29uc3QgUmVuZAogCiAgICAgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgdGlsZUNvdmVy
YWdlID0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZpc2libGVBcmVhOwogICAgIGJvb2wgdXNl
TWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSA9IGZyYW1lVmlldy5pbkxpdmVSZXNpemUoKTsK
LSAgICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUpIHsKLSAgICAgICAgaWYg
KGxheWVyLmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICBpZiAoIXVzZU1p
bmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgJiYgbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsK
KyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93KCkpCiAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5n
OjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CiAKLSAgICAgICAgaWYgKGxheWVyLmhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXllci5zY3JvbGxh
YmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKICAgICAgICAgICAg
IHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmVydGljYWxTY3JvbGxp
bmc7CiAgICAgfQogICAgIHJldHVybiB0aWxlQ292ZXJhZ2U7CkBAIC0xMjMyLDggKzEyMzQsMTAg
QEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xh
eWVyUmVjdChjb25zdCBSZW5kZXJMYXllcioKICAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCBh
bmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMgPSBhbmNlc3RvckJhY2tpbmctPmNvbXBvc2l0ZWRCb3Vu
ZHMoKTsKICAgICAgICAgTGF5b3V0UmVjdCBzY3JvbGxDb250YWluZXJCb3ggPSBzY3JvbGxDb250
YWluZXJMYXllckJveChhbmNlc3RvclJlbmRlckJveCk7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBz
Y3JvbGxPZmZzZXQgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbE9mZnNldCgpOwotICAgICAg
ICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IExheW91dFJlY3QoKHNjcm9sbENvbnRhaW5lckJv
eC5sb2NhdGlvbigpIC0gdG9MYXlvdXRTaXplKGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5sb2Nh
dGlvbigpKSAtIHRvTGF5b3V0U2l6ZShzY3JvbGxPZmZzZXQpKSwgc2Nyb2xsQ29udGFpbmVyQm94
LnNpemUoKSk7CisgICAgICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAo
Y29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9s
bE9mZnNldCA9IHRvTGF5b3V0U2l6ZShjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVMYXll
cigpLT5zY3JvbGxPZmZzZXQoKSk7CisgICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0g
TGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUo
YW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gc2Nyb2xsT2Zmc2V0KSwgc2Ny
b2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHBhcmVudEdyYXBo
aWNzTGF5ZXJSZWN0OwpAQCAtMTI4NSw3ICsxMjg5LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3Ip
CiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGlu
Z0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNP
dmVyZmxvd1Njcm9sbCkgewotICAgICAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCkpOworICAgICAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBl
bnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zm
c2V0KCk7CiAKICAgICAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNP
cmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBsYXN0Q2xpcExheWVyUmVjdC5t
b3ZlQnkoLXNjcm9sbE9mZnNldCk7CkBAIC0xMzkwLDcgKzEzOTUsOSBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRB
bmNlc3RvcikKICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHBhcmVudExheWVyQm91bmRz
LmxvY2F0aW9uKCkpKTsKICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0U2l6ZShy
b3VuZGVkSW50U2l6ZShMYXlvdXRTaXplKHNjcm9sbENvbnRhaW5lckJveC53aWR0aCgpLCBzY3Jv
bGxDb250YWluZXJCb3guaGVpZ2h0KCkpKSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9s
bE9mZnNldCA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgICAg
IEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgdXBkYXRlU2Ny
b2xsT2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAKICAgICAgICAgRmxvYXRTaXplIG9sZFNjcm9sbGlu
Z0xheWVyT2Zmc2V0ID0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVy
KCk7CkBAIC0xNDA0LDcgKzE0MTEsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
R2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKIAogICAgICAg
ICBib29sIHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkID0gb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQg
IT0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CiAKLSAgICAg
ICAgSW50U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsV2lkdGgoKSwgbV9vd25p
bmdMYXllci5zY3JvbGxIZWlnaHQoKSk7CisgICAgICAgIEludFNpemUgc2Nyb2xsU2l6ZShzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0
KCkpOwogICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPSBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+
c2l6ZSgpIHx8IHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkKQogICAgICAgICAgICAgbV9zY3JvbGxl
ZENvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCkBAIC0xNDg5LDE0ICsxNDk2LDE4
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50
cyhTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVTY3JvbGxPZmZzZXQoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCkKIHsKLSAgICBpZiAo
bV9vd25pbmdMYXllci5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIHsK
KyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXll
cigpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVz
ZXIpIHsKICAgICAgICAgLy8gSWYgc2Nyb2xsaW5nIGlzIGhhcHBlbmluZyBleHRlcm5hbGx5LCB3
ZSBkb24ndCB3YW50IHRvIHRvdWNoIHRoZSBsYXllciBib3VuZHMgb3JpZ2luIGhlcmUgYmVjYXVz
ZSB0aGF0IHdpbGwgY2F1c2Ugaml0dGVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRD
b250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMp
OwotICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNp
bGlhdGlvbih0cnVlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
Tm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91bmRz
IG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBzdWJs
YXllci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0
LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBtX293bmluZ0xh
eWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CisgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uKGZhbHNlKTsKICAgICB9CiAKICAgICBBU1NFUlQobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIt
PnBvc2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAtMTkxMSwxMiArMTkyMiwxNiBAQCBib29sIFJlbmRl
ckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzSG9yaXpvbnRh
bFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNj
cm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKCFt
X293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxh
YmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXll
ckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNj
cm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJh
cihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsK
IH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIo
KSBjb25zdApAQCAtMTkyNCwxMiArMTkzOSwxNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6
cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CiAgICAgaWYgKCFpczxSZW5kZXJCb3g+
KG1fb3duaW5nTGF5ZXIucmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCku
c2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9s
bGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVy
UmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVydGlj
YWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8g
dmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKTsK
KyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0
aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwog
ICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKQEAg
LTE5NjUsMTAgKzE5ODQsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJm
bG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBsYXllcnND
aGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIsIG5l
ZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBpZiAo
YXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpKTsKKwogICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdl
ZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9s
bGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIEhvcml6b250YWxTY3JvbGxiYXIpOwor
ICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCksIEhvcml6b250
YWxTY3JvbGxiYXIpOwogICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQp
Ci0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxi
YXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSwgVmVydGljYWxTY3Jv
bGxiYXIpOwogICAgIH0KIAogICAgIHJldHVybiBsYXllcnNDaGFuZ2VkOwpAQCAtMTk3Niw3ICsx
OTk3LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNM
YXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmlu
Z0xheWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293
bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyIHx8
ICFzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGJhcnMoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRklYTUU6IFNob3VsZCBkbyBkZXZpY2UtcGl4ZWwgc25hcHBpbmcuCkBAIC0xOTk4LDE2
ICsyMDIwLDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHNMYXllcnMoKQogICAgIH07CiAKICAgICAvLyBUaGVzZSByZWN0cyBhcmUgcmVsYXRpdmUg
dG8gdGhlIGJvcmRlckJveFJlY3QuCi0gICAgYXV0byByZWN0cyA9IG1fb3duaW5nTGF5ZXIub3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7CisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVy
KCpsYXllciwgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0KTsKLSAg
ICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLmhvcml6b250YWxTY3Jv
bGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+
c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYm
ICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxh
eWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Ny
b2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGluZ0JveElu
c2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRp
Y2FsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAg
bGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFy
KCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAgICBpZiAoYXV0
byogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CkBAIC0yMTY1LDcgKzIxODcsOCBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVl
ZHNTY3JvbGxpbmdMYXllcnMpCiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXRB
bmNob3JQb2ludCh7IH0pOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5hZGRDaGls
ZCgqbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbXBv
c2l0b3IoKS53aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhtX293bmluZ0xheWVy
LCAqdGhpcyk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigp
KTsKKyAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNr
aW5nKCptX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLCAqdGhpcyk7CiAKICAgICAgICAg
d2lsbERlc3Ryb3lMYXllcihtX3Njcm9sbENvbnRhaW5lckxheWVyLmdldCgpKTsKICAgICAgICAg
d2lsbERlc3Ryb3lMYXllcihtX3Njcm9sbGVkQ29udGVudHNMYXllci5nZXQoKSk7CkBAIC0yMTc0
LDkgKzIxOTcsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xh
eWVycyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQogICAgICAgICBHcmFwaGljc0xheWVyOjp1
bnBhcmVudEFuZENsZWFyKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyKTsKICAgICB9CiAKLSAgICBp
ZiAobV9zY3JvbGxDb250YWluZXJMYXllcikKLSAgICAgICAgY29tcG9zaXRvcigpLmRpZEFkZFNj
cm9sbGluZ0xheWVyKG1fb3duaW5nTGF5ZXIpOwotICAgIAorICAgIGlmIChtX3Njcm9sbENvbnRh
aW5lckxheWVyKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICAgICAgY29tcG9zaXRvcigpLmRpZEFkZFNjcm9sbGluZ0xheWVyKCptX293bmlu
Z0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjk4NSw4ICszMDEwLDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRl
bnRzTmVlZERpc3BsYXlJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKICAgICB9CiAK
ICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXItPmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9s
bGFibGVMYXllcigpKTsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxT
bmFwcGVkUmVjdEZvclBhaW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Nj
cm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUo
bV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRl
cmVyKTsKKyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Ny
b2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVu
ZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMDMyLDgg
KzMwNTgsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXAKICAgICAgICAgaWYgKCZsYXllciA9
PSAmbV9vd25pbmdMYXllcikgewogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRz
KGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKLSAgICAgICAgICAgIGlmIChs
YXllci5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250
ZXh0KQotICAgICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBw
YWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBh
aW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAgICAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFi
bGVMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigp
LT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0
KQorICAgICAgICAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBwYWludEZsYWdzIHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnOjpQ
YWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyV2l0aEVmZmVjdHMoY29udGV4dCwgcGFpbnRp
bmdJbmZvLCBwYWludEZsYWdzKTsKIApAQCAtMzMyMywxNyArMzM1MSwyMiBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyLCBHcmFwaAogICAgICAgICAgICAgcGFpbnREZWJ1Z092ZXJsYXlzKGdyYXBoaWNzTGF5
ZXIsIGNvbnRleHQpOwogCiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5n
TGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAg
ICBBU1NFUlQobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50
U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3Jv
bGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5
ZXIgPT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xs
YmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0
KTsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAg
ICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT52ZXJ0
aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3Jh
cGhpY3NMYXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29y
bmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29y
bmVyT3JSZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293
bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxh
eWVyKTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBj
b250ZXh0LnRyYW5zbGF0ZSgtY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgTGF5b3V0
UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBMYXlvdXRSZWN0KGNsaXApOwogICAgICAgICB0cmFuc2Zv
cm1lZENsaXAubW92ZUJ5KGNvcm5lclJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIG1fb3duaW5n
TGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZEludFJl
Y3QodHJhbnNmb3JtZWRDbGlwKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIucGFpbnRSZXNpemVy
KGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CisgICAgICAgIHNjcm9sbGFi
bGVMYXllci0+cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZElu
dFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFpbnRS
ZXNpemVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgfQogI2lm
bmRlZiBOREVCVUcKICAgICByZW5kZXJlcigpLnBhZ2UoKS5zZXRJc1BhaW50aW5nKGZhbHNlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKaW5kZXggYTJiNThlNjY2OTA2ODVmY2U2YjFhODgzNDljN2ZmM2NlNjg1MjI2YS4uNzVmMGJk
ZWU0OWI3ZTVjMjhmYzhmNmQ0ZTc2NjdkYWZmMDFkNWI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTMxNTMsNyArMzE1
Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
UG9zaXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLCBSZXF1aXJlc0NvbXBvc2l0aW5nRGF0YSYgcXVlcnlEYXRhKSBjb25zdAog
ewotICAgIGlmICghbGF5ZXIuY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgIGlmICgh
bGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkgfHwgIWxheWVyLnNjcm9sbGFibGVMYXllcigpLT5jYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChxdWVyeURhdGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0z
MjkzLDcgKzMyOTMsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXNlQ29vcmRpbmF0
ZWRTY3JvbGxpbmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYgbAogCiBzdGF0aWMgYm9vbCBp
c1Njcm9sbGVkQnlPdmVyZmxvd1Njcm9sbExheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwg
Y29uc3QgUmVuZGVyTGF5ZXImIG92ZXJmbG93U2Nyb2xsTGF5ZXIpCiB7Ci0gICAgcmV0dXJuIGxh
eWVyLmJveFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5jb250ZW50c1Nj
cm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJUKGxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAg
ICBBU1NFUlQob3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgcmV0
dXJuIGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5ib3hTY3JvbGxpbmdTY29wZSgpID09IG92ZXJm
bG93U2Nyb2xsTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KTsKIH0KIAogc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5n
TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgaW50ZXJt
ZWRpYXRlTGF5ZXIsIGJvb2wmIHNhd0ludGVybWVkaWF0ZUxheWVyKQpAQCAtNDU2Nyw4ICs0NTY5
LDExIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9s
bGluZ05vZGVGb3JWaWV3cG9ydENvbnN0cmFpbmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYg
bGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8v
IEZJWE1FOiBhbmNlc3RvckxheWVyIG5lZWRzIHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hv
dWxkIGJlY29tZSBhIHJlZmVyZW5jZS4KLSAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7
CisgICAgaWYgKCFhbmNlc3RvckxheWVyKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShzY3JvbGxhYmxlTGF5ZXItPnZpc2libGVTaXplKCkpKTsK
KyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNj
cm9sbGFibGVSZWN0OwogICAgIGlmIChpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpA
QCAtNDU4OCwxMSArNDU5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
U2Nyb2xsaW5nTm9kZUxheWVycyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAg
ICAgZml4ZWRSb290QmFja2dyb3VuZExheWVyKCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNM
YXllcigpLAogICAgICAgICAgICAgZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpLCBmcmFtZVZpZXcubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxz
ZSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXll
cigpOworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdy
YXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIo
KSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyID8gc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIoKSA6IG51bGxwdHIsCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBz
Y3JvbGxhYmxlTGF5ZXItPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHIgfSk7
CiAgICAgfQogfQogCkBAIC00NjMwLDggKzQ2MzgsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVu
ZGUKICAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVy
KQogICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVy
LCAqc2Nyb2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xs
aW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2Rl
SUQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNj
cm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFu
Z2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0
ZS5wYXJlbnROb2RlSUQpIHsKKyAgICAgICAgICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlTGF5
ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9k
ZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsKQEAgLTQ3Njcs
MjAgKzQ3NzcsMjEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9u
b3VzU2Nyb2xsaW5nTm9kZXMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBy
ZWxldmFudFNjcm9sbGluZ1Njb3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwg
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSB7CisgICAgYXV0byByZWxldmFudFNjcm9sbGluZ1Nj
b3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlJiBsYXllcikgewogICAgICAgICBpZiAoJmxheWVyLnJlbmRlcmVyKCkgPT0gJnJl
bmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7CiAg
ICAgICAgIHJldHVybiBsYXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAgfTsKIAot
ICAgIGF1dG8gcm9vdFNjcm9sbGluZ1Njb3BlID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9sbGFibGVM
YXllcigpKTsKKyAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5zY3Jv
bGxhYmxlTGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogCiAgICAgZm9yIChhdXRv
JiByZW5kZXJlciA6ICpzbG93UmVwYWludE9iamVjdHMpIHsKICAgICAgICAgYXV0byBsYXllciA9
IHJlbmRlcmVyLmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgICAg
IGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGlu
Z1Njb3BlKHJlbmRlcmVyLCAqbGF5ZXIpOworICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0g
cmVsZXZhbnRTY3JvbGxpbmdTY29wZShyZW5kZXJlciwgKmxheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KSk7CiAgICAgICAgIGlmIChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xsaW5nU2NvcGUpIHsK
ICAgICAgICAgICAgIGF1dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0gYXN5bmNTY3JvbGxh
YmxlQ29udGFpbmVyTm9kZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFTU0VSVChlbmNsb3Np
bmdTY3JvbGxpbmdOb2RlSUQpOwpAQCAtNDgwNCw3ICs0ODE1LDcgQEAgU2Nyb2xsYWJsZUFyZWEq
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQo
U2Nyb2xsaW4KICAgICBpZiAobm9kZUlEID09IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3Jv
bGxpbmdOb2RlSUQoKSkKICAgICAgICAgcmV0dXJuICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7
CiAKLSAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQo
KTsKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQo
KS0+c2Nyb2xsYWJsZUxheWVyKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3
aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJl
bmRlckxheWVyQmFja2luZyYgYmFja2luZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA3YTg1YjI2OTZjNjhhYTQwZDQyODFmM2Jj
MjJjNmJjZDZiODgwMDVhLi5iZmYyMTljNGI3OTExMTY3YjZjNzVhMWNmMGE4NjU4OGUxOWI2ODFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3Rv
ckNsaXBwaW5nU3RhY2suaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL09wdGlvblNldC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggMmM1OWE0ODQ2YWY4NDQ3NTVlZjczMTA0
YWFmNGEwODE1MWE4Y2IxZC4uY2Y3NGZjZGNiYmJmY2JjZGExMWIzNWI3OGUyYmYwYTdkYWQxZWNk
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVs
T2JqZWN0LmNwcApAQCAtOTUsMTEgKzk1LDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6ZGVzdHJveUxheWVyKCkKIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5
ZXIoKQogewogICAgIEFTU0VSVCghbV9sYXllcik7Ci0gICAgbV9sYXllciA9IG1ha2VVbmlxdWU8
UmVuZGVyTGF5ZXI+KCp0aGlzKTsKKyAgICAvLyBGSVhNRTogSG9vayBpbiBvcHRpbWl6YXRpb24g
dG8gb25seSBjcmVhdGUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLCBpZiBuZWNlc3NhcnkuCisgICAg
bV9sYXllciA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPigqdGhpcyk7CiAgICAg
c2V0SGFzTGF5ZXIodHJ1ZSk7CiAgICAgbV9sYXllci0+aW5zZXJ0T25seVRoaXNMYXllcihSZW5k
ZXJMYXllcjo6TGF5ZXJDaGFuZ2VUaW1pbmc6OlN0eWxlQ2hhbmdlKTsKIH0KIAorUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIoKQor
eworICAgIHJldHVybiBtX2xheWVyID8gbV9sYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxs
cHRyOworfQorCitjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBt
X2xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVy
biBtX2xheWVyICYmIG1fbGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNk
Y2FkY2E2ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLmUwZDM4MGNjYzkxYWI1MDBhODBm
Y2Y4NmY0MTBmNjUzZDQyM2JmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckxheWVyOworY2xhc3Mg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExheW91dFJlY3RzIHsKICAg
ICBMYXlvdXRSZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBpcyBjbGlwcGVkIGJ5IGVu
Y2xvc2luZyBvYmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpAQCAtNDcsNiArNDgsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIFJl
bmRlckxheWVyKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KIAorICAg
IFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxh
YmxlTGF5ZXIoKSBjb25zdDsKKwogICAgIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIHN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbVN0eWxlKCkgeyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJjNjFkYmY3N2Q3YzhkZjNmNDhiMTk3N2FkYTBjYzU0OTJhOGU5MWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlLmNwcApAQCAtMCwwICsxLDIwMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgYXJlIENvcHlyaWdo
dCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqCisgKiBP
dGhlciBjb250cmlidXRvcnM6CisgKiAgIFJvYmVydCBPJ0NhbGxhaGFuIDxyb2MrQGNzLmNtdS5l
ZHU+CisgKiAgIERhdmlkIEJhcm9uIDxkYmFyb25AZmFzLmhhcnZhcmQuZWR1PgorICogICBDaHJp
c3RpYW4gQmllc2luZ2VyIDxjYmllc2luZ2VyQHdlYi5kZT4KKyAqICAgUmFuZGFsbCBKZXN1cCA8
cmplc3VwQHdnYXRlLmNvbT4KKyAqICAgUm9sYW5kIE1haW56IDxyb2xhbmQubWFpbnpAaW5mb3Jt
YXRpay5tZWQudW5pLWdpZXNzZW4uZGU+CisgKiAgIEpvc2ggU29yZWYgPHRpbWVsZXNzQG1hYy5j
b20+CisgKiAgIEJvcmlzIFpiYXJza3kgPGJ6YmFyc2t5QG1pdC5lZHU+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBi
ZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9N
UEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVy
c2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAor
ICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBv
ciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYg
eW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9u
bHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUg
TVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lv
biBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1Q
TCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0
ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQ
TC4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFNjcm9sbGluZ1Njb3Bl
IG5leHRTY3JvbGxpbmdTY29wZSgpCit7CisgICAgc3RhdGljIFNjcm9sbGluZ1Njb3BlIGN1cnJl
bnRTY29wZSA9IDA7CisgICAgcmV0dXJuICsrY3VycmVudFNjb3BlOworfQorCitERUZJTkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK1Jl
bmRlckxheWVyU2Nyb2xsYWJsZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKKyAgICA6IFJlbmRlckxheWVyKHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCwgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJs
ZSkKKyAgICAsIG1faW5SZXNpemVNb2RlKGZhbHNlKQorICAgICwgbV9zY3JvbGxEaW1lbnNpb25z
RGlydHkodHJ1ZSkKKyAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQorICAgICwgbV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2FkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9yZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRGlydHlP
dmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKKyAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24o
ZmFsc2UpCit7CisgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRp
bmdMYXllcigpOworCisgICAgaWYgKGlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgIG1fYm94
U2Nyb2xsaW5nU2NvcGUgPSBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5n
U2NvcGUoKTsKKworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50
KCkpIHsKKyAgICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZz
ZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KKyAgICAgICAg
bV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwor
ICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCisgICAgICAgICAgICBzY3Jv
bGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICAg
ICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworICAg
IH0KK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKCkK
K3sKKyAgICBpZiAoaW5SZXNpemVNb2RlKCkpCisgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOworCisgICAgQVNTRVJUKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNv
bnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhKQorICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVT
Y3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAg
IHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisK
KyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAg
ICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7
CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ry
b3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkK
KyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEo
KnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICBjbGVhclJlc2l6ZXIoKTsK
K30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVTaXplKCkgY29uc3QK
K3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAg
ICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKK30K
KworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1Np
emUoKSBjb25zdAoreworICAgIEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNT
aXplKCk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAg
ICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgp
LCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihj
b250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJl
dHVybiBjb250ZW50c1NpemU7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVuZGVyQm94KCkpOworICAgIGlmIChtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9s
bGFibGUqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNv
b3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKK30KKworaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
cmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAg
Y29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXpl
KCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9s
bFNpemUuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVs
dGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNo
ZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3Vy
Y2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNvbnN0IGlu
dCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5n
RGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAg
ICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChz
dGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFk
anVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGlu
dD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0
YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGljIGlubGlu
ZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCit7Cisg
ICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRq
dXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2lu
dCkKK3sKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5m
cmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKyAgICAKKyAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlz
IG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywg
dGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNN
b3VzZVBvc2l0aW9uOworICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwg
bGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQorICAgICAgICBsYXN0S25vd25Nb3VzZVBv
c2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgcHJldmlv
dXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKKworICAgIEludFNpemUg
ZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisKKyAgICBpZiAo
YWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBh
dCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAgICAgIGRlbHRh
LnNldFdpZHRoKDApOworICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6
Om5vUGFuU2Nyb2xsUmFkaXVzKQorICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7CisKKyAgICBz
Y3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKK30KKworLy8g
RklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50
U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChk
ZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCByZXN0cmljdGVkQnlM
aW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKKyAgICAgICAg
cmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGlu
ZUNsYW1wKCkuaXNOb25lKCk7CisKKyAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBuZXdT
Y3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOworICAgICAgICBzY3JvbGxUb09m
ZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAg
ICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXllciBj
YW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3Jv
bGwgdG8gdHJ5CisgICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Ny
b2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xs
T2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgorICAgICAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCisgICAgICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Nj
cm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKworICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVk
IG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0
IGRvZXNuJ3QKKyAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0
aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KKyAgICAgICAg
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOworICAgICAgICBp
ZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNj
cm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFt
ZXMgb3duZXJFbGVtZW50PyAKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI4MjM3CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3Np
dGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sK
KyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxp
bmcsIHN0cmVhbSA8PCAqc3RhdGljX2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKSA8PCAiIHJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyNlbmRpZgorICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRv
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmlt
YXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworCisg
ICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3Jv
bGxPZmZzZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zm
c2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0g
Y3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBl
KTsKKworICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9u
RnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQor
ICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNl
dCwgY2xhbXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9y
U3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2
aW91c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
VG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGF1dG8gcHJl
dmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Ny
b2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQg
PSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0
KG9mZnNldCkgOiBvZmZzZXQ7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygp
ID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisgICAgaWYgKG5ld1Njcm9sbE9m
ZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOworCisgICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sK
KyAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Cisg
ICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmlt
YXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlv
bihpbnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24o
bV9zY3JvbGxQb3NpdGlvbi54KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9u
LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0
aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmlt
YXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3Jv
bGw6OlllcykKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNl
dEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyAgICBlbHNl
CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlv
biksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4g
cG9zaXRpb24pCit7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uSWZOZWVkZWQoKQoreworICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Q
b3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7CisgICAgbV9wb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Cit9CisKK1JlbmRlckxheWVyU2Ny
b2xsYWJsZSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIo
SW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NG
cmFtZUJvdW5kYXJpZXMpIGNvbnN0Cit7CisgICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxl
ID0gW10oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSB7CisgICAgICAgIHJldHVybiBpczxSZW5k
ZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVu
ZGVyZXIoKSkuY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CisgICAgfTsKKwor
ICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBp
c0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyk7CisgICAgCisgICAgZm9yIChhdXRvKiBuZXh0
TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmll
cyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICAgICAgaWYgKGlzQ29uc2lk
ZXJlZFNjcm9sbGFibGUoKm5leHRMYXllcikpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXh0TGF5
ZXItPnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXItPnNj
cm9sbGFibGVMYXllcigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNo
YW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xsYWJs
ZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOworCisgICAgaWYgKHJl
YXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgewor
ICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQorICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGls
ZHJlbih0cnVlKTsKKyAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0
Cit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3Jv
bGxzT3ZlcmZsb3coKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSBjb25zdAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94
KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYg
KGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Ny
b2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
KyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkg
JiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVn
aW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGlj
aXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJv
eVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0
eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95
aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRv
IGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mg
c3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsK
KyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBo
YXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9s
bGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAg
ICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkg
PSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9t
YXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNl
IHsKKyAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9s
bGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0
ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0
eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFu
Z2VkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3Jv
bGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKEVsZW1l
bnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CisgICAg
ICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdl
bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAmcmVuZGVyZXI7Cit9CisKK1JlZjxT
Y3JvbGxiYXI+IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdl
dDsKKyAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSkpOworICAgIGF1
dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwor
ICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVhbFJl
bmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgpLmhh
c1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOworICAgIGlmIChoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSkKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0
b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVh
bFJlbmRlcmVyKS5lbGVtZW50KCkpOworICAgIGVsc2UgeworICAgICAgICB3aWRnZXQgPSBTY3Jv
bGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKKyAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5n
ZXQoKSwgb3JpZW50YXRpb24pOworICAgICAgICBpZiAocGFnZSgpLmlzTW9uaXRvcmluZ1doZWVs
RXZlbnRzKCkpCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0
TW9uaXRvcihwYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOworICAgIH0KKyAgICByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4g
d2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorewor
ICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkK
KyAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9u
KTsKKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhciA9
IG51bGxwdHI7Cit9CisKK3N0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCit7CisgICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlz
SGlkZGVuQnlTdHlsZSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAor
eworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkp
OworfQorCitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXll
cjsKKworICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkK
K3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xv
c2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0
TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgaWYgKG5leHRMYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkgJiYgbmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnVzZURh
cmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhN
RTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxF
bGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRl
ckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2lu
Z0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxh
YmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkp
LCAqYm94LCBib3gtPnN0eWxlKCkpOworfQorI2VuZGlmCisKKworI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhh
dmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91
dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBw
YWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2
b2lkIFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQoreworICAgIHBhZ2UoKS5jaHJvbWUoKS5j
bGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpk
aWRVcGRhdGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3
ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisg
ICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9s
bCk7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIo
KS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlmIChy
ZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVT
VkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUo
T1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xs
c092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xs
aW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZs
b3dTY3JvbGwoKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbnQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdkJhcgor
ICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1fdkJhci0+
aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKK30KKworaW50
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hC
YXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX2hC
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVu
ZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQ
b2ludCkgY29uc3QKK3sKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlu
cyhsb2NhbFBvaW50KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RP
dmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgaWYgKHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYg
KHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Nj
cm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAo
bV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAg
ICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBt
X2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRT
aXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJ
bnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1p
blhNYXhZQ29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIHJldHVy
biBsb2NhbFBvaW50IC0gcmVzaXplQ29ybmVyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29s
IHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlm
IHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xp
cCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4g
YSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBh
aW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9y
bWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBi
ZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVy
ZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQu
IFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0
byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRo
ZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAorICAgIC8vIHNlY29uZCBw
YXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmln
aHQuCisgICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNv
bnRyb2xzKSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50
T2Zmc2V0OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25k
IHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgo
bV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdl
UmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xz
SW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5
ZXIoKTsKKyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWludGluZ1Jv
b3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVp
cmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KKyAgICBp
ZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWlu
dE9mZnNldDsKKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCisgICAgICAgIGFkanVz
dGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAv
LyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuIFdlIG5vcm1hbGx5IG1v
dmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKKyAgICAv
LyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5
IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAvLyBjb250YWlucyBmaXhlZCBw
b3NpdGlvbmVkIGVsZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRT
aXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUg
dGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KKyAgICBp
ZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV9o
QmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBpZiAobV92QmFyICYmICFsYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwg
ZGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlm
IHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0
aGUKKyAgICAvLyBlZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4
dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisgICAgCisgICAgLy8gUGFpbnQg
b3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3Ju
ZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFn
ZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRTY3JvbGxDb3Ju
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQs
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBhYnNSZWN0ID0gc2Ny
b2xsQ29ybmVyUmVjdCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBp
ZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVj
dChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUgb3Zl
cmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8gdG8gc2VlIHdoYXQgaXMgYmVo
aW5kIGl0LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUo
KSA9PSBSZXNpemU6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3Qg
PSByZWN0cy5yZXNpemVyOworICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7
CisgICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkg
eworICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAobV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRv
UmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6
ZXJBYnNSZWN0KTsKKworICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFw
eCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgorICAgIC8v
IENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlz
IGZyYW1lLgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1f
aEJhcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQpOworICAgICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOworICAgICAgICBM
YXlvdXRSZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OworICAgICAgICBsYXJnZXJD
b3JuZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFy
Z2VyQ29ybmVyLmhlaWdodCgpICsgMV9sdSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKKyAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MoMS4wZik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVk
SW50UmVjdChsYXJnZXJDb3JuZXIpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIGZy
b20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7CisgICAgU2Nyb2xsT2Zm
c2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBjb21wdXRl
U2Nyb2xsRGltZW5zaW9ucygpOworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAv
LyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2Yg
cHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5k
aWYKKworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKSkgeworICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGlu
dmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAorICAgICAgICAvLyB0
byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1
cCB0byB0aGUgbWluKS4KKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQg
PSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1
c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBw
b2ludHMuCisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdo
ZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhl
IHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3Zl
cmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9y
ZSBkZXRhaWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1
ZSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zm
c2V0KCkpCisgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyhmYWxzZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3Jv
bGxPZmZzZXQoKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBv
aW50KHNjcm9sbE9mZnNldCgpKSk7CisKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAg
ICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgIHNldE5lZWRz
Q29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBkYXRlKCk7CisgICAgfQorCisgICAgaWYgKGNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9z
aXRpbmdVcGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAg
IHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplKCkg
Y29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNh
dXNlIHRoZXkgbmV2ZXIgaGF2ZQorICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0
aGV5IGRvICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbworICAgIC8vIHdlIHdh
bnQgdG8gYWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgorICAgIHJldHVybiAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRl
cmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNv
bnN0IExheW91dFNpemUmIG9sZE9mZnNldCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgcG9zc2libGUgb24gZ2VuZXJhdGVkIGNvbnRlbnQgYnV0IGlzIG5vdCByaWdodCBub3cuCisg
ICAgaWYgKCFpblJlc2l6ZU1vZGUoKSB8fCAhY2FuUmVzaXplKCkgfHwgIXJlbmRlcmVyKCkuZWxl
bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3
aGVyZSByZW5kZXJlci0+ZWxlbWVudCgpLT5yZW5kZXJlcigpICE9IHJlbmRlcmVyIGlzIHdpdGgg
Y29udGludWF0aW9ucy4gRG8gdGhleSBtYXR0ZXIgaGVyZT8KKyAgICAvLyBJZiB0aGV5IGRvIGl0
IHdvdWxkIHN0aWxsIGJlIGJldHRlciB0byBkZWFsIHdpdGggdGhlbSBleHBsaWNpdGx5LgorICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBhdXRvKiByZW5k
ZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oZWxlbWVudC0+cmVuZGVyZXIoKSk7CisKKyAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1l
bnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkubW91c2VQcmVzc2VkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVa
b29tKCk7CisKKyAgICBhdXRvIGFic29sdXRlUG9pbnQgPSBkb2N1bWVudC52aWV3KCktPndpbmRv
d1RvQ29udGVudHMoZXZ0LnBvc2l0aW9uKCkpOworICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5k
ZWRJbnRQb2ludChhYnNvbHV0ZVRvQ29udGVudHMoYWJzb2x1dGVQb2ludCkpOworCisgICAgTGF5
b3V0U2l6ZSBuZXdPZmZzZXQgPSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOwor
ICAgIG5ld09mZnNldC5zZXRXaWR0aChuZXdPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IpOwor
ICAgIG5ld09mZnNldC5zZXRIZWlnaHQobmV3T2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7
CisgICAgCisgICAgTGF5b3V0U2l6ZSBjdXJyZW50U2l6ZSA9IExheW91dFNpemUocmVuZGVyZXIt
PndpZHRoKCkgLyB6b29tRmFjdG9yLCByZW5kZXJlci0+aGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsK
KyAgICBMYXlvdXRTaXplIG1pbmltdW1TaXplID0gZWxlbWVudC0+bWluaW11bVNpemVGb3JSZXNp
emluZygpLnNocnVua1RvKGN1cnJlbnRTaXplKTsKKyAgICBlbGVtZW50LT5zZXRNaW5pbXVtU2l6
ZUZvclJlc2l6aW5nKG1pbmltdW1TaXplKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGFkanVzdGVk
T2xkT2Zmc2V0ID0gTGF5b3V0U2l6ZShvbGRPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IsIG9s
ZE9mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRo
KC1uZXdPZmZzZXQud2lkdGgoKSk7CisgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRo
KC1hZGp1c3RlZE9sZE9mZnNldC53aWR0aCgpKTsKKyAgICB9CisgICAgCisgICAgTGF5b3V0U2l6
ZSBkaWZmZXJlbmNlID0gKGN1cnJlbnRTaXplICsgbmV3T2Zmc2V0IC0gYWRqdXN0ZWRPbGRPZmZz
ZXQpLmV4cGFuZGVkVG8obWluaW11bVNpemUpIC0gY3VycmVudFNpemU7CisKKyAgICBTdHlsZWRF
bGVtZW50KiBzdHlsZWRFbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oZWxlbWVudCk7
CisgICAgYm9vbCBpc0JveFNpemluZ0JvcmRlciA9IHJlbmRlcmVyLT5zdHlsZSgpLmJveFNpemlu
ZygpID09IEJveFNpemluZzo6Qm9yZGVyQm94OworCisgICAgUmVzaXplIHJlc2l6ZSA9IHJlbmRl
cmVyLT5zdHlsZSgpLnJlc2l6ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpWZXJ0aWNh
bCAmJiBkaWZmZXJlbmNlLndpZHRoKCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJn
aW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCByZW5kZXJlci0+bWFyZ2lu
TGVmdCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgICAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luUmln
aHQsIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJl
ci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpv
bnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VX
aWR0aCAvIHpvb21GYWN0b3I7CisgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJl
bmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICB9CisKKyAgICBpZiAocmVz
aXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7CisgICAg
ICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2Vl
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpv
b21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91
dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRl
ciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwor
ICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7CisgICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJv
dW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKKyAgICB9CisKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKworICAgIC8v
IEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2lu
ZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZp
ZXcuCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5
TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIGlmICh0aGlzICE9IHJlbmRlcmVyKCkudmlldygpLmxh
eWVyKCkpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50
KCksIG51bGxwdHIpOworCisgICAgLy8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sg
dGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCisgICAgLy8gaW5pdGlhbGl6
ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2Vz
dG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KKyAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwo
KQoreworICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpOworCisg
ICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7CisKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9t
ZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsKCZnZW9tZXRyeU1hcCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphZGRC
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQoreworICAg
IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRz
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNC
b3VuZHMoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxk
ID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxh
YmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZlbHlD
bGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjaGlsZCk7CisgICAgfQorfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKQorewor
ICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgpOworICAgIHJlY3Vyc2l2
ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHModGhpcyk7Cit9CisKK3N0YXRpYyB2b2lk
IHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJMYXllciogbGF5ZXIp
Cit7CisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gY2hpbGQtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhjaGls
ZCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2FwcygpCit7CisgICAgcmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25H
YXBzKHRoaXMpOworICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIExheW91dFJlY3QgcmVjdCA9IG1fYmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzOworICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKKyAgICBp
ZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKS5vdmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6
IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgp
KQorICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LmNsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90
IGFjY291bnRlZCBmb3IuCisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVuZGVy
ZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWlu
dEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCit7CisgICAgaWYgKCFt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAg
TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFt
YWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7
CisgICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQ
YWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKworICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzID0gZmFsc2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51
bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1f
YmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3Jh
cGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclNjcm9sbENvcm5lcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3Jv
bGxDb3JuZXIoKSA6IG51bGxwdHI7Cit9CisKKy8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQg
YWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBpc0NvbXBvc2l0ZWQo
KSAmJiBiYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKKy8vIEZJWE1FOiB0aGlz
IGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29t
cG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRlYnVnRGVz
Y3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlw
dGlvbigpOworfQorCitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVy
ZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxT
Y3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJv
b2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Ny
b2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4g
b3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1
dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAg
T3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAg
ICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6
OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYg
U2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0
dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VB
dXRvOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIE92
ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIExpc3QgYm94IHBh
cnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFy
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHls
ZSgpLm92ZXJmbG93WCgpOworICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5v
dmVyZmxvd1koKTsKKworICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9s
bGJhciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBuZWVkc0hvcml6b250YWxT
Y3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9s
bGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhv
cml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUo
KSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOworICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJh
ciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYm
IHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Ny
b2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2Fs
U2Nyb2xsYmFyKSk7CisgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250
YWxTY3JvbGxiYXIpOworICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIpOworCisgICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNj
cm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCisgICAgLy8g
V2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhl
bSAoc2VlIGJ1ZyAxMTk4NSkuCisgICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3Jv
bGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpT
Y3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1faEJhci0+
c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9s
bGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNj
cm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV92QmFyLT5z
ZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAg
ICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVy
ZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKK3sKKyAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAg
Ly8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28g
d2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgp
ID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6b250
YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wgaGFz
VmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAgIC8v
IElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBl
bmFibGUgb3IgZGlzYWJsZS4KKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxi
YXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV9o
QmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgaWYgKG1fdkJhciAm
JiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgVmVydGljYWxTY3Jv
bGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7
CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkg
b3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQuCisgICAgYm9vbCBh
dXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxi
YXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNI
b3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdl
ZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICBpZiAoYXV0
b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5n
ZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVo
YXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpv
bnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRo
QXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNW
ZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwor
CisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgpOworCisgICAgICAgIGlmIChyZW5kZXJlcigp
LnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIoKS5zdHls
ZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7CisgICAgICAgICAgICBpZiAoIW1f
aW5PdmVyZmxvd1JlbGF5b3V0KSB7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlv
dXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFy
a09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVy
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suc2Ny
b2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGlj
YWxTY3JvbGxCYXJDaGFuZ2VkKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5b3V0Qmxv
Y2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCkubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQg
PSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOworICAgICAgICBpZiAocGFy
ZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVyKCkuaXNCb3goKSkKKyAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hl
ZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgpKTsKKyAgICB9CisKKyAgICAvLyBTZXQgdXAg
dGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgaWYgKG1faEJhcikgewor
ICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7
CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgp
OworICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOworICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgs
IG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKKyAgICB9CisgICAgaWYgKG1fdkJhcikgeworICAgICAg
ICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKKyAg
ICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOwor
ICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwg
cGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBt
X3Njcm9sbFNpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlVcGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckxheWVyKiBsYXllciwgUmVuZGVyR2VvbWV0cnlN
YXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCit7CisgICAgZm9yIChSZW5kZXJM
YXllciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gY2hp
bGQtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGdlb21ldHJ5TWFwLCBmbGFncyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChjaGlsZCwgZ2VvbWV0cnlNYXAsIGZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGxGbGFnPiBmbGFncykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUg
bmVlZGVkLCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCisgICAgLy8gdGhl
c2UgZmxhZ3MgYXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cg
aXMgdmFsaWQuCisgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CisKKyAgICAv
LyBJZiB3ZSBoYXZlIG5vIHZpc2libGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50
cywgdGhlcmUgaXMgbm8gcG9pbnQgcmVjb21wdXRpbmcKKyAgICAvLyBvdXIgcmVjdGFuZ2xlcyBh
cyB0aGV5IHdpbGwgYmUgZW1wdHkuIElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBl
eHBlY3RlZCB0bworICAgIC8vIHJlY29tcHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCisg
ICAgaWYgKCFtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVy
UG9zaXRpb24oKTsKKyAgICBpZiAocG9zaXRpb25DaGFuZ2VkKQorICAgICAgICBmbGFncy5hZGQo
SGFzQ2hhbmdlZEFuY2VzdG9yKTsKKworICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0No
YW5nZWRBbmNlc3RvciwgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVy
Zmxvd1Njcm9sbCB9KSkKKyAgICAgICAgY2xlYXJDbGlwUmVjdHMoKTsKKworICAgIGlmIChyZW5k
ZXJlcigpLnN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCisgICAgICAg
IGZsYWdzLmFkZChIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKKworICAgIGlm
IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBmbGFncy5hZGQoSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCk7CisgICAgCisgICAgYm9vbCBzaG91bGRDb21wdXRl
UmVwYWludFJlY3RzID0gKGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVk
QW5jZXN0b3IpIHx8IGZsYWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOwor
ICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOworICAgIGJv
b2wgc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21w
dXRlUmVwYWludFJlY3RzICYmICFpc1Zpc3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7Cisg
ICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnB1
c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOworCisgICAgaWYgKHNob3VsZENv
bXB1dGVSZXBhaW50UmVjdHMpIHsKKyAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0
IGNvbXB1dGUgcmVwYWludCByZWN0cyBmb3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KKyAg
ICAgICAgaWYgKGlzVmlzdWFsbHlFbXB0eSkKKyAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3Rz
KCk7CisgICAgICAgIGVsc2UgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNv
bnRhaW5lciBhcyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUuCisgICAgICAgICAgICBjb21wdXRlUmVw
YWludFJlY3RzKHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7
CisgICAgfSBlbHNlIGlmICghcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1X
aWRnZXQoKSkgeworICAgICAgICAvLyBXaGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNv
bnRlbnRzIGZsYWcgZmxpcHMgZHVlIHRvIGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFp
bnQgYXJlYSB0cmFuc2l0aW9ucyBmcm9tCisgICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3Zl
cmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5zIHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUg
aW52YWxpZCBhbmQgdGhleSBuZWVkIHRvIGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2Iv
MTg4MTIxKS4KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3Jy
ZWN0LgorICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
fHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRl
cmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJG
b3JSZXBhaW50KCkpKTsKKyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlv
dXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94
ID09IHJlbmRlcmVyKCkub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCkpKTsKKyAgICB9CisKKyAgICByZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwodGhpcywgZ2VvbWV0cnlNYXAsIGZsYWdzKTsgICAgCisKKyAgICAv
LyBXZSBkb24ndCB1cGRhdGUgb3VyIHJlZmxlY3Rpb24gYXMgc2Nyb2xsaW5nIGlzIGEgdHJhbnNs
YXRpb24gd2hpY2ggZG9lcyBub3QgY2hhbmdlIHRoZSBzaXplKCkKKyAgICAvLyBvZiBhbiBvYmpl
Y3QsIHRodXMgUmVuZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJlcGFpbnQgaXRzZWxmIHByb3Blcmx5
IGFzIHRoZSBsYXllciBwb3NpdGlvbiB3YXMKKyAgICAvLyB1cGRhdGVkIGFib3ZlLgorCisgICAg
aWYgKG1fbWFycXVlZSkgeworICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9u
KCk7CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQor
ICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKKwor
ICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuaW52YWxpZGF0ZVJlY3RzRm9yQWxs
TWFya2VycygpOworfQorCitTY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGFt
cFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBt
YXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBs
YXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8pCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBmcmFn
bWVudCA6IGxheWVyRnJhZ21lbnRzKSB7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5k
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2xpcFRvUmVj
dChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dCk7CisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9p
bnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVy
Qm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCisgICAg
ICAgICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0
cnVlKTsKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZy
YWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3Vu
ZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCgh
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4g
cm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3sKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1h
ZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9u
LCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAoreworICAgIGlmIChsYXllckZy
YWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYm9y
ZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSkuYm9yZGVyQm94UmVjdCgpKTsKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7CisKKyAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJl
Y3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAg
ICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAg
ICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5Y
TWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAg
IHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNl
dEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJl
c2l6ZXJSZWN0LnNpemUoKSB9OworICAgICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJv
bUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJl
Y3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJv
dW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJl
Y3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQg
aSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNv
bnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAg
ICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25h
cHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAg
ICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9u
KSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5k
ZWRQb2ludCgpKSkgeworICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2lu
dChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9u
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Ny
b2xsRGltZW5zaW9ucygpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7CisK
KyAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBv
dmVyZmxvd0xlZnQoKSkpOworICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChv
dmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOworCisgICAgaW50IHNjcm9sbGFibGVM
ZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0
KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
CisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93
VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKKyAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQo
LXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKKyAgICAK
KyAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKQoreworICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29u
dHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFy
LmdldCgpKSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJl
Y3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBz
Y3JvbGxSZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAg
IEFTU0VSVChib3gpOworICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhl
IHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAg
c2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Cisg
ICAgZWxzZQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLmxvY2F0aW9uKCkpOworCisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJl
Y3Q7CisgICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7Cisg
ICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3Jv
bGxDb3JuZXIoKSkgeworICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAg
ICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKKyAgICBpZiAobV9y
ZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3Qo
KS5pc0VtcHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxD
b3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCku
c2Nyb2xsQ29ybmVyOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVj
dCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxi
YXIpKTsKKworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0
RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVjdCk7Cit9CisKK0lu
dFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVu
dFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCks
IHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikp
OworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIElu
dFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2lu
dCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnQgPSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5k
ZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJh
ck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZz
ZXQpCit7CisgICAgc2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwor
fQorCitTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxpbmdOb2Rl
SUQoKSBjb25zdAoreworICAgIGlmICghaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxD
b29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5j
bHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVo
YXZpb3IpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKKyAgICBpZiAoc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3Jv
bGxiYXJzKQorICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwor
ICAgIAorICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJl
dHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgo
KSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWln
aHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRp
bmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIEludFNp
emUoKTsKKworICAgIEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11
bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KKyAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNj
cm9sbFBvc2l0aW9uKCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFs
Q29udGVudHNTaXplKCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAgICBz
dHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFi
bGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdo
dCgpIC0gdmlzaWJsZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxP
ZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsK
KworICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0
aChzY3JvbGxPZmZzZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkg
JiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0
aCgpKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hh
YmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJldGNo
OworI2Vsc2UKKyAgICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFBvaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omlz
SGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3Bl
bmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJh
bnNmb3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Ny
b2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAg
ICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNj
cm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAg
ICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
KyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisg
ICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwor
I2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7Cit9CisKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChz
Y3JvbGxpbmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2Rl
SUQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byog
c2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVy
biBzY3JvbGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzTW9j
a1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkgY29uc3QKK3sKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcsICJSZW5kZXJMYXll
clNjcm9sbGFibGU6ICIgKyBtZXNzYWdlKTsKK30KKworCisjaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8
fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFu
ZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7Cisg
ICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkp
OworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFs
c2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24p
Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8
ICJSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9t
ICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50
U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQ
b3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJx
dWVlKCkpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBj
b21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4K
KyAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBp
ZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2
aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1h
eE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7
CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBv
c2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3
T2Zmc2V0LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0g
Y2FyZXRXaWR0aCkgeworICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0
aDsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAg
ICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAg
ICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAg
IG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24g
PSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgfQorICAgIAorICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYm
IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdl
IGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBv
ZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHBy
b2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVu
ZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkg
eworICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAg
ICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3Np
dGlvbjsKKworICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKKworICAg
IC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBh
cyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgorICAg
IC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0
byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgorICAgIGlm
ICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQo
KSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwg
anVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgdXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAgICAgICAgdmlldy5m
cmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOworCisgICAgICAgIGlm
ICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAgLy8gQXZvaWQgdXBk
YXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBh
bHJlYWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5n
IGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRl
ckxheWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBk
YXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxh
dGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAgICAgICAgICAgaWYg
KHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBzZXROZWVkc0Nv
bXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBw
b3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFu
dCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9yZGVyKSwKKyAgICAgICAgICAgICAgICAv
LyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHBhaW50LW9yZGVyIHBhcmVu
dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBwYWludE9yZGVyUGFy
ZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05l
ZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0
aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAgICByZW5kZXJlcigpLmRvY3Vt
ZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKKyAgICAgICAgRGVi
dWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJlcigpLmZyYW1lKCkpOworICAgIH0KKwor
ICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsKKyAgICBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBh
aW50KCk7CisgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0
ZXIgc2Nyb2xsaW5nCisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRh
dGUoKTsKKyAgICAKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5o
YXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCku
bV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
cmVwYWludENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYgKHJlcGFpbnRDb250YWlu
ZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworICAgIGZy
YW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0g
dHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICBzZXRO
ZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgc2V0RGVzY2VuZGFudHNO
ZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICByZXF1aXJl
c1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwor
ICAgIH0KKworICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVj
dC4KKyAgICBpZiAocmVxdWlyZXNSZXBhaW50KQorICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRV
c2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CisKKyAgICAv
LyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgorICAg
IGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIGVs
ZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsK
KworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5k
aWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRD
b250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9s
bCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVDb21wb3Np
dGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRl
bnRDb21wb3NpdGluZ0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWlu
ZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBt
YXkgbmVlZAorICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcg
bGF5ZXJzIGZyb20gdGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdB
bmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkp
IHsKKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAg
ICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1Vw
ZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0
byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3Jv
bGxpbmcuCisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFu
dHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAg
ICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0
ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRv
IHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9
PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxT
Y3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0
KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5s
b2NhdGlvbigpKTsKKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxl
QXJlYVNldChib29sIGhhc092ZXJmbG93KQoreworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29sIGlzVmlzaWJsZVRvSGl0
VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkp
CisgICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25l
ci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9s
bGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRl
ZE9yUmVtb3ZlZCA9IGZhbHNlOworICAgIAorICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisgICAg
CisgICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRT
Y3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Ny
b2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0g
ZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgaWYgKGFk
ZGVkT3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5
IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9s
bGluZywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3Zl
IG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9
CisjZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7CisjZW5kaWYKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhj
b25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92
QmFyICYmICFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJC
b3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOworCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICByZWN0cy52ZXJ0aWNhbFNj
cm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJl
Y3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9oQmFy
KSB7CisgICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9v
dCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxi
YXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVz
aXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgp
Cit7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9s
bGJhcihyZW5kZXJlcigpKTsKKyAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZs
b3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVk
b0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxw
dHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikgeworICAg
ICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+
KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJ
WE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Njcm9s
bENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2Nyb2xs
Q29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29y
bmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxs
cHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIFJlbmRlckVsZW1lbnQq
IGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAg
YXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRl
cmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVh
bFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlc2l6ZXIpIHsKKyAg
ICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJT
Y3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsK
KyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBh
cmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOworICAgICAg
ICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Jl
c2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFtX3Jlc2l6ZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Jl
c2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZHJhd1Bs
YXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3Ju
ZXJJbWFnZTsKKyAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7CisgICAgaWYgKHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYo
KSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsK
KyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwor
ICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVz
KCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVh
a1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxv
UmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXpl
KCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50cmFu
c2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwg
cmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3Ju
ZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXpl
KC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgICAg
ICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkg
LSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3Vt
ZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6
ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCitSZW5kZXJMYXllclNjcm9sbGFibGU6Ok92
ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7
CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsK
KyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94
LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOworCisgICAgYXV0byBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7CisgICAg
YXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDog
MDsKKworICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhv
cml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsK
KyAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJP
blRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Cisg
ICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJs
YXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIp
IHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8
IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKKworICAgIEludFNpemUgY29ybmVy
U2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgIC8vIElmIG9u
bHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KKyAgICAg
ICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCisgICAgICAgIH07CisgICAgfQor
CisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgewor
ICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Owor
ICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Cisg
ICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAg
ICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lk
dGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFj
dChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhv
cml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsK
KyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsK
KyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAg
ICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIp
CisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwor
CisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisg
ICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBi
b3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4
WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3Ju
ZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNv
cm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNv
cm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAg
ICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAg
ICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikK
KyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlj
a25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3Qo
Y29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFy
LmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2Nh
bFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5yZXNpemVyLmlu
dGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVNYXJxdWVlKCkK
K3sKKyAgICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRv
IHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisg
ICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVl
ZVBvc2l0aW9uOworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0K
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlm
TmVlZGVkKCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVy
ZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAm
JiByZW5kZXJlcigpLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21hcnF1ZWUpCisgICAgICAg
ICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOworICAgICAg
ICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOworICAgIH0gZWxzZSBpZiAobV9tYXJx
dWVlKQorICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMo
TGF5b3V0UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdz
IHNjcm9sbCBvZmZzZXQuCisgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CisgICAg
aWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJl
bnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3Np
dGlvbigpKSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxl
ID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIC8v
IEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9z
aXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCisgICAgICAgICAgICBpZiAocG9zaXRpb25l
ZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAg
ICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVudFNjcm9s
bGFibGUtPnNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICBpZiAocG9zaXRpb25lZFBh
cmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVu
ZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkpIHsKKyAg
ICAgICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRlcklubGluZT4o
cG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkpLm9mZnNldEZvckluRmxvd1Bv
c2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOworICAgICAg
ICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUoKSk7CisgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcG9zaXRpb25lZFBh
cmVudFNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAoYXV0byogcGFyZW50TGF5ZXIgPSBwYXJlbnQoKSkgeworICAgICAgICBpZiAo
YXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxlID0gcGFyZW50TGF5ZXItPnNjcm9sbGFibGVMYXll
cigpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlv
dXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICAg
ICAgICAgIEFTU0VSVChwYXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKSk7CisgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5ZXJTY3Jv
bGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBjb25zdCBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXIgPSBwYXJlbnRMYXllci0+
cGFyZW50KCk7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUqIGVuY2xv
c2luZ0xheWVyU2Nyb2xsYWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICB3aGlsZSAoZW5jbG9z
aW5nTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJs
ZSA9IGVuY2xvc2luZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuY2xvc2luZ0xheWVyID0gZW5jbG9zaW5nTGF5
ZXItPnBhcmVudCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZW5jbG9zaW5n
TGF5ZXJTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ0xheWVy
U2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAgICAgICBt
X2JveFNjcm9sbGluZ1Njb3BlID0gZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Nj
cm9sbGluZ1Njb3BlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgIGlmICghbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9PSBtX2Jv
eFNjcm9sbGluZ1Njb3BlKQorICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0g
bmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgfSBlbHNlIGlmICghbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9sbGluZ1Njb3Bl
KQorICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBtX2JveFNjcm9sbGluZ1Njb3Bl
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5bGUo
KQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8g
bmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KKyAgICBpZiAobV9oQmFyKQorICAg
ICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1f
dkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NmM3NmJiMmIzMjc5YmFk
YjA2ZWQ2ZDc3MTgwNzA3NDAwNDZkMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCkBAIC0wLDAgKzEsMzYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4
IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRy
aWJ1dG9yczoKKyAqICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAg
RGF2aWQgQmFyb24gPGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVz
aW5nZXIgPGNiaWVzaW5nZXJAd2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dh
dGUuY29tPgorICogICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51
bmktZ2llc3Nlbi5kZT4KKyAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAg
Qm9yaXMgWmJhcnNreSA8YnpiYXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
IEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5k
ZXIgdGhlIHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAxLjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAi
TVBMIikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwg
Zm91bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJH
UEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwg
YXJlCisgKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0
aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhl
IEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBk
ZWxldGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90
aWNlIGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBH
UEwsIGFzIHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92
aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3Jv
bGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK3VzaW5nIFNj
cm9sbGluZ1Njb3BlID0gdWludDY0X3Q7CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZSBm
aW5hbAorICAgIDogcHVibGljIFJlbmRlckxheWVyCisgICAgLCBwdWJsaWMgU2Nyb2xsYWJsZUFy
ZWEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJl
bmRlckxheWVyU2Nyb2xsYWJsZSk7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxh
eWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CisKKyAgICBleHBsaWNp
dCBSZW5kZXJMYXllclNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIHZp
cnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZSgpOworCisgICAgUmVuZGVyTWFycXVlZSogbWFy
cXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorCisgICAgSW50U2l6ZSB2
aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29u
c3QgZmluYWw7CisgICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0
IGZpbmFsOworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhl
aWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9p
bnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Ny
b2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJ
bnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsK
KworICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
Y3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihj
b25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKworICAgIHZvaWQg
c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5v
KTsKKyAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxD
bGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1h
dGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQ
b3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKworICAgIC8vIFRo
ZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChp
bnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgp
KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsg
fQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9s
bE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9CisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgLy8gUmV0dXJucyB0aGUg
bmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgorICAgIC8vIEZJWE1F
OiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJv
YmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dCwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworCisgICAgdm9pZCBhdmFpbGFibGVDb250
ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBi
b29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBt
X2hCYXIgfHwgbV92QmFyOyB9CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJv
b2wpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAgICBSZWY8
U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZv
aWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAgICBib29sIGhh
c0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFy
KCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVy
dGljYWxTY3JvbGxiYXIoKTsgfQorCisgICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVu
QnlTdHlsZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMK
KyAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fc2Nyb2xsUG9zaXRpb247IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJhciog
dmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0K
KyAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5h
bDsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAg
IGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAg
IGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgor
CisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZv
aWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNS
ZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hF
dmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9p
ZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7
CisgICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgLy8gUmV0
dXJucyB0cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRv
ZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZs
b3cuCisgICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyAgICBp
bnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygp
IGNvbnN0OworICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBv
aW50KSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgSW50U2l6ZSBvZmZzZXRGcm9t
UmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKKworICAgIHZv
aWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50
JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9s
cyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBw
YWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKKyAgICBib29sIGNhblJlc2l6ZSgpIGNv
bnN0OworICAgIHZvaWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExh
eW91dFNpemUmKTsKKyAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5S
ZXNpemVNb2RlOyB9CisgICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNp
emVNb2RlID0gYjsgfQorCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZs
b3dTY3JvbGwoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNj
cm9sbCgpOworCisgICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5
b3V0UmVjdCYpOworICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAg
ICB2b2lkIHJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKworICAgIHZvaWQgcGFpbnRPdmVy
bGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50
Um9vdCA9IG51bGxwdHIpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmc7IH0KKyNlbmRpZgorCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBm
aW5hbDsKKworICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBz
Y3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMg
c2Nyb2xsaW5nLgorICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29w
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KKyAgICBPcHRpb25hbDxT
Y3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudHNTY3JvbGxpbmdTY29wZTsgfQorCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxC
YWNrZ3JvdW5kKCkgY29uc3Q7CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9
CisgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNj
cm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9s
bGJhcnM7IH0KKworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlv
bigpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNo
YW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGxGbGFnIHsKKyAgICAgICAgSXNPdmVyZmxvd1Njcm9sbCAgICAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCAwLAorICAgICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9y
ICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAg
ICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yICAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAzLAorICAgIH07CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiA9IHsgfSk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBT
Y3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50
T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisKKyAgICBib29sIGhhc0hv
cml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygp
IGNvbnN0OworCisgICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKworICAg
IGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0
OworCisgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIC8vIFNjcm9sbGFibGVB
cmVhIGludGVyZmFjZQorICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJS
ZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJ
bnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJ
bnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZp
bmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0
SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29u
dGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3Vu
dCgpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZp
ZXcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZp
bmFsOworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lk
ZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwor
I2VuZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Cisg
ICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0
IGZpbmFsOworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xs
T2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3Jv
bGxQb3NpdGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9s
bCgpOyAgCisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBj
b25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dyk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7
CisgICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgIHZvaWQgY2xlYXJTY3Jv
bGxDb3JuZXIoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgIHZvaWQgY2xl
YXJSZXNpemVyKCk7CisKKyAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7CisKKyAgICBz
dHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxT
Y3JvbGxiYXI7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CisgICAgICAgIElu
dFJlY3Qgc2Nyb2xsQ29ybmVyOworICAgICAgICBJbnRSZWN0IHJlc2l6ZXI7CisgICAgICAgIElu
dFJlY3Qgc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyLmlzRW1wdHkoKSA/IHNjcm9sbENvcm5lciA6IHJl
c2l6ZXI7CisgICAgICAgIH0KKyAgICB9OworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJm
bG93Q29udHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50
ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisjaWYgMAorcHJp
dmF0ZToKKyAgICBib29sIHVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFJlbmRlckxheWVy
OjpVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6
OlVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4pOworCisgICAgdm9pZCBwYWludEJhY2tncm91bmRG
b3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBHcmFw
aGljc0NvbnRleHQmIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5j
eSwgY29uc3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKworICAg
IHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
R3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0
LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5n
SW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jv
b3RGb3JSZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxh
Zz4pOworICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFJl
bmRlckxheWVyOjpQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9u
T2Zmc2V0ID0gTGF5b3V0U2l6ZSgpKTsKKworICAgIGJvb2wgc2V0dXBGb250U3VicGl4ZWxRdWFu
dGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiwgYm9vbCYgZGlkUXVhbnRpemVGb250cyk7CisjZW5k
aWYKKworICAgIHZvaWQgdXBkYXRlTWFycXVlZSgpOworICAgIHZvaWQgY3JlYXRlT3JEZWxldGVN
YXJxdWVlSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRl
U2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICB2b2lkIHVwZGF0
ZVNjcm9sbGJhclN0eWxlKCk7CisKK3ByaXZhdGU6CisgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hl
dGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNl
IHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgorICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAx
OworICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92
ZXJmbG93UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEg
OiAxOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKKyAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nIDogMTsKKyNlbmRpZgorICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcgOiAxOworI2VuZGlmCisKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
IDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworCisgICAgU2Ny
b2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlv
bj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0
IG9mIG91ciBzY3JvbGxlZCBhcmVhLgorICAgIEludFNpemUgbV9zY3JvbGxTaXplOworCisgICAg
Ly8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJz
LgorICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBt
X3ZCYXI7CisKKyAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisK
KyAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3Jv
bGxpbmdTY29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgTWFya2FibGU8U2Nyb2xs
aW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVl
ZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCisKKyAgICAvLyBSZW5kZXJlcnMg
dG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVy
UHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBJbnRSZWN0IG1fYmxvY2tTZWxl
Y3Rpb25HYXBzQm91bmRzOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6UmVuZGVyTGF5ZXImIGxheWVyKSB7IHJldHVybiBsYXllci5sYXllclR5
cGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOyB9CitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKaW5kZXggN2U5ZjM4MzJkMzZlZmQxOTEzY2Y3Mzk3MDExZWJiM2QyMTk0
OGUyNC4uZTQ1NmM2YzhhNTU4MzIwNGY2M2FlZmI2OGU4YmMwMzBiNmQ3NjFiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDgsNyArNDgsNyBAQAog
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODc5
LDEwICs4NzksOSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09u
TWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbgogU2Nyb2xsYWJsZUFyZWEqIFJl
bmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKIHsKICAgICBhdXRv
KiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxh
eWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0
dXJuIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwog
fQogCiBib29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQpA
QCAtODkyLDcgKzg5MSwxMCBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKQogCiBib29sIFJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IoKQogewotICAgIHJldHVybiBlbmNsb3NpbmdMYXllcigpICYmIGVu
Y2xvc2luZ0xheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsK
KyAgICBhdXRvKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKCFsYXllciB8fCAh
bGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3RvcigpOwogfQogCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OnNjcm9sbGFibGVBcmVh
Qm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2ZTZiZmJlNDBhNjQ0MTE2NDQ1OWFhNjc4MGQ4
Yi4uMWJhNWE2MDIxZThkMjEzYWJkNDI0ZTdlZWY1MjM4NGJmNDAxOTBjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcApAQCAtNDksMTQgKzQ5LDE0IEBACiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE1hcnF1ZWVFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotUmVuZGVy
TWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIpCitSZW5kZXJNYXJxdWVl
OjpSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbGF5ZXIpCiAgICAgOiBtX2xh
eWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVyRmly
ZWQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaAppbmRleCAxYzc4
ODQ5NWUwZTg4NTc1ZTgwYmY5MzA4YTJmNDk0ZmI0YTYyOGQ1Li4wODRhZDMzNzc0ODZkZjljZTgz
MjU2NjY2ODU0NTJjNDdiOTgyMzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmgKQEAgLTQ5LDEzICs0OSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiAvLyBUaGlz
IGNsYXNzIGhhbmRsZXMgdGhlIGF1dG8tc2Nyb2xsaW5nIGZvciA8bWFycXVlZT4KIGNsYXNzIFJl
bmRlck1hcnF1ZWUgZmluYWwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlck1hcnF1
ZWUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5k
ZXJNYXJxdWVlKFJlbmRlckxheWVyKik7CisgICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5k
ZXJMYXllclNjcm9sbGFibGUqKTsKICAgICB+UmVuZGVyTWFycXVlZSgpOwogCiAgICAgYm9vbCBp
c0hvcml6b250YWwoKSBjb25zdDsKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgdGltZXJGaXJlZCgpOwogCi0gICAgUmVuZGVyTGF5ZXIqIG1fbGF5ZXI7CisgICAgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlKiBtX2xheWVyOwogICAgIFRpbWVyIG1fdGltZXI7CiAgICAgaW50IG1f
Y3VycmVudExvb3AgeyAwIH07CiAgICAgaW50IG1fdG90YWxMb29wcyB7IDAgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA3MTEzZjVjMzI5MDBlZDc2NGIzNmU0
NDc5Yjk2MDdmMDc3OWIxMmY4Li45NTc1NDFhNmJlODFmMWMwYzZjY2Q3Y2E0NmY1Y2JmMWMzYjZk
OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAsNiAr
MTAwLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVuZGVy
QmxvY2tGbG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1
bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQog
ICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcAppbmRleCA2MjYwYTgxNTc5ZjU4NGY1OGNjNDBmN2NlMDkwNzViOWIwODY1YWY4Li5lZTJh
ZTY2NTJhMjIyYmJkMzg1YzhiNmQzYzg5NmQ2MmQyNGMwNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApA
QCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKQEAgLTQwMCwxNyArNDAwLDIyIEBAIGJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsCiAgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4
dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0g
ICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9ja0Zs
b3c6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVu
dCwgc3RhcnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KTsKIH0KIAogYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
aW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOwotICAgIGlmIChsYXllciAm
JiBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
IFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50
KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxh
eWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1Bo
eXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHls
ZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIFJlbmRlckJs
b2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
LCBzdG9wRWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAppbmRleCBlMDU2MGQ3YTUyYTk1MjY0ZDZhM2Q1NjgyZDc5MzU2OTVjMjNm
NjBjLi5jYmM4OWNkMzgyYmNiOWEzZTJmN2IyZjM2NzViZWZmMTE5YzZiMjlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00Nyw4ICs0Nyw4
IEBACiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBA
IC01OTksMTUgKzU5OSwxNiBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAg
dHMgPDwgIiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlwUmVjdDsKICAgICB9CiAKLSAgICBpZiAobGF5
ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAobGF5ZXIuc2Ny
b2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbGF5ZXIu
c2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgp
KQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCku
eSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5y
ZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgoKSkKLSAgICAg
ICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0aCgpOwotICAg
ICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3go
KS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAgICAgICAgICAg
dHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsKKyAgICBpZiAo
bGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci5zY3JvbGxhYmxlTGF5
ZXIoKSkgeworICAgICAgICBhdXRvJiBzY3JvbGxhYmxlTGF5ZXIgPSAqbGF5ZXIuc2Nyb2xsYWJs
ZUxheWVyKCk7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgp
KQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgc2Nyb2xsYWJsZUxheWVyLnNjcm9s
bE9mZnNldCgpLngoKTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQo
KS55KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXIu
c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91
bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gc2Nyb2xsYWJsZUxh
eWVyLnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwg
c2Nyb2xsYWJsZUxheWVyLnNjcm9sbFdpZHRoKCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJC
b3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0g
c2Nyb2xsYWJsZUxheWVyLnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxIZWlnaHQgIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsSGVpZ2h0KCk7CiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgICAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKTsKICAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVt
ZSgpICYmIGxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggMTcyNDhjZGEzNGFhNmI2YTcxOTZmN2YwMDZm
MjA4NWZhOWFiNDI2Yy4uMzQ3MDZkNjZlZTAwMzM1MzAxZWEwNmQxMDI1NDIxNTc3MzY2OGViYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTI4LDggKzI4
LDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMjksOCAr
MzI5LDggQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
KCkuZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkpOwogICAgIH0KIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCkt
PmNhblJlc2l6ZSgpKQotICAgICAgICBsYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNv
bnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8u
cmVjdCk7CisgICAgaWYgKGhhc0xheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xs
YWJsZUxheWVyKCktPmNhblJlc2l6ZSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFp
bnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBh
aW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOwogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0
T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBpc092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKaW5kZXggYzA1M2E0ZGRhMjAwOGVmZDdhNjY4OGQzNDQ4ZmZiZjNiZmNiZTFm
NS4uODJiOWJlNGE3MGFlOTdkODVmNmM5MWQyNDEzY2U2YmJmNzgwZTc5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTU1LDYgKzE1NSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTkwNiw3ICsxOTA3LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxl
ZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5
ZXIoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiAg
ICAgfQogICAgIAogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCkBAIC0yOTAxLDcgKzI5MDIsNyBA
QCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFG
b3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0Qm94Pihy
ZW5kZXJCb3gpKQogICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSAmZG93bmNhc3Q8UmVuZGVy
TGlzdEJveD4ocmVuZGVyQm94KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEgPSByZW5kZXJCb3gubGF5ZXIoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0g
cmVuZGVyQm94LnNjcm9sbGFibGVMYXllcigpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmNwcAppbmRleCBiZjY4YTcxNDVkYTg5OGVkNGU3Y2U3NGU2MTU3ZjAwYmQ3MGY3YTYz
Li5hNGU3NjNiNDU4OTJiOTkwYjMzYzY2MzhkOWQwMmY2OTIwYjhmNzI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9Qb3B1cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudVdpbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJM
YXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJl
ZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjAzNSwxMCAr
MjAzNSwxMiBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOwog
ICAgICAgICBJbnRTaXplIGxvZ2ljYWxTY3JvbGxEZWx0YSgtZGVsdGFYICogc2NhbGVGYWN0b3Is
IC1kZWx0YVkgKiBzY2FsZUZhY3Rvcik7CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHNjcm9sbGFi
bGVMYXllciA9IG51bGxwdHI7CisgICAgICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xs
YWJsZUxheWVyID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG1fZ2VzdHVyZVRhcmdldE5vZGUgJiYg
bV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8q
IGxheWVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIo
KSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRh
cmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Olllcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXNjcm9s
bGFibGVMYXllcikgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>